SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  one: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
}

%main_1 = func():void {
  $B2: {
    %f:ptr<function, f32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %v:ptr<function, vec3<f32>, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u
    %11:f32 = load %10
    %x_42:f32 = let %11
    store %f, %x_42
    store %a, 1i
    store %b, 0i
    store %c, 1i
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %13:i32 = load %i
        %x_47:i32 = let %13
        %15:bool = lt %x_47, 3i
        if %15 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %16:i32 = load %i
        %x_50:i32 = let %16
        %18:f32 = load %f
        %x_51:f32 = let %18
        %20:i32 = load %i
        %x_52:i32 = let %20
        %22:f32 = convert %x_52
        %23:f32 = add %x_51, %22
        store_vector_element %v, %x_50, %23
        continue  # -> $B4
      }
      $B4: {  # continuing
        %24:i32 = load %i
        %x_56:i32 = let %24
        %26:i32 = add %x_56, 1i
        store %i, %26
        next_iteration  # -> $B3
      }
    }
    %27:ptr<uniform, f32, read> = access %x_6, 0u
    %28:f32 = load %27
    %x_59:f32 = let %28
    %30:bool = eq %x_59, 1.0f
    if %30 [t: $B7] {  # if_2
      $B7: {  # true
        loop [b: $B8, c: $B9] {  # loop_2
          $B8: {  # body
            store %x_GLF_color, vec4<f32>(0.0f)
            continue  # -> $B9
          }
          $B9: {  # continuing
            %31:i32 = load %c
            %x_67:i32 = let %31
            %33:i32 = load %a
            %x_68:i32 = let %33
            %35:i32 = load %b
            %x_69:i32 = let %35
            %37:i32 = or %x_68, %x_69
            %38:i32 = and %x_67, %37
            %39:bool = eq %38, 0i
            %40:bool = eq %39, false
            break_if %40  # -> [t: exit_loop loop_2, f: $B8]
          }
        }
        %41:ptr<uniform, f32, read> = access %x_6, 0u
        %42:f32 = load %41
        %x_74:f32 = let %42
        %44:bool = eq %x_74, 1.0f
        if %44 [t: $B10] {  # if_3
          $B10: {  # true
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_if  # if_3
          }
        }
        exit_if  # if_2
      }
    }
    %45:f32 = load_vector_element %v, 0u
    %x_79:f32 = let %45
    %47:f32 = load_vector_element %v, 1u
    %x_83:f32 = let %47
    %49:f32 = load_vector_element %v, 2u
    %x_87:f32 = let %49
    %51:bool = eq %x_79, 1.0f
    %52:f32 = select 0.0f, 1.0f, %51
    %53:f32 = let %52
    %54:bool = eq %x_83, 2.0f
    %55:f32 = select 1.0f, 0.0f, %54
    %56:f32 = let %55
    %57:bool = eq %x_87, 3.0f
    %58:f32 = select 1.0f, 0.0f, %57
    %59:vec3<f32> = construct %53, %56, %58
    %x_90:vec3<f32> = let %59
    %61:vec4<f32> = load %x_GLF_color
    %x_91:vec4<f32> = let %61
    %63:f32 = access %x_90, 0u
    %64:f32 = access %x_90, 1u
    %65:f32 = access %x_90, 2u
    %66:f32 = access %x_91, 3u
    %67:vec4<f32> = construct %63, %64, %65, %66
    store %x_GLF_color, %67
    store_vector_element %x_GLF_color, 3u, 1.0f
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %69:void = call %main_1
    %70:vec4<f32> = load %x_GLF_color
    %71:main_out = construct %70
    ret %71
  }
}

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