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

%x_51 = func():void {
  $B2: {
    store %continue_execution, false
    ret
  }
}
%main_1 = func():void {
  $B3: {
    loop [b: $B4] {  # loop_1
      $B4: {  # body
        %x_31:ptr<function, bool, read_write> = var
        %x_30_phi:ptr<function, bool, read_write> = var
        store %x_30_phi, false
        loop [b: $B5, c: $B6] {  # loop_2
          $B5: {  # body
            %x_31_phi:ptr<function, bool, read_write> = var
            %9:bool = load %x_30_phi
            %x_30:bool = let %9
            loop [b: $B7] {  # loop_3
              $B7: {  # body
                %x_52:ptr<function, vec4<f32>, read_write> = var
                %x_54:ptr<function, vec4<f32>, read_write> = var
                %x_55_phi:ptr<function, vec4<f32>, read_write> = var
                %14:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
                %15:f32 = load_vector_element %14, 1u
                %x_36:f32 = let %15
                store %x_31_phi, %x_30
                %17:bool = gt %x_36, 0.0f
                if %17 [t: $B8, f: $B9] {  # if_1
                  $B8: {  # true
                    exit_if  # if_1
                  }
                  $B9: {  # false
                    exit_loop  # loop_3
                  }
                }
                loop [b: $B10] {  # loop_4
                  $B10: {  # body
                    %18:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
                    %19:f32 = load_vector_element %18, 0u
                    %x_46:f32 = let %19
                    %21:bool = gt %x_46, 0.0f
                    if %21 [t: $B11] {  # if_2
                      $B11: {  # true
                        %22:void = call %x_51
                        exit_if  # if_2
                      }
                    }
                    %23:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
                    %24:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %23
                    store %x_54, %24
                    %25:vec4<f32> = load %x_54
                    store %x_55_phi, %25
                    exit_loop  # loop_4
                  }
                }
                %26:vec4<f32> = load %x_55_phi
                %x_55:vec4<f32> = let %26
                store %x_GLF_color, %x_55
                store %x_31_phi, true
                exit_loop  # loop_3
              }
            }
            %28:bool = load %x_31_phi
            store %x_31, %28
            %29:bool = load %x_31
            if %29 [t: $B12, f: $B13] {  # if_3
              $B12: {  # true
                exit_loop  # loop_2
              }
              $B13: {  # false
                continue  # -> $B6
              }
            }
            unreachable
          }
          $B6: {  # continuing
            %30:bool = load %x_31
            store %x_30_phi, %30
            next_iteration  # -> $B5
          }
        }
        %31:bool = load %x_31
        if %31 [t: $B14] {  # if_4
          $B14: {  # true
            exit_loop  # loop_1
          }
        }
        exit_loop  # loop_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B15: {
    %33:void = call %main_1
    %34:vec4<f32> = load %x_GLF_color
    %35:main_out = construct %34
    %36:bool = load %continue_execution
    %37:bool = eq %36, false
    if %37 [t: $B16] {  # if_5
      $B16: {  # true
        terminate_invocation
      }
    }
    ret %35
  }
}

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