diff options
Diffstat (limited to 'clang/test/CodeGenCXX/mangle-ms-templates.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/mangle-ms-templates.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/mangle-ms-templates.cpp b/clang/test/CodeGenCXX/mangle-ms-templates.cpp index c52b6b4b7a2..363583a65f4 100644 --- a/clang/test/CodeGenCXX/mangle-ms-templates.cpp +++ b/clang/test/CodeGenCXX/mangle-ms-templates.cpp @@ -133,3 +133,26 @@ void spam() { // CHECK: "\01??$FunctionPointerTemplate@$1?spam@@YAXXZ@@YAXXZ" // X64: "\01??$FunctionPointerTemplate@$1?spam@@YAXXZ@@YAXXZ" } + +// Unlike Itanium, there is no character code to indicate an argument pack. +// Tested with MSVC 2013, the first version which supports variadic templates. + +template <typename ...Ts> void variadic_fn_template(const Ts &...args) { } +void variadic_fn_instantiate() { + variadic_fn_template(0, 1, 3, 4); + variadic_fn_template(0, 1, 'a', "b"); +} +// CHECK: "\01??$variadic_fn_template@HHHH@@YAXABH000@Z" +// CHECK: "\01??$variadic_fn_template@HHD$$BY01D@@YAXABH0ABDAAY01$$CBD@Z" + +template <typename ...Ts> +struct VariadicClass { + VariadicClass() { } + int x; +}; +void variadic_class_instantiate() { + VariadicClass<int, char, bool> a; + VariadicClass<bool, char, int> b; +} +// CHECK: call {{.*}} @"\01??0?$VariadicClass@HD_N@@QAE@XZ" +// CHECK: call {{.*}} @"\01??0?$VariadicClass@_NDH@@QAE@XZ" |