[cfe-commits] r82563 - in /cfe/trunk: lib/AST/RecordLayoutBuilder.cpp test/SemaCXX/primary-base.cpp

Anders Carlsson andersca at mac.com
Tue Sep 22 12:16:59 PDT 2009


Author: andersca
Date: Tue Sep 22 14:16:59 2009
New Revision: 82563

URL: http://llvm.org/viewvc/llvm-project?rev=82563&view=rev
Log:
If we already set a primary base, don't set it to the first nearly empty base class.

Added:
    cfe/trunk/test/SemaCXX/primary-base.cpp
Modified:
    cfe/trunk/lib/AST/RecordLayoutBuilder.cpp

Modified: cfe/trunk/lib/AST/RecordLayoutBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RecordLayoutBuilder.cpp?rev=82563&r1=82562&r2=82563&view=diff

==============================================================================
--- cfe/trunk/lib/AST/RecordLayoutBuilder.cpp (original)
+++ cfe/trunk/lib/AST/RecordLayoutBuilder.cpp Tue Sep 22 14:16:59 2009
@@ -158,8 +158,8 @@
 
   // Otherwise if is the first nearly empty virtual base, if one exists,
   // otherwise there is no primary base class.
-  setPrimaryBase(FirstPrimary, true);
-  return;
+  if (!PrimaryBase)
+    setPrimaryBase(FirstPrimary, true);
 }
 
 void ASTRecordLayoutBuilder::LayoutVirtualBase(const CXXRecordDecl *RD) {

Added: cfe/trunk/test/SemaCXX/primary-base.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/primary-base.cpp?rev=82563&view=auto

==============================================================================
--- cfe/trunk/test/SemaCXX/primary-base.cpp (added)
+++ cfe/trunk/test/SemaCXX/primary-base.cpp Tue Sep 22 14:16:59 2009
@@ -0,0 +1,11 @@
+// RUN: clang-cc -fsyntax-only -verify %s
+class A { virtual void f(); };
+class B : virtual A { };
+
+class C : B { };
+
+// Since A is already a primary base class, C should be the primary base class of F.
+class F : virtual A, virtual C { };
+
+int sa[sizeof(F) == sizeof(A) ? 1 : -1];
+





More information about the cfe-commits mailing list