struct A { virtual void foo() {} /* Test 1 */ // CHECK: virtual void bar() {} }; struct B : A { void foo() override {} /* Test 2 */ // CHECK: void bar() override {} }; struct C : B { void foo() override {} /* Test 3 */ // CHECK: void bar() override {} }; struct D : B { void foo() override {} /* Test 4 */ // CHECK: void bar() override {} }; struct E : D { void foo() override {} /* Test 5 */ // CHECK: void bar() override {} }; int main() { A a; a.foo(); // CHECK: a.bar(); B b; b.foo(); // CHECK: b.bar(); C c; c.foo(); // CHECK: c.bar(); D d; d.foo(); // CHECK: d.bar(); E e; e.foo(); // CHECK: e.bar(); return 0; } // Test 1. // RUN: clang-rename -offset=26 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s // Test 2. // RUN: clang-rename -offset=109 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s // Test 3. // RUN: clang-rename -offset=201 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s // Test 4. // RUN: clang-rename -offset=293 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s // Test 5. // RUN: clang-rename -offset=385 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s // To find offsets after modifying the file, use: // grep -Ubo 'foo.*'