]> granicus.if.org Git - clang/commitdiff
Assert that primary bases always have offset 0.
authorAnders Carlsson <andersca@mac.com>
Thu, 11 Mar 2010 01:49:18 +0000 (01:49 +0000)
committerAnders Carlsson <andersca@mac.com>
Thu, 11 Mar 2010 01:49:18 +0000 (01:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98223 91177308-0d34-0410-b5e6-96231b3b80d8

clang.xcodeproj/project.pbxproj
lib/AST/RecordLayout.cpp

index 1fcc7c8ad4938a01bbe356744055c222d561544e..7bf633532d2afe276309d56e2e305282571f7cff 100644 (file)
@@ -49,6 +49,7 @@
                1A81AA19108144F40094E50B /* CGVtable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A81AA18108144F40094E50B /* CGVtable.cpp */; };
                1A869A700BA2164C008DA07A /* LiteralSupport.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1A869A6E0BA2164C008DA07A /* LiteralSupport.h */; };
                1A869AA80BA21ABA008DA07A /* LiteralSupport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A869AA70BA21ABA008DA07A /* LiteralSupport.cpp */; };
+               1A96785211486FDC00F24372 /* RecordLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A96785111486FDC00F24372 /* RecordLayout.cpp */; };
                1A97825B1108BA18002B98FC /* CGVTT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A97825A1108BA18002B98FC /* CGVTT.cpp */; };
                1A986AB710D0746D00A8EA9E /* CGDeclCXX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A986AB610D0746D00A8EA9E /* CGDeclCXX.cpp */; };
                1AA1D91810125DE30078DEBC /* RecordLayoutBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AA1D91610125DE30078DEBC /* RecordLayoutBuilder.cpp */; };
                1A81AA5D108278A20094E50B /* CGVtable.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; name = CGVtable.h; path = lib/CodeGen/CGVtable.h; sourceTree = "<group>"; tabWidth = 2; };
                1A869A6E0BA2164C008DA07A /* LiteralSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LiteralSupport.h; sourceTree = "<group>"; };
                1A869AA70BA21ABA008DA07A /* LiteralSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LiteralSupport.cpp; sourceTree = "<group>"; };
+               1A96785111486FDC00F24372 /* RecordLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = RecordLayout.cpp; path = lib/AST/RecordLayout.cpp; sourceTree = "<group>"; tabWidth = 2; };
                1A97825A1108BA18002B98FC /* CGVTT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = CGVTT.cpp; path = lib/CodeGen/CGVTT.cpp; sourceTree = "<group>"; tabWidth = 2; };
                1A986AB610D0746D00A8EA9E /* CGDeclCXX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = CGDeclCXX.cpp; path = lib/CodeGen/CGDeclCXX.cpp; sourceTree = "<group>"; tabWidth = 2; };
                1AA1D91610125DE30078DEBC /* RecordLayoutBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = RecordLayoutBuilder.cpp; path = lib/AST/RecordLayoutBuilder.cpp; sourceTree = "<group>"; tabWidth = 2; };
                                3557D1A80EB136B100C59739 /* InheritViz.cpp */,
                                DEDFE5CE0F7206E40035BD10 /* NestedNameSpecifier.cpp */,
                                35EE48B00E0C4CCA00715C54 /* ParentMap.cpp */,
+                               1A96785111486FDC00F24372 /* RecordLayout.cpp */,
                                1AA1D91610125DE30078DEBC /* RecordLayoutBuilder.cpp */,
                                1AA1D91710125DE30078DEBC /* RecordLayoutBuilder.h */,
                                DE3452400AEF1A2D00DBC861 /* Stmt.cpp */,
                                1A621C4411111D61009E6834 /* CIndexInclusionStack.cpp in Sources */,
                                1A621C4511111D61009E6834 /* CIndexUSRs.cpp in Sources */,
                                1A621C4611111D61009E6834 /* CXCursor.cpp in Sources */,
+                               1A96785211486FDC00F24372 /* RecordLayout.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
index 838753a1433facce01ab253c236028dd43c18425..68357450fb3ca88c2bcee71b9551a51daa20af98 100644 (file)
@@ -64,4 +64,15 @@ ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx,
     CXXInfo->BaseOffsets[bases[i].first] = bases[i].second;
   for (unsigned i = 0; i != numvbases; ++i)
     CXXInfo->VBaseOffsets[vbases[i].first] = vbases[i].second;
+
+#ifndef NDEBUG
+    if (const CXXRecordDecl *PrimaryBase = getPrimaryBase()) {
+      if (getPrimaryBaseWasVirtual())
+        assert(getVBaseClassOffset(PrimaryBase) == 0 &&
+               "Primary virtual base must be at offset 0!");
+      else
+        assert(getBaseClassOffset(PrimaryBase) == 0 &&
+               "Primary base must be at offset 0!");
+    }
+#endif        
 }