]> granicus.if.org Git - clang/commitdiff
When doing name lookup for members don't look into global/namespace scope.
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 29 Oct 2010 16:12:50 +0000 (16:12 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Fri, 29 Oct 2010 16:12:50 +0000 (16:12 +0000)
Better performance and fixes rdar://8603569.

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

lib/Sema/SemaLookup.cpp
test/SemaCXX/lookup-member.cpp [new file with mode: 0644]

index 9d65891a0ffb59567f5b9cf311914932503c9c7e..acc5b354f8abbfcf33294eb88fcbe86e35ed1c89 100644 (file)
@@ -918,6 +918,10 @@ bool Sema::CppLookupName(LookupResult &R, Scope *S) {
   // FIXME:  This really, really shouldn't be happening.
   if (!S) return false;
 
+  // If we are looking for members, no need to look into global/namespace scope.
+  if (R.getLookupKind() == LookupMemberName)
+    return false;
+
   // Collect UsingDirectiveDecls in all scopes, and recursively all
   // nominated namespaces by those using-directives.
   //
diff --git a/test/SemaCXX/lookup-member.cpp b/test/SemaCXX/lookup-member.cpp
new file mode 100644 (file)
index 0000000..c75b185
--- /dev/null
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+namespace A {
+  class String;
+};
+
+using A::String;
+class String;
+
+// rdar://8603569
+union value {
+char *String;
+};