aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/function-template-specialization.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-06-29 22:39:32 +0000
committerDouglas Gregor <dgregor@apple.com>2009-06-29 22:39:32 +0000
commit1fd2dd145d9bcdf0b8d60a88e1795b6ae83656f5 (patch)
treeab0e5c3ba7f6483cd9ad24dbcdab0cda06dd7671 /test/CodeGenCXX/function-template-specialization.cpp
parent7881a0565893f1da6faafbd86377f5b50e4376a5 (diff)
Improve code generation for function template specializations:
- Track implicit instantiations vs. the not-yet-supported explicit specializations - Give implicit instantiations of function templates (and member functions of class templates) linkonce_odr linkage. - Improve name mangling for function template specializations, including the template arguments of the instantiation and the return type of the function. Note that our name-mangling is improved, but not correct: we still don't mangle substitutions, although the manglings we produce can be demangled. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74466 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/function-template-specialization.cpp')
-rw-r--r--test/CodeGenCXX/function-template-specialization.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/test/CodeGenCXX/function-template-specialization.cpp b/test/CodeGenCXX/function-template-specialization.cpp
index 685306f8be..bea3af2bb5 100644
--- a/test/CodeGenCXX/function-template-specialization.cpp
+++ b/test/CodeGenCXX/function-template-specialization.cpp
@@ -1,4 +1,4 @@
-// RUN: clang-cc -emit-llvm %s -o -
+// RUN: clang-cc -emit-llvm %s -o %t &&
template<typename T, typename U>
T* next(T* ptr, const U& diff);
@@ -8,7 +8,11 @@ T* next(T* ptr, const U& diff) {
}
void test(int *iptr, float *fptr, int diff) {
+ // FIXME: should be "_Z4nextIiiEPT_S1_RKT0_"
+ // RUN: grep "_Z4nextIiiEPiPiRKi" %t &&
iptr = next(iptr, diff);
+ // FIXME: should be "_Z4nextIfiEPT_S1_RKT0_"
+ // RUN: grep "_Z4nextIfiEPfPfRKi" %t &&
fptr = next(fptr, diff);
}
@@ -17,5 +21,7 @@ T* next(T* ptr, const U& diff);
void test2(int *iptr, double *dptr, int diff) {
iptr = next(iptr, diff);
+ // FIXME: should be "_Z4nextIdiEPT_S1_RKT0_"
+ // RUN: grep "_Z4nextIdiEPdPdRKi" %t
dptr = next(dptr, diff);
} \ No newline at end of file