diff options
author | Reid Kleckner <reid@kleckner.net> | 2013-05-20 21:53:29 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2013-05-20 21:53:29 +0000 |
commit | 52d598e24269664825a6ec60e3373af4418f17c2 (patch) | |
tree | ab0a3065d9c5b2a7788a276ab4ae6f5a6abd922b /clang/lib/Sema/TargetAttributesSema.cpp | |
parent | 47447589c9a6af2c290481edc0db126bcd206526 (diff) | |
download | bcm5719-llvm-52d598e24269664825a6ec60e3373af4418f17c2.tar.gz bcm5719-llvm-52d598e24269664825a6ec60e3373af4418f17c2.zip |
Warn on and drop dllimport attrs from variable definitions
AsmPrinter::EmitLinkage() does not handle dllimport linkage. The LLVM
verifier should also be fixed to reject this.
llvm-svn: 182320
Diffstat (limited to 'clang/lib/Sema/TargetAttributesSema.cpp')
-rw-r--r-- | clang/lib/Sema/TargetAttributesSema.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Sema/TargetAttributesSema.cpp b/clang/lib/Sema/TargetAttributesSema.cpp index 2f7701227da..526399a2783 100644 --- a/clang/lib/Sema/TargetAttributesSema.cpp +++ b/clang/lib/Sema/TargetAttributesSema.cpp @@ -161,6 +161,15 @@ DLLImportAttr *Sema::mergeDLLImportAttr(Decl *D, SourceRange Range, if (D->hasAttr<DLLImportAttr>()) return NULL; + if (VarDecl *VD = dyn_cast<VarDecl>(D)) { + if (VD->hasDefinition()) { + // dllimport cannot be applied to definitions. + Diag(D->getLocation(), diag::warn_attribute_invalid_on_definition) + << "dllimport"; + return NULL; + } + } + return ::new (Context) DLLImportAttr(Range, Context, AttrSpellingListIndex); } |