diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-02-18 02:28:01 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-02-18 02:28:01 +0000 |
commit | a88b359fdc59e46e8b784fb4f4d08dc482c5d2c9 (patch) | |
tree | af43678a2ef57932fd9f84e3eb538d1a5390885d /clang/test/CodeGenCXX/mangle.cpp | |
parent | 0ba644b66b34f453b70f021391702827f5036afe (diff) | |
download | bcm5719-llvm-a88b359fdc59e46e8b784fb4f4d08dc482c5d2c9.tar.gz bcm5719-llvm-a88b359fdc59e46e8b784fb4f4d08dc482c5d2c9.zip |
Itanium ABI: Improve our mangling of <destructor-name>
Our mangling of <destructor-name> wasn't quite right: we'd introduce
mangling substitutions where one shouldn't be possible. We also didn't
correctly handle the case where the destroyed type was not dependent but
still a TemplateSpecializationType.
N.B. There isn't a mangling for a template-template parameter showing up
as the destroyed type. We do the 'obvious' thing and mangle the index
of the parameter.
llvm-svn: 229615
Diffstat (limited to 'clang/test/CodeGenCXX/mangle.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/mangle.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp index 3b4123eace5..e15d54086a6 100644 --- a/clang/test/CodeGenCXX/mangle.cpp +++ b/clang/test/CodeGenCXX/mangle.cpp @@ -1030,10 +1030,21 @@ namespace test51 { decltype(U().~S1<T>()) fun2() {} template <typename U, typename T> decltype(S1<T>().~U()) fun3() {} + template <typename T> + decltype(S1<T>().~S1<T>(), S1<T>().~S1<T>()) fun4() {}; + template <typename T> + decltype(S1<int>().~S1<T>()) fun5(){}; + template <template <typename T> class U> + decltype(S1<int>().~U<int>()) fun6(){}; template void fun1<int>(); // CHECK-LABEL: @_ZN6test514fun1IiEEDTcldtcv2S1IT_E_Edn2S1IS2_EEEv template void fun2<S1<int>, int>(); // CHECK-LABEL: @_ZN6test514fun2I2S1IiEiEEDTcldtcvT__Edn2S1IT0_EEEv template void fun3<S1<int>, int>(); // CHECK-LABEL: @_ZN6test514fun3I2S1IiEiEEDTcldtcvS1_IT0_E_EdnT_EEv + template void fun4<int>(); + // CHECK-LABEL: @_ZN6test514fun4IiEEDTcmcldtcv2S1IT_E_Edn2S1IS2_EEcldtcvS3__Edn2S1IS2_EEEv + template void fun5<int>(); + // CHECK-LABEL: @_ZN6test514fun6I2S1EEDTcldtcvS1_IiE_EdnT_IiEEEv + template void fun6<S1>(); } |