xref: /llvm-project/clang-tools-extra/test/clang-reorder-fields/FieldDependencyWarningDerived.cpp (revision b687fdda29085c9f9e4925be38b7cac97f871c99)
1*b687fddaSAlexander Shaposhnikov // RUN: clang-reorder-fields -record-name bar::Derived -fields-order z,y %s -- 2>&1 | FileCheck --check-prefix=CHECK-MESSAGES %s
2*b687fddaSAlexander Shaposhnikov // FIXME: clang-reorder-fields should provide -verify mode to make writing these checks
3*b687fddaSAlexander Shaposhnikov // easier and more accurate, for now we follow clang-tidy's approach.
4*b687fddaSAlexander Shaposhnikov 
5*b687fddaSAlexander Shaposhnikov namespace bar {
6*b687fddaSAlexander Shaposhnikov struct Base {
7*b687fddaSAlexander Shaposhnikov   int x;
8*b687fddaSAlexander Shaposhnikov   int p;
9*b687fddaSAlexander Shaposhnikov };
10*b687fddaSAlexander Shaposhnikov 
11*b687fddaSAlexander Shaposhnikov class Derived : public Base {
12*b687fddaSAlexander Shaposhnikov public:
13*b687fddaSAlexander Shaposhnikov   Derived(long ny);
14*b687fddaSAlexander Shaposhnikov   Derived(char nz);
15*b687fddaSAlexander Shaposhnikov private:
16*b687fddaSAlexander Shaposhnikov   long y;
17*b687fddaSAlexander Shaposhnikov   char z;
18*b687fddaSAlexander Shaposhnikov };
19*b687fddaSAlexander Shaposhnikov 
Derived(long ny)20*b687fddaSAlexander Shaposhnikov Derived::Derived(long ny) :
21*b687fddaSAlexander Shaposhnikov   Base(),
22*b687fddaSAlexander Shaposhnikov   y(ny),
23*b687fddaSAlexander Shaposhnikov   z(static_cast<char>(y))
24*b687fddaSAlexander Shaposhnikov   // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: reordering field y after z makes y uninitialized when used in init expression
25*b687fddaSAlexander Shaposhnikov {}
26*b687fddaSAlexander Shaposhnikov 
Derived(char nz)27*b687fddaSAlexander Shaposhnikov Derived::Derived(char nz) :
28*b687fddaSAlexander Shaposhnikov   Base(),
29*b687fddaSAlexander Shaposhnikov   y(nz),
30*b687fddaSAlexander Shaposhnikov   // Check that base class fields are correctly ignored in reordering checks
31*b687fddaSAlexander Shaposhnikov   // 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*b687fddaSAlexander Shaposhnikov   z(x)
33*b687fddaSAlexander Shaposhnikov   // CHECK-MESSAGES-NOT: :[[@LINE-1]]:3: warning: reordering field x after z makes x uninitialized when used in init expression
34*b687fddaSAlexander Shaposhnikov {}
35*b687fddaSAlexander Shaposhnikov 
36*b687fddaSAlexander Shaposhnikov } // namespace bar
37