summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2018-09-14 14:07:16 +0000
committerLouis Dionne <ldionne@apple.com>2018-09-14 14:07:16 +0000
commit3c011e1e3c45dc53d135ad2ffc0b2d7998bc8e2c (patch)
treeec00ef96b1560fbe75e0455031c80deabf0da788 /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
parentb437238e95ee87075cfaad9b92082264ff00e2e2 (diff)
downloadbcm5719-llvm-3c011e1e3c45dc53d135ad2ffc0b2d7998bc8e2c.tar.gz
bcm5719-llvm-3c011e1e3c45dc53d135ad2ffc0b2d7998bc8e2c.zip
[clang] Make sure attributes on member classes are applied properly
Summary: Attributes on member classes of class templates and member class templates of class templates are not currently instantiated. This was discovered by Richard Smith here: http://lists.llvm.org/pipermail/cfe-dev/2018-September/059291.html This commit makes sure that attributes are instantiated properly. This commit does not fix the broken behavior for member partial and explicit specializations of class templates. PR38913 Reviewers: rsmith Subscribers: dexonsmith, cfe-commits Differential Revision: https://reviews.llvm.org/D51997 llvm-svn: 342238
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplateInstantiateDecl.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
index 09aa25ca0a2..340e0c67172 100644
--- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
+++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
@@ -1258,6 +1258,9 @@ Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {
if (QualifierLoc)
RecordInst->setQualifierInfo(QualifierLoc);
+ SemaRef.InstantiateAttrsForDecl(TemplateArgs, Pattern, RecordInst, LateAttrs,
+ StartingScope);
+
ClassTemplateDecl *Inst
= ClassTemplateDecl::Create(SemaRef.Context, DC, D->getLocation(),
D->getIdentifier(), InstParams, RecordInst);
@@ -1491,6 +1494,9 @@ Decl *TemplateDeclInstantiator::VisitCXXRecordDecl(CXXRecordDecl *D) {
if (SubstQualifier(D, Record))
return nullptr;
+ SemaRef.InstantiateAttrsForDecl(TemplateArgs, D, Record, LateAttrs,
+ StartingScope);
+
Record->setImplicit(D->isImplicit());
// FIXME: Check against AS_none is an ugly hack to work around the issue that
// the tag decls introduced by friend class declarations don't have an access
OpenPOWER on IntegriCloud