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

%main_1 = func():void {
  $B2: {
    %lv:ptr<function, f32, read_write> = var
    %x_43:ptr<function, f32, read_write> = var
    %GLF_live5r:ptr<function, i32, read_write> = var
    %GLF_live5_looplimiter6:ptr<function, i32, read_write> = var
    %10:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
    %11:f32 = load_vector_element %10, 1u
    %x_45:f32 = let %11
    %13:bool = gt 1.0f, %x_45
    if %13 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %14:f32 = load %gv
        %x_50:f32 = let %14
        %16:f32 = abs %x_50
        store %x_43, %16
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_43, 260.0f
        exit_if  # if_1
      }
    }
    %17:f32 = load %x_43
    %x_52:f32 = let %17
    store %lv, %x_52
    %19:f32 = load %lv
    %x_53:f32 = let %19
    %21:i32 = call %tint_f32_to_i32, %x_53
    %23:bool = lt %21, 250i
    if %23 [t: $B5] {  # if_2
      $B5: {  # true
        %24:f32 = load %lv
        %x_58:f32 = let %24
        %26:i32 = call %tint_f32_to_i32, %x_58
        %27:bool = lt %26, 180i
        if %27 [t: $B6, f: $B7] {  # if_3
          $B6: {  # true
            %28:f32 = load %lv
            %x_64:f32 = let %28
            %30:f32 = clamp %x_64, 1.0f, 1.0f
            %x_65:f32 = let %30
            exit_if  # if_3
          }
          $B7: {  # false
            %32:f32 = load_vector_element %gl_FragCoord, 1u
            %x_67:f32 = let %32
            %34:bool = lt %x_67, 0.0f
            if %34 [t: $B8] {  # if_4
              $B8: {  # true
                %35:f32 = load %lv
                %x_71:f32 = let %35
                %37:i32 = call %tint_f32_to_i32, %x_71
                %38:bool = lt %37, 210i
                if %38 [t: $B9] {  # if_5
                  $B9: {  # true
                    loop [b: $B10, c: $B11] {  # loop_1
                      $B10: {  # body
                        continue  # -> $B11
                      }
                      $B11: {  # continuing
                        break_if false  # -> [t: exit_loop loop_1, f: $B10]
                      }
                    }
                    exit_if  # if_5
                  }
                }
                store %GLF_live5r, 0i
                loop [b: $B12, c: $B13] {  # loop_2
                  $B12: {  # body
                    if true [t: $B14, f: $B15] {  # if_6
                      $B14: {  # true
                        exit_if  # if_6
                      }
                      $B15: {  # false
                        exit_loop  # loop_2
                      }
                    }
                    %39:i32 = load %GLF_live5_looplimiter6
                    %x_11:i32 = let %39
                    %41:bool = gte %x_11, 6i
                    if %41 [t: $B16] {  # if_7
                      $B16: {  # true
                        exit_loop  # loop_2
                      }
                    }
                    %42:i32 = load %GLF_live5_looplimiter6
                    %x_12:i32 = let %42
                    %44:i32 = add %x_12, 1i
                    store %GLF_live5_looplimiter6, %44
                    continue  # -> $B13
                  }
                  $B13: {  # continuing
                    next_iteration  # -> $B12
                  }
                }
                exit_if  # if_4
              }
            }
            exit_if  # if_3
          }
        }
        exit_if  # if_2
      }
    }
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B17: {
    store %gl_FragCoord, %gl_FragCoord_param
    %47:void = call %main_1
    %48:vec4<f32> = load %x_GLF_color
    %49:main_out = construct %48
    ret %49
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B18: {
    %51:i32 = convert %value
    %52:bool = gte %value, -2147483648.0f
    %53:i32 = select -2147483648i, %51, %52
    %54:bool = lte %value, 2147483520.0f
    %55:i32 = select 2147483647i, %53, %54
    ret %55
  }
}

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