blob: 7728f3dc746244ba0474980d114578f370e8cd36 [file] [log] [blame]
Hans Wennborgc9bd88e2014-01-14 19:35:09 +00001// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple %s -o - | FileCheck %s
David Majnemer9963ade2014-12-16 04:52:14 +00002
3// CHECK-DAG: _ZZN7PR219047GetDataIiEERKibE1i = internal global i32 4
4// CHECK-DAG: _ZZN7PR219047GetDataIiEERKibE1i_0 = internal global i32 2
5
Douglas Gregor8f5d4422009-06-29 20:59:39 +00006template<typename T, typename U>
7T* next(T* ptr, const U& diff);
8
9template<typename T, typename U>
10T* next(T* ptr, const U& diff) {
11 return ptr + diff;
12}
13
14void test(int *iptr, float *fptr, int diff) {
Anders Carlssona2fb9bc2009-09-17 04:02:31 +000015 // CHECK: _Z4nextIiiEPT_S1_RKT0_
Douglas Gregor8f5d4422009-06-29 20:59:39 +000016 iptr = next(iptr, diff);
Anders Carlssona2fb9bc2009-09-17 04:02:31 +000017
18 // CHECK: _Z4nextIfiEPT_S1_RKT0_
Douglas Gregor8f5d4422009-06-29 20:59:39 +000019 fptr = next(fptr, diff);
20}
21
22template<typename T, typename U>
23T* next(T* ptr, const U& diff);
24
25void test2(int *iptr, double *dptr, int diff) {
26 iptr = next(iptr, diff);
Anders Carlssona2fb9bc2009-09-17 04:02:31 +000027
28 // CHECK: _Z4nextIdiEPT_S1_RKT0_
Douglas Gregor8f5d4422009-06-29 20:59:39 +000029 dptr = next(dptr, diff);
Owen Andersone05f2ed2009-07-27 21:00:51 +000030}
David Majnemer9963ade2014-12-16 04:52:14 +000031
32namespace PR21904 {
33template <typename>
34const int &GetData(bool);
35
36template <>
37const int &GetData<int>(bool b) {
38 static int i = 4;
39 if (b) {
40 static int i = 2;
41 return i;
42 }
43 return i;
44}
45}