Make sure we actually found a redeclaration before complaining about attributes added to a redeclaration in C++

llvm-svn: 80403
This commit is contained in:
Douglas Gregor 2009-08-28 22:54:55 +00:00
parent 601d6e4c7b
commit 90820ee62a
2 changed files with 10 additions and 1 deletions

View File

@ -2736,7 +2736,7 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC,
ProcessDeclAttributes(S, NewFD, D);
// attributes declared post-definition are currently ignored
if (PrevDecl) {
if (Redeclaration && PrevDecl) {
const FunctionDecl *Def, *PrevFD = dyn_cast<FunctionDecl>(PrevDecl);
if (PrevFD && PrevFD->getBody(Def) && D.hasAttributes()) {
Diag(NewFD->getLocation(), diag::warn_attribute_precede_definition);

View File

@ -0,0 +1,9 @@
// RUN: clang-cc -fsyntax-only -verify %s
struct X { };
struct Y { };
bool f0(X) { return true; } // expected-note{{definition}}
bool f1(X) { return true; }
__attribute__ ((__visibility__("hidden"))) bool f0(X); // expected-warning{{attribute}}
__attribute__ ((__visibility__("hidden"))) bool f1(Y);