summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-01-19 10:21:22 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-01-19 10:21:22 +0000
commit6b90356ab455baca180c74ee67282fd40bf2780c (patch)
treea310b8a756e09ec68a065470837e310cf4eda674 /clang/lib/Sema/SemaDecl.cpp
parent6a1565c7e5c7c7765535684d0188a83aec2967a0 (diff)
downloadbcm5719-llvm-6b90356ab455baca180c74ee67282fd40bf2780c.tar.gz
bcm5719-llvm-6b90356ab455baca180c74ee67282fd40bf2780c.zip
Add back a check removed in r226436
It shouldn't have been removed, the code which replaced it didn't cover this case. llvm-svn: 226442
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index da59fb57732..9eb5993f2a2 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2219,8 +2219,18 @@ static void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {
const Attr *NewAttribute = NewAttributes[I];
if (isa<AliasAttr>(NewAttribute)) {
- FunctionDecl *FD = cast<FunctionDecl>(New);
- S.CheckForFunctionRedefinition(FD, cast<FunctionDecl>(Def));
+ if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New))
+ S.CheckForFunctionRedefinition(FD, cast<FunctionDecl>(Def));
+ else {
+ VarDecl *VD = cast<VarDecl>(New);
+ 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();
+ }
++I;
continue;
}
OpenPOWER on IntegriCloud