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 | e8925dbc1d66285c4909e51d76ef61421be55d03 (patch) | |
tree | c4c51db7c92b60b686b6b9decc66ed51cfb9b2cd /clang/test/CodeGenCXX/function-template-specialization.cpp | |
parent | 2be8bf44cd0cc8719d01e947beda7640406b4db4 (diff) | |
download | bcm5719-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.cpp | 8 |
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 |