Commit Graph

194 Commits

Author SHA1 Message Date
Daniel Dunbar c75c8bd757 IRgen: Move the bit-field access type into CGBitFieldInfo, and change bit-field LValues to just store the base address of object containing the bit-field.
llvm-svn: 100745
2010-04-08 02:59:45 +00:00
Daniel Dunbar 196ea449ed IRgen: Move BitFieldIsSigned bit into CGBitFieldInfo.
llvm-svn: 100513
2010-04-06 01:07:44 +00:00
Daniel Dunbar d45491077a Simplify.
llvm-svn: 100512
2010-04-06 01:07:41 +00:00
Daniel Dunbar cd3d5e76ce IRgen: Lift BitFieldInfo to CGBitFieldInfo at namespace level.
llvm-svn: 100433
2010-04-05 16:20:44 +00:00
Daniel Dunbar 034299ef25 IRGen: Move the auxiliary data structures tracking AST -> LLVM mappings out of CodeGenTypes, to per-record CGRecordLayout structures.
- I did a cursory check that this was perf neutral, FWIW.

llvm-svn: 99978
2010-03-31 01:09:11 +00:00
Daniel Dunbar e75a64f2d3 CGRecordLayoutBuilder: Switch unions to use same mechanism for tracking field and bit-field info as structs.
- Anders, please check.

llvm-svn: 99977
2010-03-31 00:55:13 +00:00
Daniel Dunbar 23ee4b7710 IRGen: Hide CGRecordLayoutBuilder class, because I can.
llvm-svn: 99967
2010-03-31 00:11:27 +00:00
Daniel Dunbar 072d0bb247 IRgen: Move CGRecordLayout to its own happy little file.
llvm-svn: 99945
2010-03-30 22:26:10 +00:00
Anders Carlsson e8bfe412ec Improve handling of emitting 'null' pointers to data members.
llvm-svn: 95066
2010-02-02 05:17:25 +00:00
Anders Carlsson b1ef991097 Fix an incorrect union layout assert. Fixes PR6164.
llvm-svn: 94754
2010-01-28 18:22:03 +00:00
Anders Carlsson d681a29ac0 Baby steps towards fixing PR5589. If a class needs a vtable pointer, add one.
llvm-svn: 91545
2009-12-16 17:27:20 +00:00
Anders Carlsson 220bf4fc5a No need to add tail padding if the resulting LLVM struct type will have the same size as the final record size.
llvm-svn: 90820
2009-12-08 01:24:23 +00:00
Anders Carlsson b1d3f7c909 Have ASTRecordLayout keep track of the key function, in preparation of fixing a synthetic ctor/dtor bug.
llvm-svn: 90168
2009-11-30 23:41:22 +00:00
Mike Stump a7a1b7e780 Fixup key function calculations.
llvm-svn: 89412
2009-11-20 00:02:19 +00:00
Mike Stump beab381d2d This doesn't work yet.
llvm-svn: 89307
2009-11-19 03:53:54 +00:00
Fariborz Jahanian e8e631c912 Prevent a code gen. crash on empty unions - pr5408.
llvm-svn: 86287
2009-11-06 20:47:40 +00:00
Anders Carlsson 1d116976b4 Store the key function of a record decl inside CGRecordLayout.
llvm-svn: 83900
2009-10-12 21:16:22 +00:00
Mike Stump 11289f4280 Remove tabs, and whitespace cleanups.
llvm-svn: 81346
2009-09-09 15:08:12 +00:00
Anders Carlsson 0e91275ab4 If the alignment of the chosen field in a union is greater than the alignment of the union, we need to use a packed LLVM struct. Fixes <rdar://problem/7184250>.
llvm-svn: 80964
2009-09-03 22:56:02 +00:00
Anders Carlsson 09a3774cd3 Packed unions should be packed. Fixes an assert Daniel reported.
llvm-svn: 80808
2009-09-02 17:51:33 +00:00
Anders Carlsson d606de72ab More work towards zero-initializing structs that contain member pointers in constant expressions.
llvm-svn: 79805
2009-08-23 01:25:01 +00:00
Anders Carlsson beac2bef4d Remove the PaddingFields member from CGRecordLayout, it wasn't used anyway.
llvm-svn: 79799
2009-08-23 01:01:04 +00:00
Owen Anderson 41a750271b Update for LLVM API change.
llvm-svn: 78946
2009-08-13 21:57:51 +00:00
Anders Carlsson 28a5fa29f3 Take #pragma pack into account when laying out structs. Fixes rdar://problem/7095436.
llvm-svn: 78490
2009-08-08 19:38:24 +00:00
Anders Carlsson 68e0b68289 Introduce a new PragmaPack attribute, and use it for #pragma pack. The PackedAttr now only represents __attribute__((packed)).
This is necessary because #pragma pack and __attribute__((packed)) have different semantics. No functionality change yet, but this lays the groundwork for fixing a record layout bug.

llvm-svn: 78483
2009-08-08 18:23:56 +00:00
Anders Carlsson 453878bed4 Assert that the LLVM type has the same size as the RecordDecl size.
llvm-svn: 78481
2009-08-08 18:01:57 +00:00
Owen Anderson 758428f4e3 Update for LLVM API change.
llvm-svn: 78259
2009-08-05 23:18:46 +00:00
Anders Carlsson 19702bb054 Simplify alignment handling in the record builder.
llvm-svn: 78069
2009-08-04 16:29:15 +00:00
Fariborz Jahanian 7be1ad814b No longer need to keep base class offsets in the offset
table as it has its own place now.

llvm-svn: 77491
2009-07-29 18:50:06 +00:00
Anders Carlsson d5d6413aa5 More CGRecordLayoutBuilder cleanup.
llvm-svn: 77335
2009-07-28 17:56:36 +00:00
Fariborz Jahanian 7b2b1ec6b1 Some minor changes toward support of data
member access in the presense of non-virtual bases.

llvm-svn: 77246
2009-07-27 20:57:45 +00:00
Anders Carlsson 72fb384a65 Enable the new struct type builder now that the constant struct builder works. (The old code will still be there until we know that everything works well.
llvm-svn: 77190
2009-07-27 15:31:55 +00:00
Anders Carlsson b97a3ec4e7 Fix a tail padding bug in the record layout builder code. The bug was found by an existing test.
llvm-svn: 77189
2009-07-27 14:55:54 +00:00
Anders Carlsson e1d5ca583f Check in a half finished new constant struct builder (Obviously not used yet).
llvm-svn: 76969
2009-07-24 15:20:52 +00:00
Anders Carlsson 6e853bf2b7 Get rid of the size parameter to AppendField. No functionality change.
llvm-svn: 76931
2009-07-24 02:45:50 +00:00
Anders Carlsson 085395426c Don't just store the field/bit field info one field, do it for all fields in the union.
llvm-svn: 76907
2009-07-23 22:52:34 +00:00
Anders Carlsson e2accf4404 Fix another thinko.
llvm-svn: 76903
2009-07-23 21:52:03 +00:00
Anders Carlsson 516e5e7835 Correct a thinko in bitfield layout code. Fixes PR4611.
llvm-svn: 76898
2009-07-23 21:16:33 +00:00
Anders Carlsson d78fc89fcb We don't need to keep track of the packed alignment, just whether the struct is packed or not. Fixes PR4610.
llvm-svn: 76884
2009-07-23 17:24:40 +00:00
Anders Carlsson 8af896c10a Move the LLVM field number for bit fields into the BitFieldInfo structure, since it's meaning is completely different than for non-bit fields.
llvm-svn: 76882
2009-07-23 17:01:21 +00:00
Anders Carlsson f55922b8b8 Set field info for unions.
llvm-svn: 76856
2009-07-23 04:59:05 +00:00
Anders Carlsson f814ee6003 Handle zero width bit fields in unions correctly (by ignoring them).
llvm-svn: 76847
2009-07-23 04:00:39 +00:00
Anders Carlsson 697f65943d Implement union layout support.
llvm-svn: 76846
2009-07-23 03:43:54 +00:00
Anders Carlsson 307846fe67 Check in CGRecordLayoutBuilder which is a reimplementation of the record layout code. (Yay, no more packed structs unless absolutely necessary). We currently don't use the layouts being built but that will change when the new code is mature enough :)
llvm-svn: 76845
2009-07-23 03:17:50 +00:00