1 template <typename T>
2 class Foo { /* Test 1 */ // CHECK: class Bar { /* Test 1 */
3 public:
foo(T arg,T & ref,T * ptr)4 T foo(T arg, T& ref, T* ptr) {
5 T value;
6 int number = 42;
7 value = (T)number;
8 value = static_cast<T>(number);
9 return value;
10 }
foo(T value)11 static void foo(T value) {}
12 T member;
13 };
14
15 template <typename T>
func()16 void func() {
17 Foo<T> obj; /* Test 2 */ // CHECK: Bar<T> obj;
18 obj.member = T();
19 Foo<T>::foo(); // CHECK: Bar<T>::foo();
20 }
21
main()22 int main() {
23 Foo<int> i; /* Test 3 */ // CHECK: Bar<int> i;
24 i.member = 0;
25 Foo<int>::foo(0); // CHECK: Bar<int>::foo(0);
26
27 Foo<bool> b; // CHECK: Bar<bool> b;
28 b.member = false;
29 Foo<bool>::foo(false); // CHECK: Bar<bool>::foo(false);
30
31 return 0;
32 }
33
34 // Test 1.
35 // RUN: clang-rename -offset=29 -new-name=Bar %s -- -fno-delayed-template-parsing | sed 's,//.*,,' | FileCheck %s
36 // Test 2.
37 // RUN: clang-rename -offset=324 -new-name=Bar %s -- -fno-delayed-template-parsing | sed 's,//.*,,' | FileCheck %s
38 // Test 3.
39 // RUN: clang-rename -offset=463 -new-name=Bar %s -- -fno-delayed-template-parsing | sed 's,//.*,,' | FileCheck %s
40
41 // To find offsets after modifying the file, use:
42 // grep -Ubo 'Foo.*' <file>
43