diff options
author | Alexander Musman <alexander.musman@gmail.com> | 2015-09-18 07:40:22 +0000 |
---|---|---|
committer | Alexander Musman <alexander.musman@gmail.com> | 2015-09-18 07:40:22 +0000 |
commit | fbbc0b8cece96d7377a1b52d59daa15465f7db09 (patch) | |
tree | 4b302ed4e252b6e09a3f26d5e36642ec37171ed9 /clang/lib/Sema/Sema.cpp | |
parent | 8c3142b5f7be3674b9f69ede2107d2de4cf69ec3 (diff) | |
download | bcm5719-llvm-fbbc0b8cece96d7377a1b52d59daa15465f7db09.tar.gz bcm5719-llvm-fbbc0b8cece96d7377a1b52d59daa15465f7db09.zip |
Fix for assertion fail for pragma weak on typedef.
Example:
typedef int __td3;
#pragma weak td3 = __td3
Differential Revision: http://reviews.llvm.org/D12904
llvm-svn: 247975
Diffstat (limited to 'clang/lib/Sema/Sema.cpp')
-rw-r--r-- | clang/lib/Sema/Sema.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index cc509566bdd..300e2f040a2 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -727,8 +727,15 @@ void Sema::ActOnEndOfTranslationUnit() { if (WeakID.second.getUsed()) continue; - Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) - << WeakID.first; + Decl *PrevDecl = LookupSingleName(TUScope, WeakID.first, SourceLocation(), + LookupOrdinaryName); + if (PrevDecl != nullptr && + !(isa<FunctionDecl>(PrevDecl) || isa<VarDecl>(PrevDecl))) + Diag(WeakID.second.getLocation(), diag::warn_attribute_wrong_decl_type) + << "'weak'" << ExpectedVariableOrFunction; + else + Diag(WeakID.second.getLocation(), diag::warn_weak_identifier_undeclared) + << WeakID.first; } if (LangOpts.CPlusPlus11 && |