1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoT* next(T* ptr, const U& diff);
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoT* next(T* ptr, const U& diff) {
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  return ptr + diff;
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test(int *iptr, float *fptr, int diff) {
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // CHECK: _Z4nextIiiEPT_S1_RKT0_
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  iptr = next(iptr, diff);
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // CHECK: _Z4nextIfiEPT_S1_RKT0_
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  fptr = next(fptr, diff);
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaotemplate<typename T, typename U>
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoT* next(T* ptr, const U& diff);
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaovoid test2(int *iptr, double *dptr, int diff) {
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  iptr = next(iptr, diff);
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  // CHECK: _Z4nextIdiEPT_S1_RKT0_
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  dptr = next(dptr, diff);
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
27