diff options
author | Nico Rieck <nico.rieck@gmail.com> | 2014-03-31 14:56:58 +0000 |
---|---|---|
committer | Nico Rieck <nico.rieck@gmail.com> | 2014-03-31 14:56:58 +0000 |
commit | 8ca0bfc57ff56efc4fd68e6eb12755bfdbf5d67c (patch) | |
tree | a4090b41974aad664d153a965096ab95b36791f2 /clang/lib/Sema/SemaDecl.cpp | |
parent | 82f0b06749e57467a730a7be9afe9a5ad539ebdc (diff) | |
download | bcm5719-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.cpp | 16 |
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, |