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