[ms-abi] Refactoring Non-virtual base layout in record layout

This refactor addresses bugzilla bug 18167 and simplifies the code at 
the same time.  Also I add a test case for the bug.  Also I make a 
non-functional change to the basic layout lit tests to make them more 
reliable (using CHECK-NEXT instead of CHECK).

llvm-svn: 197183
diff --git a/clang/test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp b/clang/test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp
index 7dd3fad..a4741e9 100644
--- a/clang/test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp
+++ b/clang/test/Layout/ms-x86-lazy-empty-nonvirtual-base.cpp
@@ -706,6 +706,28 @@
 // CHECK-X64:      | [sizeof=24, align=8
 // CHECK-X64:      |  nvsize=24, nvalign=8]
 
+

+struct C0 {};

+struct C1 : public C0 { int C1F0; };

+struct C2 : public C1, public C0 {};
+
+// CHECK: *** Dumping AST Record Layout
+// CHECK:    0 | struct C2

+// CHECK:    0 |   struct C1 (base)

+// CHECK:    0 |     struct C0 (base) (empty)

+// CHECK:    0 |     int C1F0

+// CHECK:    5 |   struct C0 (base) (empty)

+// CHECK:      | [sizeof=8, align=4

+// CHECK:      |  nvsize=8, nvalign=4]

+// CHECK-X64: *** Dumping AST Record Layout

+// CHECK-X64:    0 | struct C2

+// CHECK-X64:    0 |   struct C1 (base)

+// CHECK-X64:    0 |     struct C0 (base) (empty)

+// CHECK-X64:    0 |     int C1F0

+// CHECK-X64:    5 |   struct C0 (base) (empty)

+// CHECK-X64:      | [sizeof=8, align=4

+// CHECK-X64:      |  nvsize=8, nvalign=4]

+
 int a[
 sizeof(AA)+
 sizeof(AB)+
@@ -732,4 +754,5 @@
 sizeof(AX)+
 sizeof(BX)+
 sizeof(CX)+
-sizeof(DX)];
+sizeof(DX)+
+sizeof(C2)];