1 // RUN: clang-cc -emit-llvm %s -o %t &&
2 template<typename T, typename U>
3 T* next(T* ptr, const U& diff);
4 
5 template<typename T, typename U>
6 T* next(T* ptr, const U& diff) {
7   return ptr + diff;
8 }
9 
10 void test(int *iptr, float *fptr, int diff) {
11   // FIXME: should be "_Z4nextIiiEPT_S1_RKT0_"
12   // RUN: grep "_Z4nextIiiEPiPiRKi" %t &&
13   iptr = next(iptr, diff);
14   // FIXME: should be "_Z4nextIfiEPT_S1_RKT0_"
15   // RUN: grep "_Z4nextIfiEPfPfRKi" %t &&
16   fptr = next(fptr, diff);
17 }
18 
19 template<typename T, typename U>
20 T* next(T* ptr, const U& diff);
21 
22 void test2(int *iptr, double *dptr, int diff) {
23   iptr = next(iptr, diff);
24   // FIXME: should be "_Z4nextIdiEPT_S1_RKT0_"
25   // RUN: grep "_Z4nextIdiEPdPdRKi" %t
26   dptr = next(dptr, diff);
27 }
28