]> granicus.if.org Git - clang/commitdiff
Don't look up decls with no name (such as parameters and unnamed tagged types),
authorChris Lattner <sabre@nondot.org>
Wed, 21 Jan 2009 02:38:50 +0000 (02:38 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 21 Jan 2009 02:38:50 +0000 (02:38 +0000)
this removes 4266 calls to LookupDecl.

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

lib/Sema/SemaDecl.cpp

index c91d174d6541b8446e14c149a955c339c3646b1c..c1741da3b6e371e3ae81017a679a320f9f79174f 100644 (file)
@@ -2564,18 +2564,20 @@ Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
   // 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;
+  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());
+        // Recover by removing the name
+        II = 0;
+        D.SetIdentifier(0, D.getIdentifierLoc());
+      }
     }
   }
 
@@ -2855,11 +2857,11 @@ Sema::DeclTy *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagKind TK,
       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