1 // RUN: clang-cc -emit-llvm %s -o %t && FileCheck %s --input-file=%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   // CHECK: _Z4nextIiiEPT_S0_RKT0_
13   iptr = next(iptr, diff);
14   // FIXME: should be "_Z4nextIfiEPT_S1_RKT0_"
15   // CHECK: _Z4nextIfiEPT_S0_RKT0_
16 
17   fptr = next(fptr, diff);
18 }
19 
20 template<typename T, typename U>
21 T* next(T* ptr, const U& diff);
22 
23 void test2(int *iptr, double *dptr, int diff) {
24   iptr = next(iptr, diff);
25   // FIXME: should be "_Z4nextIdiEPT_S1_RKT0_"
26   // RUN: grep "_Z4nextIiiEPT_S0_RKT0_" %t
27   dptr = next(dptr, diff);
28 }
29