Author: ldionne Date: Fri Sep 14 07:07:16 2018 New Revision: 342238 URL: http://llvm.org/viewvc/llvm-project?rev=342238&view=rev Log: [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 Added: cfe/trunk/test/SemaCXX/PR38913.cpp Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=342238&r1=342237&r2=342238&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Fri Sep 14 07:07:16 2018 @@ -1258,6 +1258,9 @@ Decl *TemplateDeclInstantiator::VisitCla 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::VisitCXX 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 Added: cfe/trunk/test/SemaCXX/PR38913.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/PR38913.cpp?rev=342238&view=auto ============================================================================== --- cfe/trunk/test/SemaCXX/PR38913.cpp (added) +++ cfe/trunk/test/SemaCXX/PR38913.cpp Fri Sep 14 07:07:16 2018 @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s + +// PR38913 +// Check that we instantiate attributes on declarations for... + +// ...a member class of a class template specialization +template<class T> struct A { struct __attribute__((abi_tag("ATAG"))) X { }; }; +A<int>::X* a() { return 0; } // CHECK-DAG: @_Z1aB4ATAGv + +// ...a member class template +template<class T> struct B { template<class U> struct __attribute__((abi_tag("BTAG"))) X { }; }; +B<int>::X<int>* b() { return 0; } // CHECK-DAG: @_Z1bB4BTAGv _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits