SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  resolution: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_17:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
  $B2: {
    %x_66:ptr<function, f32, read_write> = var
    %x_67:ptr<function, f32, read_write> = var
    %x_68:ptr<function, f32, read_write> = var
    %param:ptr<function, vec2<f32>, read_write> = var
    %param_1:ptr<function, vec2<f32>, read_write> = var
    %param_2:ptr<function, vec2<f32>, read_write> = var
    %param_3:ptr<function, vec2<f32>, read_write> = var
    %param_4:ptr<function, vec2<f32>, read_write> = var
    %param_5:ptr<function, vec2<f32>, read_write> = var
    %x_135:ptr<function, bool, read_write> = var
    %x_136:ptr<function, bool, read_write> = var
    %x_172:ptr<function, bool, read_write> = var
    %x_173:ptr<function, bool, read_write> = var
    %22:f32 = load_vector_element %b, 0u
    %x_81:f32 = let %22
    %24:f32 = load_vector_element %a, 0u
    %x_82:f32 = let %24
    %26:f32 = load_vector_element %b, 1u
    %x_85:f32 = let %26
    %28:f32 = load_vector_element %a, 1u
    %x_86:f32 = let %28
    %30:f32 = load_vector_element %p, 0u
    %31:f32 = load_vector_element %a, 0u
    %32:f32 = sub %30, %31
    %33:f32 = load_vector_element %p, 1u
    %34:f32 = load_vector_element %a, 1u
    %35:f32 = sub %33, %34
    %36:vec2<f32> = construct %32, %35
    store %param, %36
    %37:f32 = sub %x_81, %x_82
    %38:f32 = sub %x_85, %x_86
    %39:vec2<f32> = construct %37, %38
    store %param_1, %39
    %40:f32 = load_vector_element %param, 0u
    %41:f32 = load_vector_element %param_1, 1u
    %42:f32 = mul %40, %41
    %43:f32 = load_vector_element %param_1, 0u
    %44:f32 = load_vector_element %param, 1u
    %45:f32 = mul %43, %44
    %46:f32 = sub %42, %45
    %x_99:f32 = let %46
    store %x_68, %x_99
    %48:f32 = load_vector_element %c, 0u
    %x_108:f32 = let %48
    %50:f32 = load_vector_element %b, 0u
    %x_109:f32 = let %50
    %52:f32 = load_vector_element %c, 1u
    %x_112:f32 = let %52
    %54:f32 = load_vector_element %b, 1u
    %x_113:f32 = let %54
    %56:f32 = load_vector_element %p, 0u
    %57:f32 = load_vector_element %b, 0u
    %58:f32 = sub %56, %57
    %59:f32 = load_vector_element %p, 1u
    %60:f32 = load_vector_element %b, 1u
    %61:f32 = sub %59, %60
    %62:vec2<f32> = construct %58, %61
    store %param_2, %62
    %63:f32 = sub %x_108, %x_109
    %64:f32 = sub %x_112, %x_113
    %65:vec2<f32> = construct %63, %64
    store %param_3, %65
    %66:f32 = load_vector_element %param_2, 0u
    %67:f32 = load_vector_element %param_3, 1u
    %68:f32 = mul %66, %67
    %69:f32 = load_vector_element %param_3, 0u
    %70:f32 = load_vector_element %param_2, 1u
    %71:f32 = mul %69, %70
    %72:f32 = sub %68, %71
    %x_126:f32 = let %72
    store %x_67, %x_126
    %74:bool = lt %x_99, 0.0f
    %x_127:bool = let %74
    %76:bool = lt %x_126, 0.0f
    %77:bool = and %x_127, %76
    %x_129:bool = let %77
    store %x_136, %x_129
    %79:bool = eq %x_129, false
    if %79 [t: $B3] {  # if_1
      $B3: {  # true
        %80:bool = gte %x_99, 0.0f
        %81:bool = gte %x_126, 0.0f
        %82:bool = and %80, %81
        store %x_135, %82
        %83:bool = load %x_135
        store %x_136, %83
        exit_if  # if_1
      }
    }
    %84:bool = load %x_136
    %85:bool = eq %84, false
    if %85 [t: $B4] {  # if_2
      $B4: {  # true
        ret 0i
      }
    }
    %86:f32 = load_vector_element %a, 0u
    %x_147:f32 = let %86
    %88:f32 = load_vector_element %c, 0u
    %x_148:f32 = let %88
    %90:f32 = load_vector_element %a, 1u
    %x_150:f32 = let %90
    %92:f32 = load_vector_element %c, 1u
    %x_151:f32 = let %92
    %94:f32 = load_vector_element %p, 0u
    %95:f32 = load_vector_element %c, 0u
    %96:f32 = sub %94, %95
    %97:f32 = load_vector_element %p, 1u
    %98:f32 = load_vector_element %c, 1u
    %99:f32 = sub %97, %98
    %100:vec2<f32> = construct %96, %99
    store %param_4, %100
    %101:f32 = sub %x_147, %x_148
    %102:f32 = sub %x_150, %x_151
    %103:vec2<f32> = construct %101, %102
    store %param_5, %103
    %104:f32 = load_vector_element %param_4, 0u
    %105:f32 = load_vector_element %param_5, 1u
    %106:f32 = mul %104, %105
    %107:f32 = load_vector_element %param_5, 0u
    %108:f32 = load_vector_element %param_4, 1u
    %109:f32 = mul %107, %108
    %110:f32 = sub %106, %109
    %x_164:f32 = let %110
    store %x_66, %x_164
    %112:bool = lt %x_164, 0.0f
    %113:bool = and %x_127, %112
    %x_166:bool = let %113
    store %x_173, %x_166
    %115:bool = eq %x_166, false
    if %115 [t: $B5] {  # if_3
      $B5: {  # true
        %116:bool = gte %x_99, 0.0f
        %117:bool = gte %x_164, 0.0f
        %118:bool = and %116, %117
        store %x_172, %118
        %119:bool = load %x_172
        store %x_173, %119
        exit_if  # if_3
      }
    }
    %120:bool = load %x_173
    %121:bool = eq %120, false
    if %121 [t: $B6] {  # if_4
      $B6: {  # true
        ret 0i
      }
    }
    ret 1i
  }
}
%main_1 = func():void {
  $B7: {
    %param_6:ptr<function, vec2<f32>, read_write> = var
    %param_7:ptr<function, vec2<f32>, read_write> = var
    %param_8:ptr<function, vec2<f32>, read_write> = var
    %param_9:ptr<function, vec2<f32>, read_write> = var
    %127:vec4<f32> = load %gl_FragCoord
    %128:vec2<f32> = swizzle %127, xy
    %129:ptr<uniform, vec2<f32>, read> = access %x_17, 0u
    %130:vec2<f32> = load %129
    %131:vec2<f32> = div %128, %130
    store %param_6, %131
    store %param_7, vec2<f32>(0.69999998807907104492f, 0.30000001192092895508f)
    store %param_8, vec2<f32>(0.5f, 0.89999997615814208984f)
    store %param_9, vec2<f32>(0.10000000149011611938f, 0.40000000596046447754f)
    %132:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
    %x_60:i32 = let %132
    %134:bool = eq %x_60, 1i
    if %134 [t: $B8, f: $B9] {  # if_5
      $B8: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_5
      }
      $B9: {  # false
        store %x_GLF_color, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B10: {
    store %gl_FragCoord, %gl_FragCoord_param
    %137:void = call %main_1
    %138:vec4<f32> = load %x_GLF_color
    %139:main_out = construct %138
    ret %139
  }
}

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