63 lines · cpp
1// RUN: %clang_cc1 -emit-llvm -Wundefined-func-template -verify -triple %itanium_abi_triple %s -o - | FileCheck %s2// expected-no-diagnostics3 4// CHECK-DAG: _ZZN7PR219047GetDataIiEERKibE1i = internal global i32 45// CHECK-DAG: _ZZN7PR219047GetDataIiEERKibE1i_0 = internal global i32 26 7template<typename T, typename U>8T* next(T* ptr, const U& diff);9 10template<typename T, typename U>11T* next(T* ptr, const U& diff) { 12 return ptr + diff; 13}14 15void test(int *iptr, float *fptr, int diff) {16 // CHECK: _Z4nextIiiEPT_S1_RKT0_17 iptr = next(iptr, diff);18 19 // CHECK: _Z4nextIfiEPT_S1_RKT0_20 fptr = next(fptr, diff);21}22 23template<typename T, typename U>24T* next(T* ptr, const U& diff);25 26void test2(int *iptr, double *dptr, int diff) {27 iptr = next(iptr, diff);28 29 // CHECK: _Z4nextIdiEPT_S1_RKT0_30 dptr = next(dptr, diff);31}32 33namespace PR21904 {34template <typename>35const int &GetData(bool);36 37template <>38const int &GetData<int>(bool b) {39 static int i = 4;40 if (b) {41 static int i = 2;42 return i;43 }44 return i;45}46}47 48namespace GH125747 {49 50template<typename F> constexpr int visit(F f) { return f(0); }51 52template <class T> int G(T t);53 54int main() { return visit([](auto s) -> int { return G(s); }); }55 56template <class T> int G(T t) {57 return 0;58}59 60// CHECK: define {{.*}} @_ZN8GH1257471GIiEEiT_61 62}63