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

%cross2d_vf2_vf2_ = func(%a:ptr<function, vec2<f32>, read_write>, %b:ptr<function, vec2<f32>, read_write>):f32 {
  $B2: {
    %7:f32 = load_vector_element %a, 0u
    %x_76:f32 = let %7
    %9:f32 = load_vector_element %b, 1u
    %x_78:f32 = let %9
    %11:f32 = load_vector_element %b, 0u
    %x_81:f32 = let %11
    %13:f32 = load_vector_element %a, 1u
    %x_83:f32 = let %13
    %15:f32 = mul %x_76, %x_78
    %16:f32 = mul %x_81, %x_83
    %17:f32 = sub %15, %16
    ret %17
  }
}
%pointInTriangle_vf2_vf2_vf2_vf2_ = func(%p:ptr<function, vec2<f32>, read_write>, %a_1:ptr<function, vec2<f32>, read_write>, %b_1:ptr<function, vec2<f32>, read_write>, %c:ptr<function, vec2<f32>, read_write>):i32 {
  $B3: {
    %pab:ptr<function, f32, read_write> = var
    %param:ptr<function, vec2<f32>, read_write> = var
    %param_1:ptr<function, vec2<f32>, read_write> = var
    %pbc:ptr<function, f32, read_write> = var
    %param_2:ptr<function, vec2<f32>, read_write> = var
    %param_3:ptr<function, vec2<f32>, read_write> = var
    %pca:ptr<function, f32, read_write> = var
    %param_4:ptr<function, vec2<f32>, read_write> = var
    %param_5:ptr<function, vec2<f32>, read_write> = var
    %x_137:ptr<function, bool, read_write> = var
    %x_138:ptr<function, bool, read_write> = var
    %x_169:ptr<function, bool, read_write> = var
    %x_170:ptr<function, bool, read_write> = var
    %36:f32 = load_vector_element %b_1, 0u
    %x_99:f32 = let %36
    %38:f32 = load_vector_element %a_1, 0u
    %x_100:f32 = let %38
    %40:f32 = load_vector_element %b_1, 1u
    %x_103:f32 = let %40
    %42:f32 = load_vector_element %a_1, 1u
    %x_104:f32 = let %42
    %44:f32 = load_vector_element %p, 0u
    %45:f32 = load_vector_element %a_1, 0u
    %46:f32 = sub %44, %45
    %47:f32 = load_vector_element %p, 1u
    %48:f32 = load_vector_element %a_1, 1u
    %49:f32 = sub %47, %48
    %50:vec2<f32> = construct %46, %49
    store %param, %50
    %51:f32 = sub %x_99, %x_100
    %52:f32 = sub %x_103, %x_104
    %53:vec2<f32> = construct %51, %52
    store %param_1, %53
    %54:f32 = call %cross2d_vf2_vf2_, %param, %param_1
    %x_107:f32 = let %54
    store %pab, %x_107
    %56:f32 = load_vector_element %c, 0u
    %x_116:f32 = let %56
    %58:f32 = load_vector_element %b_1, 0u
    %x_117:f32 = let %58
    %60:f32 = load_vector_element %c, 1u
    %x_120:f32 = let %60
    %62:f32 = load_vector_element %b_1, 1u
    %x_121:f32 = let %62
    %64:f32 = load_vector_element %p, 0u
    %65:f32 = load_vector_element %b_1, 0u
    %66:f32 = sub %64, %65
    %67:f32 = load_vector_element %p, 1u
    %68:f32 = load_vector_element %b_1, 1u
    %69:f32 = sub %67, %68
    %70:vec2<f32> = construct %66, %69
    store %param_2, %70
    %71:f32 = sub %x_116, %x_117
    %72:f32 = sub %x_120, %x_121
    %73:vec2<f32> = construct %71, %72
    store %param_3, %73
    %74:f32 = call %cross2d_vf2_vf2_, %param_2, %param_3
    %x_124:f32 = let %74
    store %pbc, %x_124
    %76:f32 = load %pab
    %77:bool = lt %76, 0.0f
    %78:f32 = load %pbc
    %79:bool = lt %78, 0.0f
    %80:bool = and %77, %79
    %x_129:bool = let %80
    store %x_138, %x_129
    %82:bool = eq %x_129, false
    if %82 [t: $B4] {  # if_1
      $B4: {  # true
        %83:f32 = load %pab
        %84:bool = gte %83, 0.0f
        %85:f32 = load %pbc
        %86:bool = gte %85, 0.0f
        %87:bool = and %84, %86
        store %x_137, %87
        %88:bool = load %x_137
        store %x_138, %88
        exit_if  # if_1
      }
    }
    %89:bool = load %x_138
    %90:bool = eq %89, false
    if %90 [t: $B5] {  # if_2
      $B5: {  # true
        ret 0i
      }
    }
    %91:f32 = load_vector_element %a_1, 0u
    %x_149:f32 = let %91
    %93:f32 = load_vector_element %c, 0u
    %x_150:f32 = let %93
    %95:f32 = load_vector_element %a_1, 1u
    %x_152:f32 = let %95
    %97:f32 = load_vector_element %c, 1u
    %x_153:f32 = let %97
    %99:f32 = load_vector_element %p, 0u
    %100:f32 = load_vector_element %c, 0u
    %101:f32 = sub %99, %100
    %102:f32 = load_vector_element %p, 1u
    %103:f32 = load_vector_element %c, 1u
    %104:f32 = sub %102, %103
    %105:vec2<f32> = construct %101, %104
    store %param_4, %105
    %106:f32 = sub %x_149, %x_150
    %107:f32 = sub %x_152, %x_153
    %108:vec2<f32> = construct %106, %107
    store %param_5, %108
    %109:f32 = call %cross2d_vf2_vf2_, %param_4, %param_5
    %x_156:f32 = let %109
    store %pca, %x_156
    %111:f32 = load %pab
    %112:bool = lt %111, 0.0f
    %113:f32 = load %pca
    %114:bool = lt %113, 0.0f
    %115:bool = and %112, %114
    %x_161:bool = let %115
    store %x_170, %x_161
    %117:bool = eq %x_161, false
    if %117 [t: $B6] {  # if_3
      $B6: {  # true
        %118:f32 = load %pab
        %119:bool = gte %118, 0.0f
        %120:f32 = load %pca
        %121:bool = gte %120, 0.0f
        %122:bool = and %119, %121
        store %x_169, %122
        %123:bool = load %x_169
        store %x_170, %123
        exit_if  # if_3
      }
    }
    %124:bool = load %x_170
    %125:bool = eq %124, false
    if %125 [t: $B7] {  # if_4
      $B7: {  # true
        ret 0i
      }
    }
    ret 1i
  }
}
%main_1 = func():void {
  $B8: {
    %pos:ptr<function, vec2<f32>, read_write> = var
    %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
    %132:vec4<f32> = load %gl_FragCoord
    %133:vec2<f32> = swizzle %132, xy
    %134:ptr<uniform, vec2<f32>, read> = access %x_24, 0u
    %135:vec2<f32> = load %134
    %136:vec2<f32> = div %133, %135
    store %pos, %136
    %137:vec2<f32> = load %pos
    store %param_6, %137
    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)
    %138:i32 = call %pointInTriangle_vf2_vf2_vf2_vf2_, %param_6, %param_7, %param_8, %param_9
    %x_69:i32 = let %138
    %140:bool = eq %x_69, 1i
    if %140 [t: $B9, f: $B10] {  # if_5
      $B9: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_5
      }
      $B10: {  # 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 {
  $B11: {
    store %gl_FragCoord, %gl_FragCoord_param
    %143:void = call %main_1
    %144:vec4<f32> = load %x_GLF_color
    %145:main_out = construct %144
    ret %145
  }
}

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