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_phi:ptr<function, i32, read_write> = var
    store %loop_count, 0i
    store %x_38_phi, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_39:ptr<function, i32, read_write> = var
        %x_45_phi:ptr<function, i32, read_write> = var
        %8:i32 = load %x_38_phi
        %x_38:i32 = let %8
        %10:i32 = add %x_38, 1i
        %x_43:i32 = let %10
        store %loop_count, %x_43
        store %x_45_phi, %x_43
        loop [b: $B5, c: $B6] {  # loop_2
          $B5: {  # body
            %12:i32 = load %x_45_phi
            %x_45:i32 = let %12
            %14:i32 = add %x_45, 1i
            store %x_39, %14
            %15:i32 = load %x_39
            store %loop_count, %15
            %16:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %17:f32 = load_vector_element %16, 0u
            %x_50:f32 = let %17
            %19:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %20:f32 = load_vector_element %19, 1u
            %x_52:f32 = let %20
            %22:bool = lt %x_50, %x_52
            if %22 [t: $B7] {  # if_1
              $B7: {  # true
                ret 1i
              }
            }
            %23:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %24:f32 = load_vector_element %23, 0u
            %x_57:f32 = let %24
            %26:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
            %27:f32 = load_vector_element %26, 1u
            %x_59:f32 = let %27
            %29:bool = lt %x_57, %x_59
            if %29 [t: $B8] {  # if_2
              $B8: {  # true
                exit_loop  # loop_2
              }
            }
            continue  # -> $B6
          }
          $B6: {  # continuing
            %30:i32 = load %x_39
            store %x_45_phi, %30
            %31:i32 = load %x_39
            %32:bool = lt %31, 100i
            %33:bool = eq %32, false
            break_if %33  # -> [t: exit_loop loop_2, f: $B5]
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %34:i32 = load %x_39
        store %x_38_phi, %34
        %35:i32 = load %x_39
        %36:bool = lt %35, 100i
        %37:bool = eq %36, false
        break_if %37  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    ret 0i
  }
}
%main_1 = func():void {
  $B9: {
    %39:i32 = call %func_
    %x_31:i32 = let %39
    %41:bool = eq %x_31, 1i
    if %41 [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: {
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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