diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-06-29 22:39:32 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-06-29 22:39:32 +0000 |
commit | 1fd2dd145d9bcdf0b8d60a88e1795b6ae83656f5 (patch) | |
tree | ab0e5c3ba7f6483cd9ad24dbcdab0cda06dd7671 /test/CodeGenCXX/function-template-specialization.cpp | |
parent | 7881a0565893f1da6faafbd86377f5b50e4376a5 (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.cpp | 8 |
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 |