SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

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

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

%func_ = func():i32 {
  $B2: {
    %loop_count:ptr<function, i32, read_write> = var
    %x_38:ptr<function, i32, read_write> = var
    store %loop_count, 0i
    store %x_38, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_45:ptr<function, i32, read_write> = var
        %x_39:ptr<function, i32, read_write> = var
        %8:i32 = load %x_38
        %9:i32 = add %8, 1i
        %x_43:i32 = let %9
        store %loop_count, %x_43
        store %x_45, %x_43
        loop [b: $B5, c: $B6] {  # loop_2
          $B5: {  # body
            %11:i32 = load %x_45
            %12:i32 = add %11, 1i
            store %x_39, %12
            %13:i32 = load %x_39
            store %loop_count, %13
            %14:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %15:f32 = load_vector_element %14, 0u
            %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %17:f32 = load_vector_element %16, 1u
            %18:bool = lt %15, %17
            if %18 [t: $B7] {  # if_1
              $B7: {  # true
                ret 1i
              }
            }
            %19:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %20:f32 = load_vector_element %19, 0u
            %21:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %22:f32 = load_vector_element %21, 1u
            %23:bool = lt %20, %22
            if %23 [t: $B8] {  # if_2
              $B8: {  # true
                exit_loop  # loop_2
              }
            }
            continue  # -> $B6
          }
          $B6: {  # continuing
            %24:i32 = load %x_39
            store %x_45, %24
            %25:i32 = load %x_39
            %26:bool = lt %25, 100i
            %27:bool = eq %26, false
            break_if %27  # -> [t: exit_loop loop_2, f: $B5]
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %28:i32 = load %x_39
        store %x_38, %28
        %29:i32 = load %x_39
        %30:bool = lt %29, 100i
        %31:bool = eq %30, false
        break_if %31  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    ret 0i
  }
}
%main_1 = func():void {
  $B9: {
    %33:i32 = call %func_
    %x_31:i32 = let %33
    %35:bool = eq %x_31, 1i
    if %35 [t: $B10, f: $B11] {  # if_3
      $B10: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      $B11: {  # false
        store %x_GLF_color, vec4<f32>(1.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B12: {
    %37:void = call %main_1
    %38:vec4<f32> = load %x_GLF_color
    %39:main_out = construct %38
    ret %39
  }
}

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