From 5114b5eb4c7d38c5a622948fd977e292a635236c Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Tue, 31 Jan 2017 22:31:45 +0000 Subject: Merging r292194: ------------------------------------------------------------------------ r292194 | majnemer | 2017-01-16 20:14:25 -0800 (Mon, 16 Jan 2017) | 8 lines [AST] AttributedType should derive type properties from the EquivalentType Using the canonical type instead of the equivalent type can result in insufficient template instantiations. This fixes PR31656. Differential Revision: https://reviews.llvm.org/D28788 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@293702 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Type.h | 14 +++++++------- test/CodeGenCXX/microsoft-abi-default-cc.cpp | 9 +++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 744a408e57..a50e054f9b 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -3827,13 +3827,13 @@ private: friend class ASTContext; // creates these - AttributedType(QualType canon, Kind attrKind, - QualType modified, QualType equivalent) - : Type(Attributed, canon, canon->isDependentType(), - canon->isInstantiationDependentType(), - canon->isVariablyModifiedType(), - canon->containsUnexpandedParameterPack()), - ModifiedType(modified), EquivalentType(equivalent) { + AttributedType(QualType canon, Kind attrKind, QualType modified, + QualType equivalent) + : Type(Attributed, canon, equivalent->isDependentType(), + equivalent->isInstantiationDependentType(), + equivalent->isVariablyModifiedType(), + equivalent->containsUnexpandedParameterPack()), + ModifiedType(modified), EquivalentType(equivalent) { AttributedTypeBits.AttrKind = attrKind; } diff --git a/test/CodeGenCXX/microsoft-abi-default-cc.cpp b/test/CodeGenCXX/microsoft-abi-default-cc.cpp index e3ca39221e..6259a53dbf 100644 --- a/test/CodeGenCXX/microsoft-abi-default-cc.cpp +++ b/test/CodeGenCXX/microsoft-abi-default-cc.cpp @@ -45,3 +45,12 @@ void __cdecl static_baz() {} void static_qux() {} // GCABI-LABEL: define void @_Z10static_quxv // MSABI: define void @"\01?static_qux@@YAXXZ" + +namespace PR31656 { +template +void __cdecl callee(int args[I]); +// GCABI-LABEL: declare void @_ZN7PR316566calleeILi1EEEvPi( +// MSABI: declare void @"\01??$callee@$00@PR31656@@YAXQAH@Z"( + +void caller() { callee<1>(0); } +} -- cgit v1.2.3