forked from OSchip/llvm-project
Add test case for PR5868, and improve location information slightly for implicit "this" expressions
llvm-svn: 92141
This commit is contained in:
parent
b2d47e0eaa
commit
4b65441598
|
@ -564,7 +564,7 @@ Sema::BuildAnonymousStructUnionMemberReference(SourceLocation Loc,
|
||||||
== Context.getCanonicalType(ThisType)) ||
|
== Context.getCanonicalType(ThisType)) ||
|
||||||
IsDerivedFrom(ThisType, AnonFieldType)) {
|
IsDerivedFrom(ThisType, AnonFieldType)) {
|
||||||
// Our base object expression is "this".
|
// Our base object expression is "this".
|
||||||
BaseObjectExpr = new (Context) CXXThisExpr(SourceLocation(),
|
BaseObjectExpr = new (Context) CXXThisExpr(Loc,
|
||||||
MD->getThisType(Context));
|
MD->getThisType(Context));
|
||||||
BaseObjectIsPointer = true;
|
BaseObjectIsPointer = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -959,6 +959,7 @@ public:
|
||||||
Expr *BaseExpr = Base.takeAs<Expr>();
|
Expr *BaseExpr = Base.takeAs<Expr>();
|
||||||
if (getSema().PerformObjectMemberConversion(BaseExpr, Member))
|
if (getSema().PerformObjectMemberConversion(BaseExpr, Member))
|
||||||
return getSema().ExprError();
|
return getSema().ExprError();
|
||||||
|
|
||||||
MemberExpr *ME =
|
MemberExpr *ME =
|
||||||
new (getSema().Context) MemberExpr(BaseExpr, isArrow,
|
new (getSema().Context) MemberExpr(BaseExpr, isArrow,
|
||||||
Member, MemberLoc,
|
Member, MemberLoc,
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||||
|
|
||||||
|
// PR5868
|
||||||
|
struct T0 {
|
||||||
|
int x;
|
||||||
|
union {
|
||||||
|
void *m0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
template <typename T>
|
||||||
|
struct T1 : public T0, public T {
|
||||||
|
void f0() {
|
||||||
|
m0 = 0; // expected-error{{ambiguous conversion}}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct A : public T0 { };
|
||||||
|
|
||||||
|
void f1(T1<A> *S) { S->f0(); } // expected-note{{instantiation of member function}}
|
Loading…
Reference in New Issue