diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-08-23 22:34:43 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-08-23 22:34:43 +0000 |
commit | 205c39bb6bd227393f6cc438680ab370e24c68c3 (patch) | |
tree | 8c27e5bb75ebad38884750b912b87e0c03f82b49 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 5777edf05c5f0fe3bdccd7cf09a49d269b7c4f37 (diff) | |
download | bcm5719-llvm-205c39bb6bd227393f6cc438680ab370e24c68c3.tar.gz bcm5719-llvm-205c39bb6bd227393f6cc438680ab370e24c68c3.zip |
MS ABI: Inherit DLL attributes to partial class template specializations
llvm-svn: 216333
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 844011880e4..5e789fe20ed 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -4421,6 +4421,19 @@ static void CheckAbstractClassUsage(AbstractUsageInfo &Info, /// \brief Check class-level dllimport/dllexport attribute. static void checkDLLAttribute(Sema &S, CXXRecordDecl *Class) { Attr *ClassAttr = getDLLAttr(Class); + + // MSVC inherits DLL attributes to partial class template specializations. + if (S.Context.getTargetInfo().getCXXABI().isMicrosoft() && !ClassAttr) { + if (auto *Spec = dyn_cast<ClassTemplatePartialSpecializationDecl>(Class)) { + if (Attr *TemplateAttr = + getDLLAttr(Spec->getSpecializedTemplate()->getTemplatedDecl())) { + auto *A = cast<InheritableAttr>(TemplateAttr->clone(S.getASTContext())); + A->setInherited(true); + ClassAttr = A; + } + } + } + if (!ClassAttr) return; |