| 1 | // RUN: clang-reorder-fields -record-name bar::Derived -fields-order z,y %s -- 2>&1 | FileCheck --check-prefix=CHECK-MESSAGES %s |
| 2 | // FIXME: clang-reorder-fields should provide -verify mode to make writing these checks |
| 3 | // easier and more accurate, for now we follow clang-tidy's approach. |
| 4 | |
| 5 | namespace bar { |
| 6 | struct Base { |
| 7 | int x; |
| 8 | int p; |
| 9 | }; |
| 10 | |
| 11 | class Derived : public Base { |
| 12 | public: |
| 13 | Derived(long ny); |
| 14 | Derived(char nz); |
| 15 | private: |
| 16 | long y; |
| 17 | char z; |
| 18 | }; |
| 19 | |
| 20 | Derived::Derived(long ny) : |
| 21 | Base(), |
| 22 | y(ny), |
| 23 | z(static_cast<char>(y)) |
| 24 | // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: reordering field y after z makes y uninitialized when used in init expression |
| 25 | {} |
| 26 | |
| 27 | Derived::Derived(char nz) : |
| 28 | Base(), |
| 29 | y(nz), |
| 30 | // Check that base class fields are correctly ignored in reordering checks |
| 31 | // x has field index 1 and so would improperly warn if this wasn't the case since the command for this file swaps field indexes 1 and 2 |
| 32 | z(x) |
| 33 | // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: reordering field x after z makes x uninitialized when used in init expression |
| 34 | {} |
| 35 | |
| 36 | } // namespace bar |
| 37 | |