summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-11-03 16:09:16 +0000
committerHans Wennborg <hans@hanshq.net>2014-11-03 16:09:16 +0000
commit8313c768369c29051c6e5b9bfe25af3744fe4043 (patch)
treedad489f2fa755b691f70e22ebf436d149957606e /clang/lib/Sema/SemaDeclCXX.cpp
parentc98e413498a98ec8c10d50f5d52aee105a0a29a0 (diff)
downloadbcm5719-llvm-8313c768369c29051c6e5b9bfe25af3744fe4043.tar.gz
bcm5719-llvm-8313c768369c29051c6e5b9bfe25af3744fe4043.zip
Don't allow dllimport/export on classes with internal linkage (PR21399)
Trying to import or export such classes doesn't make sense, and Clang would assert trying to export vtables for them. This is consistent with how we treat functions with internal linkage, but it is stricter than MSVC so we may have to back down if it breaks real code. llvm-svn: 221160
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 031edf1515b..0fae8c86d1b 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -4633,6 +4633,12 @@ static void checkDLLAttribute(Sema &S, CXXRecordDecl *Class) {
if (!ClassAttr)
return;
+ if (!Class->isExternallyVisible()) {
+ S.Diag(Class->getLocation(), diag::err_attribute_dll_not_extern)
+ << Class << ClassAttr;
+ return;
+ }
+
if (S.Context.getTargetInfo().getCXXABI().isMicrosoft() &&
!ClassAttr->isInherited()) {
// Diagnose dll attributes on members of class with dll attribute.
OpenPOWER on IntegriCloud