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_30:ptr<function, bool, read_write> = var
        %x_31:ptr<function, bool, read_write> = var
        store %x_30, false
        loop [b: $B5, c: $B6] {  # loop_2
          $B5: {  # body
            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:ptr<function, vec4<f32>, read_write> = var
                %11:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
                %12:f32 = load_vector_element %11, 1u
                %x_36:f32 = let %12
                %14:bool = load %x_30
                store %x_31, %14
                %15:bool = gt %x_36, 0.0f
                if %15 [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
                    %16:ptr<uniform, vec2<f32>, read> = access %x_5, 0u
                    %17:f32 = load_vector_element %16, 0u
                    %x_46:f32 = let %17
                    %19:bool = gt %x_46, 0.0f
                    if %19 [t: $B11] {  # if_2
                      $B11: {  # true
                        %20:void = call %x_51
                        store %x_52, vec4<f32>(0.0f)
                        %21:vec4<f32> = load %x_52
                        store %x_55, %21
                        exit_loop  # loop_4
                      }
                    }
                    %22:vec4<f32> = construct %x_46
                    %23:vec4<f32> = add vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), %22
                    store %x_54, %23
                    %24:vec4<f32> = load %x_54
                    store %x_55, %24
                    exit_loop  # loop_4
                  }
                }
                %25:vec4<f32> = load %x_55
                store %x_GLF_color, %25
                store %x_31, true
                exit_loop  # loop_3
              }
            }
            %26:bool = load %x_31
            if %26 [t: $B12, f: $B13] {  # if_3
              $B12: {  # true
                exit_loop  # loop_2
              }
              $B13: {  # false
                continue  # -> $B6
              }
            }
            unreachable
          }
          $B6: {  # continuing
            %27:bool = load %x_31
            store %x_30, %27
            next_iteration  # -> $B5
          }
        }
        %28:bool = load %x_31
        if %28 [t: $B14] {  # if_4
          $B14: {  # true
            exit_loop  # loop_1
          }
        }
        exit_loop  # loop_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B15: {
    %30:void = call %main_1
    %31:vec4<f32> = load %x_GLF_color
    %32:main_out = construct %31
    %33:bool = load %continue_execution
    %34:bool = eq %33, false
    if %34 [t: $B16] {  # if_5
      $B16: {  # true
        terminate_invocation
      }
    }
    ret %32
  }
}

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