[cfe-commits] r62662 - /cfe/trunk/lib/Sema/SemaDecl.cpp

Chris Lattner sabre at nondot.org
Tue Jan 20 18:38:50 PST 2009


Author: lattner
Date: Tue Jan 20 20:38:50 2009
New Revision: 62662

URL: http://llvm.org/viewvc/llvm-project?rev=62662&view=rev
Log:
Don't look up decls with no name (such as parameters and unnamed tagged types),
this removes 4266 calls to LookupDecl.

Modified:
    cfe/trunk/lib/Sema/SemaDecl.cpp

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=62662&r1=62661&r2=62662&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Jan 20 20:38:50 2009
@@ -2564,18 +2564,20 @@
   // Can this happen for params?  We already checked that they don't conflict
   // among each other.  Here they can only shadow globals, which is ok.
   IdentifierInfo *II = D.getIdentifier();
-  if (Decl *PrevDecl = LookupDecl(II, Decl::IDNS_Ordinary, S)) {
-    if (PrevDecl->isTemplateParameter()) {
-      // Maybe we will complain about the shadowed template parameter.
-      DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
-      // Just pretend that we didn't see the previous declaration.
-      PrevDecl = 0;
-    } else if (S->isDeclScope(PrevDecl)) {
-      Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;
-
-      // Recover by removing the name
-      II = 0;
-      D.SetIdentifier(0, D.getIdentifierLoc());
+  if (II) {
+    if (Decl *PrevDecl = LookupDecl(II, Decl::IDNS_Ordinary, S)) {
+      if (PrevDecl->isTemplateParameter()) {
+        // Maybe we will complain about the shadowed template parameter.
+        DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
+        // Just pretend that we didn't see the previous declaration.
+        PrevDecl = 0;
+      } else if (S->isDeclScope(PrevDecl)) {
+        Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;
+
+        // Recover by removing the name
+        II = 0;
+        D.SetIdentifier(0, D.getIdentifierLoc());
+      }
     }
   }
 
@@ -2855,11 +2857,11 @@
       Name = 0;
       goto CreateNewDecl;
     }
-  } else {
+  } else if (Name) {
     // If this is a named struct, check to see if there was a previous forward
     // declaration or definition.
     PrevDecl = dyn_cast_or_null<NamedDecl>(LookupDecl(Name, Decl::IDNS_Tag,S)
-                                             .getAsDecl());
+                                           .getAsDecl());
 
     if (!getLangOptions().CPlusPlus && TK != TK_Reference) {
       // FIXME: This makes sure that we ignore the contexts associated





More information about the cfe-commits mailing list