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_10:ptr<function, i32, read_write> = var
    %x_11:ptr<function, i32, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %x_10, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_42:ptr<function, bool, read_write> = var
        %9:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
        %10:f32 = load_vector_element %9, 1u
        %11:bool = lt %10, 0.0f
        store %x_42, %11
        %12:bool = load %x_42
        if %12 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            %13:i32 = load %x_10
            store %x_11, %13
            continue %b4
          }
          %b6 = block {  # false
            store %GLF_live0i, 0i
            loop [b: %b7, c: %b8] {  # loop_2
              %b7 = block {  # body
                %x_47:bool = let true
                %15:bool = load %x_42
                if %15 [t: %b9] {  # if_2
                  %b9 = block {  # true
                    exit_loop  # loop_2
                  }
                }
                ret 1i
              }
              %b8 = block {  # continuing
                next_iteration %b7
              }
            }
            %16:bool = load %x_42
            if %16 [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
              }
            }
            %17:i32 = load %x_10
            store %x_11, %17
            continue %b4
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %18:i32 = load %x_11
        store %x_10, %18
        break_if true %b3
      }
    }
    %19:i32 = load %x_11
    ret %19
  }
}
%main_1 = func():void -> %b13 {
  %b13 = block {
    %x_9:i32 = call %performPartition_
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b14 {
  %b14 = block {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    ret %25
  }
}

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