]> granicus.if.org Git - clang/commitdiff
Fix for PR5840: fix the kind of name lookup used for classes in
authorEli Friedman <eli.friedman@gmail.com>
Mon, 21 Dec 2009 01:42:38 +0000 (01:42 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Mon, 21 Dec 2009 01:42:38 +0000 (01:42 +0000)
Sema::getTypeName.

"LookupNestedNameSpecifierName" isn't quite the right kind of lookup, though;
it doesn't ignore namespaces.  Someone more familiar with the lookup code
should fix this properly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91809 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp
test/CXX/class.derived/p2.cpp [new file with mode: 0644]

index f087bcb95cf86bae78de338bad454b40846b5fa6..d83f8527486b292d7bfd8fc897d4959cee83e837 100644 (file)
@@ -106,8 +106,12 @@ Sema::TypeTy *Sema::getTypeName(IdentifierInfo &II, SourceLocation NameLoc,
     if (!LookupCtx->isDependentContext() && RequireCompleteDeclContext(*SS))
       return 0;
   }
-      
-  LookupResult Result(*this, &II, NameLoc, LookupOrdinaryName);
+
+  // FIXME: LookupNestedNameSpecifierName isn't the right kind of
+  // lookup for class-names.
+  LookupNameKind Kind = isClassName ? LookupNestedNameSpecifierName :
+                                      LookupOrdinaryName;
+  LookupResult Result(*this, &II, NameLoc, Kind);
   if (LookupCtx) {
     // Perform "qualified" name lookup into the declaration context we
     // computed, which is either the type of the base of a member access
diff --git a/test/CXX/class.derived/p2.cpp b/test/CXX/class.derived/p2.cpp
new file mode 100644 (file)
index 0000000..7ef53d3
--- /dev/null
@@ -0,0 +1,8 @@
+// RUN: %clang_cc1 %s -fsyntax-only -verify
+
+// "During the lookup for a base class name, non-type names are ignored"
+namespace PR5840 {
+  struct Base {};
+  int Base = 10;
+  struct Derived : Base {};
+}