diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-16 01:12:24 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2009-07-16 01:12:24 +0000 |
commit | 41136eec6bdb2da43eff7c9b751cc95fb6457328 (patch) | |
tree | 8f223cd8a9dc32bc3d5453fa797d4e042a664c6b /clang/lib/Sema/SemaDeclAttr.cpp | |
parent | cd64aaa4a941901472f8ea0e9634e8186e136c08 (diff) | |
download | bcm5719-llvm-41136eec6bdb2da43eff7c9b751cc95fb6457328.tar.gz bcm5719-llvm-41136eec6bdb2da43eff7c9b751cc95fb6457328.zip |
Generate error on declaration containing 'static' and '__attribute__((weak))'
Patch by Ryan Flynn
llvm-svn: 75879
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclAttr.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index f5babc19be1..09cb96b900b 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -796,6 +796,19 @@ static void HandleWeakAttr(Decl *D, const AttributeList &Attr, Sema &S) { return; } + /* weak only applies to non-static declarations */ + bool isStatic = false; + if (VarDecl *VD = dyn_cast<VarDecl>(D)) { + isStatic = VD->getStorageClass() == VarDecl::Static; + } else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { + isStatic = FD->getStorageClass() == FunctionDecl::Static; + } + if (isStatic) { + S.Diag(Attr.getLoc(), diag::err_attribute_weak_static) << + dyn_cast<NamedDecl>(D)->getNameAsString(); + return; + } + // TODO: could also be applied to methods? if (!isa<FunctionDecl>(D) && !isa<VarDecl>(D)) { S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) |