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, 3> @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, 4> @offset(0)
}

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

$B1: {  # root
  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %A:ptr<function, array<f32, 2>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %x_101:ptr<function, bool, read_write> = var
    %x_102_phi:ptr<function, bool, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %11:f32 = load %10
    %x_39:f32 = let %11
    %13:ptr<function, f32, read_write> = access %A, 0i
    store %13, %x_39
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %15:f32 = load %14
    %x_42:f32 = let %15
    %17:ptr<function, f32, read_write> = access %A, 1i
    store %17, %x_42
    %18:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %19:i32 = load %18
    %x_45:i32 = let %19
    store %i, %x_45
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %21:i32 = load %i
        %x_50:i32 = let %21
        %23:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
        %24:i32 = load %23
        %x_52:i32 = let %24
        %26:bool = lt %x_50, %x_52
        if %26 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %27:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %28:i32 = load %27
        %x_56:i32 = let %28
        store %j, %x_56
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %30:i32 = load %j
            %x_61:i32 = let %30
            %32:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
            %33:i32 = load %32
            %x_63:i32 = let %33
            %35:bool = lt %x_61, %x_63
            if %35 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %36:i32 = load %j
            %x_66:i32 = let %36
            switch %x_66 [c: (1i, $B11), c: (0i, $B12), c: (default, $B13)] {  # switch_1
              $B11: {  # case
                %38:i32 = load %i
                %x_78:i32 = let %38
                %40:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
                %41:f32 = load %40
                %x_80:f32 = let %41
                %43:ptr<function, f32, read_write> = access %A, %x_78
                store %43, %x_80
                exit_switch  # switch_1
              }
              $B12: {  # case
                %44:i32 = load %i
                %x_70:i32 = let %44
                %46:bool = lt -2147483648i, %x_70
                if %46 [t: $B14] {  # if_3
                  $B14: {  # true
                    continue  # -> $B8
                  }
                }
                %47:i32 = load %i
                %x_74:i32 = let %47
                %49:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
                %50:f32 = load %49
                %x_76:f32 = let %50
                %52:ptr<function, f32, read_write> = access %A, %x_74
                store %52, %x_76
                exit_switch  # switch_1
              }
              $B13: {  # case
                exit_switch  # switch_1
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %53:i32 = load %j
            %x_82:i32 = let %53
            %55:i32 = add %x_82, 1i
            store %j, %55
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %56:i32 = load %i
        %x_84:i32 = let %56
        %58:i32 = add %x_84, 1i
        store %i, %58
        next_iteration  # -> $B3
      }
    }
    %59:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %60:i32 = load %59
    %x_87:i32 = let %60
    %62:ptr<function, f32, read_write> = access %A, %x_87
    %63:f32 = load %62
    %x_89:f32 = let %63
    %65:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %66:f32 = load %65
    %x_91:f32 = let %66
    %68:bool = eq %x_89, %x_91
    %x_92:bool = let %68
    store %x_102_phi, %x_92
    if %x_92 [t: $B15] {  # if_4
      $B15: {  # true
        %70:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %71:i32 = load %70
        %x_96:i32 = let %71
        %73:ptr<function, f32, read_write> = access %A, %x_96
        %74:f32 = load %73
        %x_98:f32 = let %74
        %76:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %77:f32 = load %76
        %x_100:f32 = let %77
        %79:bool = eq %x_98, %x_100
        store %x_101, %79
        %80:bool = load %x_101
        store %x_102_phi, %80
        exit_if  # if_4
      }
    }
    %81:bool = load %x_102_phi
    %x_102:bool = let %81
    if %x_102 [t: $B16, f: $B17] {  # if_5
      $B16: {  # true
        %83:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %84:i32 = load %83
        %x_107:i32 = let %84
        %86:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %87:i32 = load %86
        %x_110:i32 = let %87
        %89:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %90:i32 = load %89
        %x_113:i32 = let %90
        %92:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %93:i32 = load %92
        %x_116:i32 = let %93
        %95:f32 = convert %x_107
        %96:f32 = let %95
        %97:f32 = convert %x_110
        %98:f32 = let %97
        %99:f32 = convert %x_113
        %100:f32 = let %99
        %101:f32 = convert %x_116
        %102:vec4<f32> = construct %96, %98, %100, %101
        store %x_GLF_color, %102
        exit_if  # if_5
      }
      $B17: {  # false
        %103:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %104:i32 = load %103
        %x_120:i32 = let %104
        %106:f32 = convert %x_120
        %x_121:f32 = let %106
        %108:vec4<f32> = construct %x_121, %x_121, %x_121, %x_121
        store %x_GLF_color, %108
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B18: {
    %110:void = call %main_1
    %111:vec4<f32> = load %x_GLF_color
    %112:main_out = construct %111
    ret %112
  }
}

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.  *
********************************************************************
