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_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%makeFrame_ = func():f32 {
  $B2: {
    %x_60:ptr<function, f32, read_write> = var
    %x_63_phi:ptr<function, f32, read_write> = var
    loop [b: $B3] {  # loop_1
      $B3: {  # body
        %x_41:ptr<function, bool, read_write> = var
        %x_44:ptr<function, f32, read_write> = var
        %x_45:ptr<function, f32, read_write> = var
        %x_42:ptr<function, bool, read_write> = var
        %x_41_phi:ptr<function, bool, read_write> = var
        %x_8_phi:ptr<function, i32, read_write> = var
        %x_44_phi:ptr<function, f32, read_write> = var
        %x_60_phi:ptr<function, f32, read_write> = var
        %x_61_phi:ptr<function, bool, read_write> = var
        store %x_41_phi, false
        store %x_8_phi, 0i
        store %x_44_phi, 0.0f
        loop [b: $B4, c: $B5] {  # loop_2
          $B4: {  # body
            %x_50:ptr<function, f32, read_write> = var
            %x_9:ptr<function, i32, read_write> = var
            %x_52:ptr<function, bool, read_write> = var
            %x_7:ptr<function, i32, read_write> = var
            %x_50_phi:ptr<function, f32, read_write> = var
            %x_9_phi:ptr<function, i32, read_write> = var
            %x_52_phi:ptr<function, bool, read_write> = var
            %x_45_phi:ptr<function, f32, read_write> = var
            %x_42_phi:ptr<function, bool, read_write> = var
            %24:bool = load %x_41_phi
            store %x_41, %24
            %25:i32 = load %x_8_phi
            %x_8:i32 = let %25
            %27:f32 = load %x_44_phi
            store %x_44, %27
            %28:f32 = load %x_44
            store %x_60_phi, %28
            %29:bool = load %x_41
            store %x_61_phi, %29
            %30:bool = lt %x_8, 1i
            if %30 [t: $B6, f: $B7] {  # if_1
              $B6: {  # true
                exit_if  # if_1
              }
              $B7: {  # false
                exit_loop  # loop_2
              }
            }
            %31:f32 = load %x_44
            store %x_50_phi, %31
            store %x_9_phi, %x_8
            %32:bool = load %x_41
            store %x_52_phi, %32
            loop [b: $B8] {  # loop_3
              $B8: {  # body
                %33:f32 = load %x_50_phi
                store %x_50, %33
                %34:i32 = load %x_9_phi
                store %x_9, %34
                %35:bool = load %x_52_phi
                store %x_52, %35
                %36:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
                %37:f32 = load_vector_element %36, 1u
                %x_54:f32 = let %37
                %39:f32 = load %x_50
                store %x_45_phi, %39
                %40:bool = load %x_52
                store %x_42_phi, %40
                %41:i32 = call %tint_f32_to_i32, %x_54
                %43:bool = lt 1i, %41
                if %43 [t: $B9, f: $B10] {  # if_2
                  $B9: {  # true
                    exit_if  # if_2
                  }
                  $B10: {  # false
                    exit_loop  # loop_3
                  }
                }
                store %x_45_phi, 1.0f
                store %x_42_phi, true
                exit_loop  # loop_3
              }
            }
            %44:f32 = load %x_45_phi
            store %x_45, %44
            %45:bool = load %x_42_phi
            store %x_42, %45
            %46:f32 = load %x_45
            store %x_60_phi, %46
            %47:bool = load %x_42
            store %x_61_phi, %47
            %48:bool = load %x_42
            if %48 [t: $B11] {  # if_3
              $B11: {  # true
                exit_loop  # loop_2
              }
            }
            continue  # -> $B5
          }
          $B5: {  # continuing
            %49:i32 = load %x_9
            %50:i32 = add %49, 1i
            %51:i32 = bitcast %50
            store %x_7, %51
            %52:bool = load %x_42
            store %x_41_phi, %52
            %53:i32 = load %x_7
            store %x_8_phi, %53
            %54:f32 = load %x_45
            store %x_44_phi, %54
            next_iteration  # -> $B4
          }
        }
        %55:f32 = load %x_60_phi
        store %x_60, %55
        %56:bool = load %x_61_phi
        %x_61:bool = let %56
        %58:f32 = load %x_60
        store %x_63_phi, %58
        if %x_61 [t: $B12] {  # if_4
          $B12: {  # true
            exit_loop  # loop_1
          }
        }
        store %x_63_phi, 1.0f
        exit_loop  # loop_1
      }
    }
    %59:f32 = load %x_63_phi
    %x_63:f32 = let %59
    ret %x_63
  }
}
%main_1 = func():void {
  $B13: {
    %62:f32 = call %makeFrame_
    %x_34:f32 = let %62
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B14: {
    %65:void = call %main_1
    %66:vec4<f32> = load %x_GLF_color
    %67:main_out = construct %66
    ret %67
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B15: {
    %69:i32 = convert %value
    %70:bool = gte %value, -2147483648.0f
    %71:i32 = select -2147483648i, %69, %70
    %72:bool = lte %value, 2147483520.0f
    %73:i32 = select 2147483647i, %71, %72
    ret %73
  }
}

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