SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # root
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%performPartition_ = func():i32 -> %b2 {
  %b2 = block {
    %GLF_live0i:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_11:ptr<function, i32, read_write> = var
    %x_10_phi:ptr<function, i32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %x_10_phi, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_11_phi:ptr<function, i32, read_write> = var
        %x_10:i32 = load %x_10_phi
        %x_42:ptr<function, bool, read_write> = var
        %11:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %x_41:f32 = load_vector_element %11, 1u
        %13:bool = lt %x_41, 0.0f
        store %x_42, %13
        %14:bool = load %x_42
        if %14 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            store %x_11_phi, %x_10
            continue %b4
          }
          %b6 = block {  # false
            store %GLF_live0i, 0i
            loop [b: %b7, c: %b8] {  # loop_2
              %b7 = block {  # body
                %x_47:bool = let true
                %16:bool = load %x_42
                if %16 [t: %b9] {  # if_2
                  %b9 = block {  # true
                    exit_loop  # loop_2
                  }
                }
                ret 1i
              }
              %b8 = block {  # continuing
                next_iteration %b7
              }
            }
            %17:bool = load %x_42
            if %17 [t: %b10] {  # if_3
              %b10 = block {  # true
                loop [b: %b11, c: %b12] {  # loop_3
                  %b11 = block {  # body
                    ret 1i
                  }
                  %b12 = block {  # continuing
                    next_iteration %b11
                  }
                }
                exit_if  # if_3
              }
            }
            store %x_11_phi, %x_10
            continue %b4
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %18:i32 = load %x_11_phi
        store %x_11, %18
        %19:i32 = load %x_11
        store %x_10_phi, %19
        break_if true %b3
      }
    }
    %20:i32 = load %x_11
    ret %20
  }
}
%main_1 = func():void -> %b13 {
  %b13 = block {
    %x_9:i32 = call %performPartition_
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b14 {
  %b14 = block {
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    ret %26
  }
}

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