diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-01-19 10:21:22 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-01-19 10:21:22 +0000 |
commit | 6b90356ab455baca180c74ee67282fd40bf2780c (patch) | |
tree | a310b8a756e09ec68a065470837e310cf4eda674 /clang/lib/Sema/SemaDecl.cpp | |
parent | 6a1565c7e5c7c7765535684d0188a83aec2967a0 (diff) | |
download | bcm5719-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.cpp | 14 |
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; } |