template 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(number); return value; } static void foo(T value) {} T member; }; template void func() { Foo obj; /* Test 2 */ // CHECK: Bar obj; obj.member = T(); Foo::foo(); // CHECK: Bar::foo(); } int main() { Foo i; /* Test 3 */ // CHECK: Bar i; i.member = 0; Foo::foo(0); // CHECK: Bar::foo(0); Foo b; // CHECK: Bar b; b.member = false; Foo::foo(false); // CHECK: Bar::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.*'