Add test case for PR5868, and improve location information slightly for implicit "this" expressions

llvm-svn: 92141
This commit is contained in:
Douglas Gregor 2009-12-24 20:23:34 +00:00
parent b2d47e0eaa
commit 4b65441598
3 changed files with 21 additions and 1 deletions

View File

@ -564,7 +564,7 @@ Sema::BuildAnonymousStructUnionMemberReference(SourceLocation Loc,
== Context.getCanonicalType(ThisType)) ||
IsDerivedFrom(ThisType, AnonFieldType)) {
// Our base object expression is "this".
BaseObjectExpr = new (Context) CXXThisExpr(SourceLocation(),
BaseObjectExpr = new (Context) CXXThisExpr(Loc,
MD->getThisType(Context));
BaseObjectIsPointer = true;
}

View File

@ -959,6 +959,7 @@ public:
Expr *BaseExpr = Base.takeAs<Expr>();
if (getSema().PerformObjectMemberConversion(BaseExpr, Member))
return getSema().ExprError();
MemberExpr *ME =
new (getSema().Context) MemberExpr(BaseExpr, isArrow,
Member, MemberLoc,

View File

@ -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}}