]> granicus.if.org Git - clang/commitdiff
Revert "Sema: err_after_alias is unreachable, remove it"
authorDavid Majnemer <david.majnemer@gmail.com>
Wed, 21 Jan 2015 01:30:40 +0000 (01:30 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Wed, 21 Jan 2015 01:30:40 +0000 (01:30 +0000)
This reverts commit r226626.  err_after_alias is, in fact, reachable.

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

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDecl.cpp
test/Sema/alias-redefinition.c

index 5509b03ab2255441462679b11447ecdc806b7ffb..3e41564a39cad40c333b303d95e49727a7401117 100644 (file)
@@ -3902,6 +3902,8 @@ def warn_missing_variable_declarations : Warning<
 def err_static_data_member_reinitialization :
   Error<"static data member %0 already has an initializer">;
 def err_redefinition : Error<"redefinition of %0">;
+def err_alias_after_tentative :
+  Error<"alias definition of %0 after tentative definition">;
 def err_alias_is_definition :
   Error<"definition %0 cannot also be an alias">;
 def err_definition_of_implicitly_declared_member : Error<
index 8af7e5a1d034115d3819fcbcddcdc0b86a3cfc91..cd6ff6ce5820994e28ceac2fc83af8a1543bf37e 100644 (file)
@@ -2223,7 +2223,11 @@ static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {
         S.CheckForFunctionRedefinition(FD, cast<FunctionDecl>(Def));
       else {
         VarDecl *VD = cast<VarDecl>(New);
-        S.Diag(VD->getLocation(), diag::err_redefinition) << VD->getDeclName();
+        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() ==
+                                VarDecl::TentativeDefinition
+                            ? diag::err_alias_after_tentative
+                            : diag::err_redefinition;
+        S.Diag(VD->getLocation(), Diag) << VD->getDeclName();
         S.Diag(Def->getLocation(), diag::note_previous_definition);
         VD->setInvalidDecl();
       }
index ae8c28fe769f5c4babfb1132ddb5f1cccc0fc726..91f4b2714cd0364549a091ece6351b0b1035e205 100644 (file)
@@ -29,6 +29,5 @@ static int var2 __attribute((alias("v2"))) = 2; // expected-error {{definition '
 extern int var3 __attribute__((alias("C"))); // expected-note{{previous definition is here}}
 int var3 = 3; // expected-error{{redefinition of 'var3'}}
 
-int v4;
-int var4;
-int var4 __attribute((alias("v4"))); // expected-error {{definition 'var4' cannot also be an alias}}
+int var4; // expected-note{{previous definition is here}}
+extern int var4 __attribute__((alias("v4"))); // expected-error{{alias definition of 'var4' after tentative definition}}