Sema check on out of order object initialization of
class object's base and members under -Wreorder flag.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@75168 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/SemaCXX/constructor-initializer.cpp b/test/SemaCXX/constructor-initializer.cpp
index a180d90..206d5d2 100644
--- a/test/SemaCXX/constructor-initializer.cpp
+++ b/test/SemaCXX/constructor-initializer.cpp
@@ -1,4 +1,4 @@
-// RUN: clang-cc -fsyntax-only -verify %s
+// RUN: clang-cc -Wreorder -fsyntax-only -verify %s
 class A { 
   int m;
    A() : A::m(17) { } // expected-error {{member initializer 'm' does not name a non-static data member or base class}}
@@ -64,7 +64,7 @@
 };
 
 struct Z : S { 
-  Z() : S(), X(), E()  {} // expected-error {{type 'class E' is not a direct or virtual base of 'Z'}}
+  Z() : X(), S(), E()  {} // expected-error {{type 'class E' is not a direct or virtual base of 'Z'}}
 };
 
 class U { 
@@ -85,10 +85,12 @@
 
 struct Current : Derived {
   int Derived;
-  Current() : Derived(1), ::Derived(),
+  Current() : Derived(1), ::Derived(), // expected-warning {{member 'Derived' will be initialized after}} \
+                                       // expected-note {{base '::Derived'}} \
+                                       // expected-warning {{base class '::Derived' will be initialized after}}
                           ::Derived::Base(), // expected-error {{type '::Derived::Base' is not a direct or virtual base of 'Current'}}
                            Derived::Base1(), // expected-error {{type 'Derived::Base1' is not a direct or virtual base of 'Current'}}
-                           Derived::V(),
+                           Derived::V(), // expected-note {{base 'Derived::V'}}
                            ::NonExisting(), // expected-error {{member initializer 'NonExisting' does not name a non-static data member or}}
                            INT::NonExisting()  {} // expected-error {{expected a class or namespace}} \
 						  // expected-error {{member initializer 'NonExisting' does not name a non-static data member or}}
diff --git a/test/SemaCXX/warn-reorder-ctor-initialization.cpp b/test/SemaCXX/warn-reorder-ctor-initialization.cpp
new file mode 100644
index 0000000..83b6710
--- /dev/null
+++ b/test/SemaCXX/warn-reorder-ctor-initialization.cpp
@@ -0,0 +1,18 @@
+// RUN: clang-cc  -fsyntax-only -Wreorder -verify %s
+
+struct B {};
+
+struct B1 {};
+
+class complex : public B, B1 { 
+public: 
+  complex() : s2(1),  // expected-warning {{member 's2' will be initialized after}}
+              s1(1) , // expected-note {{field s1}} 
+              s3(3),  // expected-warning {{member 's3' will be initialized after}} 
+              B1(),   // expected-note {{base 'struct B1'}}  \
+                      // expected-warning {{base class 'struct B1' will be initialized after}}
+              B() {}  // expected-note {{base 'struct B'}}
+  int s1;
+  int s2;
+  int s3;
+};