From: Douglas Gregor Date: Wed, 28 Jul 2010 22:27:52 +0000 (+0000) Subject: Don't die when a member access refers to a non-class member via a X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9d4bb946269303996edadffce642301bee87a62f;p=clang Don't die when a member access refers to a non-class member via a qualified name. Fixes . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109682 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index fa2b65b2de..b2f1a356df 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -2632,6 +2632,9 @@ bool Sema::CheckQualifiedMemberReference(Expr *BaseExpr, while (DC->isTransparentContext()) DC = DC->getParent(); + if (!DC->isRecord()) + continue; + llvm::SmallPtrSet MemberRecord; MemberRecord.insert(cast(DC)->getCanonicalDecl()); diff --git a/test/SemaCXX/member-expr.cpp b/test/SemaCXX/member-expr.cpp index 6830c5fdaf..953ee48aa9 100644 --- a/test/SemaCXX/member-expr.cpp +++ b/test/SemaCXX/member-expr.cpp @@ -101,3 +101,17 @@ namespace PR7508 { a.PopCleanupScope(); // expected-error{{no member named 'PopCleanupScope' in 'PR7508::A'}} } } + +namespace rdar8231724 { + namespace N { + template struct X1; + int i; + } + + struct X { }; + struct Y : X { }; + + void f(Y *y) { + y->N::X1; // expected-error{{'rdar8231724::N::X1' is not a member of class 'rdar8231724::Y'}} + } +}