summaryrefslogtreecommitdiffstats
path: root/clang/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
commite8925dbc1d66285c4909e51d76ef61421be55d03 (patch)
treec4c51db7c92b60b686b6b9decc66ed51cfb9b2cd /clang/test/CodeGenCXX/function-template-specialization.cpp
parent2be8bf44cd0cc8719d01e947beda7640406b4db4 (diff)
downloadbcm5719-llvm-e8925dbc1d66285c4909e51d76ef61421be55d03.tar.gz
bcm5719-llvm-e8925dbc1d66285c4909e51d76ef61421be55d03.zip
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. llvm-svn: 74466
Diffstat (limited to 'clang/test/CodeGenCXX/function-template-specialization.cpp')
-rw-r--r--clang/test/CodeGenCXX/function-template-specialization.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/test/CodeGenCXX/function-template-specialization.cpp b/clang/test/CodeGenCXX/function-template-specialization.cpp
index 685306f8bed..bea3af2bb5a 100644
--- a/clang/test/CodeGenCXX/function-template-specialization.cpp
+++ b/clang/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
OpenPOWER on IntegriCloud