Commit Graph

248 Commits

Author SHA1 Message Date
Anders Carlsson 9f19aaaa3a Move ComputeThisAdjustmentBaseOffset to VtableBuilder.
llvm-svn: 97340
2010-02-27 19:57:44 +00:00
Anders Carlsson b26c2abac7 Make sure to insert the primary base in the set :)
llvm-svn: 97339
2010-02-27 19:51:04 +00:00
Anders Carlsson e02a926a1c Use the real base offset when calculating vbase offsets.
llvm-svn: 97338
2010-02-27 19:21:58 +00:00
Anders Carlsson 4d0729a7cc Figured out why the test was failing, this will hopefully fix it.
llvm-svn: 97336
2010-02-27 19:00:53 +00:00
Anders Carlsson 2b381bbb5c Don't add this adjustments for pure virtual member functions.
llvm-svn: 97334
2010-02-27 18:16:50 +00:00
Anders Carlsson 01d3c7da60 We want to store method info for unused functions.
llvm-svn: 97333
2010-02-27 18:09:40 +00:00
Anders Carlsson 4068798cbc Finish up the changes to this adjustments.
llvm-svn: 97328
2010-02-27 16:52:49 +00:00
Anders Carlsson d46ed89d79 Stub out more of the 'this' pointer adjustment fixes I've been planning. Start using a set vector for primary bases so they will be ordered.
llvm-svn: 97326
2010-02-27 16:18:19 +00:00
Anders Carlsson d2025417ef Fix another vtable layout bug; we weren't looking hard enough for overriden functions when determining if an overrider will ever be used.
llvm-svn: 97306
2010-02-27 06:38:03 +00:00
Anders Carlsson d69b2f93ea Handle vcall offset sharing between destructors.
llvm-svn: 97304
2010-02-27 04:12:52 +00:00
Anders Carlsson b08aaa3e10 Fix a bug where we were generating an unnecessary vtable for a virtual base that's already a primary virtual base.
llvm-svn: 97303
2010-02-27 04:05:52 +00:00
John McCall 43c6ffbeec Sundry fixes to the new vtable builder.
llvm-svn: 97258
2010-02-26 20:22:44 +00:00
Anders Carlsson 9e3b3a3bbe Improve vcall offset handling.
llvm-svn: 97174
2010-02-25 22:23:13 +00:00
Anders Carlsson ed7d0e8be8 Fux a bug where we were trying to add overriders for non-virtual bases of virtual bases more than once.
llvm-svn: 97173
2010-02-25 22:18:35 +00:00
Anders Carlsson 01bbef516e Remove dead code.
llvm-svn: 97109
2010-02-25 03:57:50 +00:00
Anders Carlsson 422f778ba1 Move the vcall and vbase offset layout code out into its own class.
llvm-svn: 97107
2010-02-25 03:45:56 +00:00
Anders Carlsson 3c1ec97a28 Get rid of 'this' adjustments from the FinalOverriders class since they can be different for the same overrider in different parts of the vtable.
llvm-svn: 97068
2010-02-24 22:32:18 +00:00
Anders Carlsson d8d698da60 Improve this adjustment pointer calculation.
llvm-svn: 97067
2010-02-24 22:27:12 +00:00
Anders Carlsson 8025e7b1b9 Make ComputeThisAdjustmentBaseOffset public for now.
llvm-svn: 97066
2010-02-24 22:18:01 +00:00
Anders Carlsson a9f633b060 Generate correct vcall offsets when we have a primary virtual base that is not a primary base in the complete class hierarchy.
llvm-svn: 97039
2010-02-24 16:43:12 +00:00
Anders Carlsson 8939e400b6 Implement IsOverriderUsed. This can't be tested yet due to some other bugs :)
llvm-svn: 96897
2010-02-23 06:34:44 +00:00
Anders Carlsson a8796c692c Stub out IsOverriderUsed.
llvm-svn: 96883
2010-02-23 04:26:39 +00:00
Anders Carlsson 0570f71255 More fixes. Don't try to emit a virtual base vtable if the virtual base in question is a primary virtual base of some other base.
llvm-svn: 96881
2010-02-23 03:48:14 +00:00
Anders Carlsson bae46277fe Always emit vcall offset for the primary base, not only if it's virtual. Remove a debug printf, and add the test case that now passes.
llvm-svn: 96880
2010-02-23 03:26:17 +00:00
Anders Carlsson 510d22d097 Simplify the vcall offset calculation and make it give the correct answers :) My test case now has the right values but in the wrong order.
llvm-svn: 96877
2010-02-23 03:14:49 +00:00
Anders Carlsson 30f5301e54 More work on vcall offsets. We now emit the right number of vcall offsets in my local test case, but not the right values.
llvm-svn: 96874
2010-02-23 02:47:31 +00:00
Anders Carlsson 075056a8f9 Move BaseOffset out of the FinalOverriders class.
llvm-svn: 96853
2010-02-23 01:34:28 +00:00
Douglas Gregor f4f2e0247f Change the name of the vtable-debugging environment variable to
CLANG_VTABLE_DEBUG.

llvm-svn: 96785
2010-02-22 16:48:26 +00:00
Douglas Gregor 76eb74a1cd Don't use NamedDecl::getNameAsCString() when dealing with C++ methods,
since they may not have normal identifiers for names. Fixes PR6369.

llvm-svn: 96784
2010-02-22 16:44:27 +00:00
Anders Carlsson 350b56eed5 Add the CK_UnusedFunctionPointer component kind for unused function pointers.
llvm-svn: 96695
2010-02-19 20:08:13 +00:00
Anders Carlsson 2d3d903872 Dump this-adjustments for destructors as well.
llvm-svn: 96660
2010-02-19 06:03:53 +00:00
Anders Carlsson f8b53536ed Attempt to fix the 32-bit test failures.
llvm-svn: 96595
2010-02-18 18:20:49 +00:00
Anders Carlsson e5faca7cda Fix another bug and add another class.
llvm-svn: 96590
2010-02-18 17:32:33 +00:00
Anders Carlsson 8847d9e40a More work on vcall offsets.
llvm-svn: 96587
2010-02-18 17:26:40 +00:00
Anders Carlsson 78277c7705 Start stubbing out vcall offset handling.
llvm-svn: 96585
2010-02-18 17:00:09 +00:00
Anders Carlsson 5a7654a9d8 Store the base offset of the final overrider in the OverriderInfo struct, to be used for vcall offsets.
llvm-svn: 96582
2010-02-18 16:29:24 +00:00
Anders Carlsson c8316a2e08 Remove some dead code.
llvm-svn: 96581
2010-02-18 16:24:20 +00:00
Chris Lattner d2408f78a5 silence warning in a cleaner way
llvm-svn: 96520
2010-02-17 21:42:34 +00:00
Anders Carlsson 231461f88f Make FinalOverriders handle virtual bases correctly. Unfortunately this can't be tested just yet.
llvm-svn: 96481
2010-02-17 17:48:25 +00:00
Anders Carlsson d2fd302726 Handle primary bases in AddVCallOffsets.
llvm-svn: 96461
2010-02-17 06:30:02 +00:00
Chandler Carruth c20a9586c4 Silence GCC warning by marking an assert-only variable as unused.
llvm-svn: 96459
2010-02-17 06:24:18 +00:00
Anders Carlsson b0a588f038 First cut at emitting vcall offsets.
llvm-svn: 96455
2010-02-17 06:07:19 +00:00
Anders Carlsson db042200c0 Pass through whether a base is virtual or not.
llvm-svn: 96449
2010-02-17 03:11:55 +00:00
Anders Carlsson 03db9e9cd3 Correctly calculate base offsets for 'this' pointer adjustments involving virtual bases. This can't be tested yet due to lack of vcall offsets :)
llvm-svn: 96441
2010-02-17 02:05:23 +00:00
Anders Carlsson 13f0f66223 Handle layout of vtables for virtual bases.
llvm-svn: 96355
2010-02-16 16:49:35 +00:00
Anders Carlsson b716a543c9 Move some code around in preparation for virtual base vtables.
llvm-svn: 96354
2010-02-16 16:26:28 +00:00
Anders Carlsson 14157939ab Fix a bug where we would not emit secondary vtables for bases of a primary base.
llvm-svn: 96351
2010-02-16 16:02:57 +00:00
Anders Carlsson 77904f1d5b Emit vbase offsets.
llvm-svn: 96329
2010-02-16 04:59:55 +00:00
Anders Carlsson dc2dba306c More work on the new layout code.
llvm-svn: 96328
2010-02-16 04:49:44 +00:00
Anders Carlsson 033d48697f Don't compute final overriders or build vtables for bases that don't need a vtable.
llvm-svn: 96171
2010-02-14 17:05:59 +00:00