summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/class-layout.cpp
Commit message (Collapse)AuthorAgeFilesLines
* CodeGen: Don't crash when initializing pointer-to-member fields in basesDavid Majnemer2014-09-281-1/+1
| | | | | | | | | | | | | | | | | Clang uses two types to talk about a C++ class, the NonVirtualBaseLLVMType and the LLVMType. Previously, we would allow one of these to be packed and the other not. This is problematic. If both don't agree on a common subset of fields, then routines like getLLVMFieldNo will point to the wrong field. Solve this by copying the 'packed'-ness of the complete type to the non-virtual subobject. For this to work, we need to take into account the non-virtual subobject's size and alignment when we are computing the layout of the complete object. This fixes PR21089. llvm-svn: 218577
* Fix DOS-style newlines.Eli Bendersky2014-06-061-5/+5
| | | | | | | | | A previous patch r210330 (and possibly another) introduced DOS-style newlines into a UNIX newline formatted file. Patch by Mark Heffernan (http://reviews.llvm.org/D4046) llvm-svn: 210369
* Fixed Assert In CGRecordLoweringWarren Hunt2014-04-251-0/+9
| | | | | | | | | | | Prior to this patch, CGRecordLower assumed that virtual bases could not be placed before the nvsize of an object. This isn't true in Itanium mode, virtual bases are placed at dsize rather than vnsize and in the case of zero sized non-virtual bases nvsize can be larger than dsize. This patch fixes CGRecordLowering to avoid an assert and to clip bitfields properly in this case. A test case is included. llvm-svn: 207280
* Complete Rewrite of CGRecordLayoutBuilderWarren Hunt2014-02-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CGRecordLayoutBuilder was aging, complex, multi-pass, and shows signs of existing before ASTRecordLayoutBuilder. It redundantly performed many layout operations that are now performed by ASTRecordLayoutBuilder and asserted that the results were the same. With the addition of support for the MS-ABI, such as placement of vbptrs, vtordisps, different bitfield layout and a variety of other features, CGRecordLayoutBuilder was growing unwieldy in its redundancy. This patch re-architects CGRecordLayoutBuilder to not perform any redundant layout but rather, as directly as possible, lower an ASTRecordLayout to an llvm::type. The new architecture is significantly smaller and simpler than the CGRecordLayoutBuilder and contains fewer ABI-specific code paths. It's also one pass. The architecture of the new system is described in the comments. For the most part, the new system simply takes all of the fields and bases from an ASTRecordLayout, sorts them, inserts padding and dumps a record. Bitfields, unions and primary virtual bases make this process a bit more complicated. See the inline comments. In addition, this patch updates a few lit tests due to the fact that the new system computes more accurate llvm types than CGRecordLayoutBuilder. Each change is commented individually in the review. Differential Revision: http://llvm-reviews.chandlerc.com/D2795 llvm-svn: 201907
* Add a missing check in CodeGen of packed classes with vtables. ↵Eli Friedman2012-04-271-0/+14
| | | | | | <rdar://problem/11324125>. llvm-svn: 155689
* Record layout requires not just a definition, but a completeJohn McCall2011-10-071-0/+32
| | | | | | | | definition. Assert this. Change IR generation to not try to aggressively emit the IR translation of a record during its own definition. Fixes PR10912. llvm-svn: 141350
* clang side to match the LLVM IR type system rewrite patch.Chris Lattner2011-07-091-1/+1
| | | | llvm-svn: 134831
* Use the right type name.Anders Carlsson2011-04-171-1/+1
| | | | llvm-svn: 129674
* When laying out bases in, always try the "base subobject" LLVM type. If itAnders Carlsson2011-04-171-0/+28
| | | | | | | | | | | | | turns out that a field or base needs to be laid out in the tail padding of the base, CGRecordLayoutBuilder::ResizeLastBaseFieldIfNecessary will convert it to an array of i8. I've audited the new test results to make sure that they are still valid. I've also verified that we pass a self-host with this change. This (finally) fixes PR5589! llvm-svn: 129673
* Put each test in class-layout.cpp into a separate namespace.Anders Carlsson2010-12-051-9/+15
| | | | llvm-svn: 120925
* Use a more appropriate LLVM type for the vtable pointer.Anders Carlsson2010-05-051-2/+2
| | | | llvm-svn: 103078
* Baby steps towards fixing PR5589. If a class needs a vtable pointer, add one.Anders Carlsson2009-12-161-0/+4
| | | | llvm-svn: 91545
* Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'.Daniel Dunbar2009-12-151-1/+1
| | | | | | | | | - This is designed to make it obvious that %clang_cc1 is a "test variable" which is substituted. It is '%clang_cc1' instead of '%clang -cc1' because it can be useful to redefine what gets run as 'clang -cc1' (for example, to set a default target). llvm-svn: 91446
* No need to add tail padding if the resulting LLVM struct type will have the ↵Anders Carlsson2009-12-081-2/+6
| | | | | | same size as the final record size. llvm-svn: 90820
* Eliminate &&s in tests.Daniel Dunbar2009-11-081-1/+1
| | | | | | - 'for i in $(find . -type f); do sed -e 's#\(RUN:.*[^ ]\) *&& *$#\1#g' $i | FileUpdate $i; done', for the curious. llvm-svn: 86430
* Use the CGRecordLayoutBuilder even if there are no fields, because in C++ an ↵Anders Carlsson2009-07-271-0/+5
empty class will have a padding byte. llvm-svn: 77205
OpenPOWER on IntegriCloud