SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 4> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 2> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_v1_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_12:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_v1:ptr<private, vec4<f32>, read_write> = var
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %uv:ptr<function, vec2<f32>, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %11:vec4<f32> = load %gl_FragCoord
    %x_49:vec4<f32> = let %11
    %13:f32 = access %x_49, 0u
    %14:f32 = access %x_49, 1u
    %15:vec2<f32> = construct %13, %14
    store %uv, %15
    %16:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %17:f32 = load %16
    %x_52:f32 = let %17
    %19:vec4<f32> = construct %x_52, %x_52, %x_52, %x_52
    store %v1, %19
    %20:f32 = load_vector_element %uv, 1u
    %x_55:f32 = let %20
    %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %23:f32 = load %22
    %x_57:f32 = let %23
    %25:bool = gte %x_55, %x_57
    if %25 [t: $B3] {  # if_1
      $B3: {  # true
        %26:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %27:f32 = load %26
        %x_62:f32 = let %27
        store_vector_element %v1, 0u, %x_62
        %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %30:f32 = load %29
        %x_65:f32 = let %30
        store_vector_element %v1, 1u, %x_65
        %32:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %33:f32 = load %32
        %x_68:f32 = let %33
        store_vector_element %v1, 2u, %x_68
        %35:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %36:f32 = load %35
        %x_71:f32 = let %36
        store_vector_element %v1, 3u, %x_71
        exit_if  # if_1
      }
    }
    %38:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
    %39:f32 = load %38
    %x_74:f32 = let %39
    store %a, %x_74
    %41:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
    %42:i32 = load %41
    %x_15:i32 = let %42
    store %i, %x_15
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %44:i32 = load %i
        %x_16:i32 = let %44
        %46:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %47:i32 = load %46
        %x_17:i32 = let %47
        %49:bool = lt %x_16, %x_17
        if %49 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %50:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %51:f32 = load %50
        %x_84:f32 = let %51
        %53:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %54:f32 = load %53
        %x_86:f32 = let %54
        %56:bool = lt %x_84, %x_86
        if %56 [t: $B8] {  # if_3
          $B8: {  # true
            store %continue_execution, false
            exit_if  # if_3
          }
        }
        %57:f32 = load_vector_element %v1, 0u
        %x_91:f32 = let %57
        %59:f32 = load_vector_element %v1, 1u
        %x_93:f32 = let %59
        %61:f32 = load_vector_element %v1, 2u
        %x_96:f32 = let %61
        %63:f32 = load_vector_element %v1, 3u
        %x_99:f32 = let %63
        %65:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
        %66:f32 = load %65
        %x_102:f32 = let %66
        %68:f32 = add %x_91, %x_93
        %69:f32 = add %68, %x_96
        %70:f32 = add %69, %x_99
        %71:f32 = pow %70, %x_102
        store %a, %71
        continue  # -> $B5
      }
      $B5: {  # continuing
        %72:i32 = load %i
        %x_18:i32 = let %72
        %74:i32 = add %x_18, 1i
        store %i, %74
        next_iteration  # -> $B4
      }
    }
    %75:f32 = load %a
    %x_104:f32 = let %75
    %77:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %78:f32 = load %77
    %x_106:f32 = let %78
    %80:bool = eq %x_104, %x_106
    if %80 [t: $B9, f: $B10] {  # if_4
      $B9: {  # true
        %81:vec4<f32> = load %v1
        %x_111:vec4<f32> = let %81
        store %x_GLF_v1, %x_111
        exit_if  # if_4
      }
      $B10: {  # false
        %83:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %84:i32 = load %83
        %x_20:i32 = let %84
        %86:f32 = convert %x_20
        %x_113:f32 = let %86
        %88:vec4<f32> = construct %x_113, %x_113, %x_113, %x_113
        store %x_GLF_v1, %88
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B11: {
    store %gl_FragCoord, %gl_FragCoord_param
    %91:void = call %main_1
    %92:vec4<f32> = load %x_GLF_v1
    %93:main_out = construct %92
    %94:bool = load %continue_execution
    %95:bool = eq %94, false
    if %95 [t: $B12] {  # if_5
      $B12: {  # true
        terminate_invocation
      }
    }
    ret %93
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
