diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-07-28 22:27:52 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-07-28 22:27:52 +0000 | 
| commit | a9c3e827554f98d3caf8f40f1fcfa8fdc47638e6 (patch) | |
| tree | 47dc2ebe35a3ef1c2c58375e8c92a41165270454 /clang | |
| parent | 4c1e484f39490d1fcb96369ecfb242e0ce17787d (diff) | |
| download | bcm5719-llvm-a9c3e827554f98d3caf8f40f1fcfa8fdc47638e6.tar.gz bcm5719-llvm-a9c3e827554f98d3caf8f40f1fcfa8fdc47638e6.zip  | |
Don't die when a member access refers to a non-class member via a
qualified name. Fixes <rdar://problem/8231724>.
llvm-svn: 109682
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 3 | ||||
| -rw-r--r-- | clang/test/SemaCXX/member-expr.cpp | 14 | 
2 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index fa2b65b2deb..b2f1a356dfb 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/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<CXXRecordDecl*,4> MemberRecord;      MemberRecord.insert(cast<CXXRecordDecl>(DC)->getCanonicalDecl()); diff --git a/clang/test/SemaCXX/member-expr.cpp b/clang/test/SemaCXX/member-expr.cpp index 6830c5fdafb..953ee48aa95 100644 --- a/clang/test/SemaCXX/member-expr.cpp +++ b/clang/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<typename T> struct X1; +    int i; +  } + +  struct X { }; +  struct Y : X { }; + +  void f(Y *y) { +    y->N::X1<int>; // expected-error{{'rdar8231724::N::X1' is not a member of class 'rdar8231724::Y'}} +  } +}  | 

