| 1 | // Forward declaration. |
| 2 | class Foo; /* Test 1 */ // CHECK: class Bar; /* Test 1 */ |
| 3 | |
| 4 | class Baz { |
| 5 | virtual int getValue() const = 0; |
| 6 | }; |
| 7 | |
| 8 | class Foo : public Baz { /* Test 2 */// CHECK: class Bar : public Baz { |
| 9 | public: |
| 10 | Foo(int value = 0) : x(value) {} // CHECK: Bar(int value = 0) : x(value) {} |
| 11 | |
| 12 | Foo &operator++(int) { // CHECK: Bar &operator++(int) { |
| 13 | x++; |
| 14 | return *this; |
| 15 | } |
| 16 | |
| 17 | bool operator<(Foo const &rhs) { // CHECK: bool operator<(Bar const &rhs) { |
| 18 | return this->x < rhs.x; |
| 19 | } |
| 20 | |
| 21 | int getValue() const { |
| 22 | return 0; |
| 23 | } |
| 24 | |
| 25 | private: |
| 26 | int x; |
| 27 | }; |
| 28 | |
| 29 | int main() { |
| 30 | Foo *Pointer = 0; // CHECK: Bar *Pointer = 0; |
| 31 | Foo Variable = Foo(10); // CHECK: Bar Variable = Bar(10); |
| 32 | for (Foo it; it < Variable; it++) { // CHECK: for (Bar it; it < Variable; it++) { |
| 33 | } |
| 34 | const Foo *C = new Foo(); // CHECK: const Bar *C = new Bar(); |
| 35 | const_cast<Foo *>(C)->getValue(); // CHECK: const_cast<Bar *>(C)->getValue(); |
| 36 | Foo foo; // CHECK: Bar foo; |
| 37 | const Baz &BazReference = foo; |
| 38 | const Baz *BazPointer = &foo; |
| 39 | dynamic_cast<const Foo &>(BazReference).getValue(); /* Test 3 */ // CHECK: dynamic_cast<const Bar &>(BazReference).getValue(); |
| 40 | dynamic_cast<const Foo *>(BazPointer)->getValue(); /* Test 4 */ // CHECK: dynamic_cast<const Bar *>(BazPointer)->getValue(); |
| 41 | reinterpret_cast<const Foo *>(BazPointer)->getValue(); /* Test 5 */ // CHECK: reinterpret_cast<const Bar *>(BazPointer)->getValue(); |
| 42 | static_cast<const Foo &>(BazReference).getValue(); /* Test 6 */ // CHECK: static_cast<const Bar &>(BazReference).getValue(); |
| 43 | static_cast<const Foo *>(BazPointer)->getValue(); /* Test 7 */ // CHECK: static_cast<const Bar *>(BazPointer)->getValue(); |
| 44 | return 0; |
| 45 | } |
| 46 | |
| 47 | // Test 1. |
| 48 | // RUN: clang-rename -offset=30 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 49 | // Test 2. |
| 50 | // RUN: clang-rename -offset=155 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 51 | // Test 3. |
| 52 | // RUN: clang-rename -offset=1133 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 53 | // Test 4. |
| 54 | // RUN: clang-rename -offset=1266 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 55 | // Test 5. |
| 56 | // RUN: clang-rename -offset=1402 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 57 | // Test 6. |
| 58 | // RUN: clang-rename -offset=1533 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 59 | // Test 7. |
| 60 | // RUN: clang-rename -offset=1665 -new-name=Bar %s -- -frtti | sed 's,//.*,,' | FileCheck %s |
| 61 | |
| 62 | // To find offsets after modifying the file, use: |
| 63 | // grep -Ubo 'Foo.*' <file> |
| 64 | |