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

buf2 = struct @align(4) {
  zero:f32 @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_color_1:vec4<f32> @offset(0), @location(0)
}

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

%main_1 = func():void {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    %7:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %8:f32 = load %7
    %9:vec4<f32> = construct %8
    store %x_GLF_color, %9
    %10:ptr<uniform, f32, read> = access %x_7, 0u
    %11:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %13:f32 = load %12
    %14:bool = gt %11, %13
    if %14 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        loop [b: $B5, c: $B6] {  # loop_1
          $B5: {  # body
            %15:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
            %16:f32 = load %15
            %17:vec4<f32> = construct %16
            store %x_GLF_color, %17
            continue  # -> $B6
          }
          $B6: {  # continuing
            break_if false  # -> [t: exit_loop loop_1, f: $B5]
          }
        }
        exit_if  # if_1
      }
      $B4: {  # false
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            loop [b: $B9] {  # loop_3
              $B9: {  # body
                if true [t: $B10, f: $B11] {  # if_2
                  $B10: {  # true
                    exit_if  # if_2
                  }
                  $B11: {  # false
                    exit_loop  # loop_3
                  }
                }
                %18:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
                %19:i32 = load %18
                store %i, %19
                loop [b: $B12, c: $B13] {  # loop_4
                  $B12: {  # body
                    %20:i32 = load %i
                    %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
                    %22:i32 = load %21
                    %23:bool = lt %20, %22
                    if %23 [t: $B14, f: $B15] {  # if_3
                      $B14: {  # true
                        exit_if  # if_3
                      }
                      $B15: {  # false
                        exit_loop  # loop_4
                      }
                    }
                    %24:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
                    %25:f32 = load %24
                    %26:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
                    %27:f32 = load %26
                    %28:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
                    %29:f32 = load %28
                    %30:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
                    %31:f32 = load %30
                    %32:vec4<f32> = construct %25, %27, %29, %31
                    store %x_GLF_color, %32
                    continue  # -> $B13
                  }
                  $B13: {  # continuing
                    %33:i32 = load %i
                    %34:i32 = add %33, 1i
                    store %i, %34
                    next_iteration  # -> $B12
                  }
                }
                exit_loop  # loop_3
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %35:ptr<uniform, f32, read> = access %x_7, 0u
            %36:f32 = load %35
            %x_82:f32 = let %36
            %38:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
            %39:f32 = load %38
            %x_84:f32 = let %39
            %41:bool = gt %x_82, %x_84
            %42:bool = eq %41, false
            break_if %42  # -> [t: exit_loop loop_2, f: $B7]
          }
        }
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B16: {
    %44:void = call %main_1
    %45:vec4<f32> = load %x_GLF_color
    %46:main_out = construct %45
    ret %46
  }
}

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