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 | |