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

%func_ = func():f32 {
  $B2: {
    %alwaysFalse:ptr<function, bool, read_write> = var
    %value:ptr<function, vec4<f32>, read_write> = var
    %a:ptr<function, vec2<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_121:ptr<function, bool, read_write> = var
    %x_122:ptr<function, bool, read_write> = var
    %11:f32 = load_vector_element %gl_FragCoord, 0u
    %12:bool = lt %11, -1.0f
    store %alwaysFalse, %12
    %13:bool = load %alwaysFalse
    if %13 [t: $B3] {  # if_1
      $B3: {  # true
        %14:vec2<f32> = load %a
        %15:vec2<f32> = swizzle %14, xy
        %16:vec4<f32> = load %value
        %17:vec2<f32> = swizzle %16, zw
        %18:vec4<f32> = construct %15, %17
        store %value, %18
        exit_if  # if_1
      }
    }
    %19:bool = load %alwaysFalse
    %20:bool = eq %19, false
    if %20 [t: $B4] {  # if_2
      $B4: {  # true
        %21:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
        %22:vec2<f32> = load %21
        %23:vec2<f32> = swizzle %22, xy
        %24:vec4<f32> = load %value
        %25:vec2<f32> = swizzle %24, zw
        %26:vec4<f32> = construct %23, %25
        store %value, %26
        exit_if  # if_2
      }
    }
    %27:vec4<f32> = load %value
    %28:vec2<f32> = swizzle %27, xy
    %29:vec4<f32> = load %gl_FragCoord
    %30:vec2<f32> = swizzle %29, xy
    %31:vec4<f32> = load %value
    %32:vec2<f32> = swizzle %31, xy
    %33:vec2<f32> = mul %30, %32
    %34:vec2<f32> = mul %33, vec2<f32>(2.0f)
    %35:vec4<f32> = load %value
    %36:vec2<f32> = swizzle %35, xy
    %37:vec2<f32> = add %34, %36
    %38:vec2<f32> = swizzle %37, xy
    %39:vec4<f32> = construct %28, %38
    store %value, %39
    store %i, 0i
    loop [b: $B5, c: $B6] {  # loop_1
      $B5: {  # body
        %40:i32 = load %i
        %41:i32 = let %40
        %42:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
        %43:f32 = load_vector_element %42, 1u
        %44:i32 = call %tint_f32_to_i32, %43
        %46:i32 = add %44, 1i
        %47:bool = lt %41, %46
        if %47 [t: $B7, f: $B8] {  # if_3
          $B7: {  # true
            exit_if  # if_3
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        %48:i32 = load %i
        %49:f32 = convert %48
        store_vector_element %value, 0u, %49
        continue  # -> $B6
      }
      $B6: {  # continuing
        %50:i32 = load %i
        %51:i32 = add %50, 1i
        store %i, %51
        next_iteration  # -> $B5
      }
    }
    %52:f32 = load_vector_element %value, 0u
    %53:bool = eq %52, 1.0f
    %x_116:bool = let %53
    store %x_122, %x_116
    if %x_116 [t: $B9] {  # if_4
      $B9: {  # true
        %55:f32 = load_vector_element %value, 1u
        %56:bool = eq %55, 1.0f
        store %x_121, %56
        %57:bool = load %x_121
        store %x_122, %57
        exit_if  # if_4
      }
    }
    %58:bool = load %x_122
    if %58 [t: $B10, f: $B11] {  # if_5
      $B10: {  # true
        ret 1.0f
      }
      $B11: {  # false
        ret 0.0f
      }
    }
    unreachable
  }
}
%main_1 = func():void {
  $B12: {
    %count:ptr<function, i32, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    store %count, 0i
    store %i_1, 0i
    loop [b: $B13, c: $B14] {  # loop_2
      $B13: {  # body
        %62:i32 = load %i_1
        %63:i32 = let %62
        %64:ptr<uniform, vec2<f32>, read> = access %x_10, 0u
        %65:f32 = load_vector_element %64, 1u
        %66:i32 = call %tint_f32_to_i32, %65
        %67:i32 = add %66, 1i
        %68:bool = lt %63, %67
        if %68 [t: $B15, f: $B16] {  # if_6
          $B15: {  # true
            exit_if  # if_6
          }
          $B16: {  # false
            exit_loop  # loop_2
          }
        }
        %69:f32 = call %func_
        %x_58:f32 = let %69
        %71:i32 = load %count
        %72:i32 = let %71
        %73:i32 = call %tint_f32_to_i32, %x_58
        %74:i32 = add %72, %73
        store %count, %74
        continue  # -> $B14
      }
      $B14: {  # continuing
        %75:i32 = load %i_1
        %76:i32 = add %75, 1i
        store %i_1, %76
        next_iteration  # -> $B13
      }
    }
    %77:i32 = load %count
    %78:bool = eq %77, 2i
    if %78 [t: $B17, f: $B18] {  # if_7
      $B17: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_7
      }
      $B18: {  # false
        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_7
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B19: {
    store %gl_FragCoord, %gl_FragCoord_param
    %81:void = call %main_1
    %82:vec4<f32> = load %x_GLF_color
    %83:main_out = construct %82
    ret %83
  }
}
%tint_f32_to_i32 = func(%value_1:f32):i32 {  # %value_1: 'value'
  $B20: {
    %85:i32 = convert %value_1
    %86:bool = gte %value_1, -2147483648.0f
    %87:i32 = select -2147483648i, %85, %86
    %88:bool = lte %value_1, 2147483520.0f
    %89:i32 = select 2147483647i, %87, %88
    ret %89
  }
}

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