1 struct A { 2 virtual void foo() {} /* Test 1 */ // CHECK: virtual void bar() {} 3 }; 4 5 struct B : A { 6 void foo() override {} /* Test 2 */ // CHECK: void bar() override {} 7 }; 8 9 struct C : B { 10 void foo() override {} /* Test 3 */ // CHECK: void bar() override {} 11 }; 12 13 struct D : B { 14 void foo() override {} /* Test 4 */ // CHECK: void bar() override {} 15 }; 16 17 struct E : D { 18 void foo() override {} /* Test 5 */ // CHECK: void bar() override {} 19 }; 20 21 int main() { 22 A a; 23 a.foo(); // CHECK: a.bar(); 24 B b; 25 b.foo(); // CHECK: b.bar(); 26 C c; 27 c.foo(); // CHECK: c.bar(); 28 D d; 29 d.foo(); // CHECK: d.bar(); 30 E e; 31 e.foo(); // CHECK: e.bar(); 32 return 0; 33 } 34 35 // Test 1. 36 // RUN: clang-rename -offset=26 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s 37 // Test 2. 38 // RUN: clang-rename -offset=109 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s 39 // Test 3. 40 // RUN: clang-rename -offset=201 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s 41 // Test 4. 42 // RUN: clang-rename -offset=293 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s 43 // Test 5. 44 // RUN: clang-rename -offset=385 -new-name=bar %s -- | sed 's,//.*,,' | FileCheck %s 45 46 // To find offsets after modifying the file, use: 47 // grep -Ubo 'foo.*' <file> 48