template <typename T> class Foo { /* Test 1 */ // CHECK: class Bar { /* Test 1 */ public: T foo(T arg, T& ref, T* ptr) { T value; int number = 42; value = (T)number; value = static_cast<T>(number); return value; } static void foo(T value) {} T member; }; template <typename T> void func() { Foo<T> obj; /* Test 2 */ // CHECK: Bar<T> obj; obj.member = T(); Foo<T>::foo(); // CHECK: Bar<T>::foo(); } int main() { Foo<int> i; /* Test 3 */ // CHECK: Bar<int> i; i.member = 0; Foo<int>::foo(0); // CHECK: Bar<int>::foo(0); Foo<bool> b; // CHECK: Bar<bool> b; b.member = false; Foo<bool>::foo(false); // CHECK: Bar<bool>::foo(false); return 0; } // Test 1. // RUN: clang-rename -offset=29 -new-name=Bar %s -- -fno-delayed-template-parsing | sed 's,//.*,,' | FileCheck %s // Test 2. // RUN: clang-rename -offset=324 -new-name=Bar %s -- -fno-delayed-template-parsing | sed 's,//.*,,' | FileCheck %s // Test 3. // RUN: clang-rename -offset=463 -new-name=Bar %s -- -fno-delayed-template-parsing | sed 's,//.*,,' | FileCheck %s // To find offsets after modifying the file, use: // grep -Ubo 'Foo.*' <file> |