summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
diff options
context:
space:
mode:
authorNico Rieck <nico.rieck@gmail.com>2014-03-31 14:56:58 +0000
committerNico Rieck <nico.rieck@gmail.com>2014-03-31 14:56:58 +0000
commit8ca0bfc57ff56efc4fd68e6eb12755bfdbf5d67c (patch)
treea4090b41974aad664d153a965096ab95b36791f2 /clang/lib/Sema/SemaDecl.cpp
parent82f0b06749e57467a730a7be9afe9a5ad539ebdc (diff)
downloadbcm5719-llvm-8ca0bfc57ff56efc4fd68e6eb12755bfdbf5d67c.tar.gz
bcm5719-llvm-8ca0bfc57ff56efc4fd68e6eb12755bfdbf5d67c.zip
Sema: Require external linkage for dll attributes
llvm-svn: 205198
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaDecl.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 26f8b2587fd..9d7f13cdd78 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -4843,6 +4843,22 @@ static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {
ND.dropAttr<SelectAnyAttr>();
}
}
+
+ // dll attributes require external linkage.
+ if (const DLLImportAttr *Attr = ND.getAttr<DLLImportAttr>()) {
+ if (!ND.isExternallyVisible()) {
+ S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern)
+ << &ND << Attr;
+ ND.setInvalidDecl();
+ }
+ }
+ if (const DLLExportAttr *Attr = ND.getAttr<DLLExportAttr>()) {
+ if (!ND.isExternallyVisible()) {
+ S.Diag(ND.getLocation(), diag::err_attribute_dll_not_extern)
+ << &ND << Attr;
+ ND.setInvalidDecl();
+ }
+ }
}
static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl,
OpenPOWER on IntegriCloud