aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGClass.cpp
AgeCommit message (Collapse)Author
2010-04-25Revert enough of my patches to fix self-host again :(Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102289 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Cleanup SynthesizeCXXCopyConstructor.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102286 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Clean up SynthesizeCXXCopyAssignment a little.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102285 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24RenameGetAddressOfBaseOfCompleteClass to ↵Anders Carlsson
GetAddressOfDirectBaseInCompleteClass to reflect that it only handles direct bases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102284 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24More cleanup.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102282 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Simplify EmitClassMemberwiseCopy now that it's only used for fields.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102281 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24DefineImplicitCopyConstructor now uses SetBaseOrMemberInitializers to create ↵Anders Carlsson
implicit base initializers. (Member initializers are still handled by CodeGenFunction::SynthesizeCXXCopyConstructor for now). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102279 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Rename GetAddressOfBaseClass to OldGetAddressOfBaseClass.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102275 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Get rid of the old GetNonVirtualBaseClassOffset and change all call sites to ↵Anders Carlsson
use the new version. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102274 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Change CodeGenFunction::GetAddressOfDerivedClass to take a BasePath.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102273 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Convert more call sites over to the new GetAddressOfBaseClass.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102272 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-24Add a new GetAddressOfBaseClass overload that takes a base path and. Use it ↵Anders Carlsson
for derived-to-base casts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102270 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-21Comment out an assert for now.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102007 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-20Back out r101911 and see if it makes the bots happy.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101921 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-20Fix a bug which triggered the assertion I added yesterday. Basically, when ↵Anders Carlsson
we initialize the vtable pointer for a virtual base, and there was another path from the most derived class to another base with the same class type, we would use the wrong base. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101911 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-20Move code to apply a non-virtual and virtual offset out into a separate ↵Anders Carlsson
function. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101909 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-20Pass the nearest virtual base decl to InitializeVTablePointers. No ↵Anders Carlsson
functionality change right now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101872 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-20Assert that the path from the derived to the base class in ↵Anders Carlsson
CodeGenFunction::GetAddressOfBaseClass is not ambiguous. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101869 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-19Keep track of the actual storage specifier written on a variable orDouglas Gregor
function declaration, since it may end up being changed (e.g., "extern" can become "static" if a prior declaration was static). Patch by Enea Zaffanella and Paolo Bolzoni. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101826 91177308-0d34-0410-b5e6-96231b3b80d8
2010-04-12Have the CXXBaseOrMemberInitializer keep track of whether an initializer ↵Anders Carlsson
initializes a virtual base or not. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101004 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30the big refactoring bits of PR3782.Rafael Espindola
This introduces FunctionType::ExtInfo to hold the calling convention and the noreturn attribute. The next patch will extend it to include the regparm attribute and fix the bug. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99920 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30Remove the old vtable layout code.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99869 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30Use the new function in EmitClassAggrMemberwiseCopy, fixing the same assert ↵Anders Carlsson
as seen in PR6628 but for arrays this time. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99867 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30Factor emitting a call to a copy constructor out into a separate function.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99866 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30Introduce a CXXTemporariesCleanupScope RAII object and use it to cleanup the ↵Anders Carlsson
temporaries code. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99865 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-30Handle default arguments when calling copy constructors for bases or members ↵Anders Carlsson
when synthesizing a copy constructor. Fixes PR6628. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99864 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29Flip the switch to always get vtables from the VTT when necessary, I've ↵Anders Carlsson
verified that clang bootstraps with this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99800 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29Cleanup, no functionality change.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99798 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29Fix another thinko, so that flags don't depend on previous bases.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99791 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29When generating base ctors/dtors, we need to lookup virtual bases using the ↵Anders Carlsson
vtable. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99790 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-29Use construction vtables when needed. This is currently guarded by ↵Anders Carlsson
-fdump-vtable-layouts since it doesn't work 100% yet :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99787 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-28Reapply r99775 with a fix for a silly bug - we were setting the vtable ↵Anders Carlsson
pointer for all bases, even those without a vtable pointer :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99777 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-28Looks like I broke self-host again :(.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99776 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-28More improvements to setting the vtable pointer. We now no longer set the ↵Anders Carlsson
vtable pointer for non-virtual primary bases. We also do a pre-order traversal of the class hierarchy; this is necessary in order to get the right vbase offset offsets in base ctors/dtors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99775 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-28Factor vtable pointer setting code out into a separate function.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99773 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-26Revert r99612 and see if it fixes self-host.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99614 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-26Don't initialize virtual pointers for primary bases, they've already been ↵Anders Carlsson
initialized. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99612 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-26Simplify InitializeVtablePtrs in preparation of making it work with ↵Anders Carlsson
construction vtables. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99609 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-24Use getNamedGlobal instead of getGlobalVariable. (Fixes self-host).Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99385 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-24More vtable work; preparations for moving over to the new vtable layout code ↵Anders Carlsson
(finally). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99381 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-23Rename CGVtableInfo to CodeGenVTables in preparation of adding another ↵Anders Carlsson
VTableInfo class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99250 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-11Rename getVirtualBaseOffsetIndex to getVirtualBaseOffsetOffset to reflect ↵Anders Carlsson
what it actually does. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98248 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-23Perform two more constructor/destructor code-size optimizations:John McCall
1) emit base destructors as aliases to their unique base class destructors under some careful conditions. This is enabled for the same targets that can support complete-to-base aliases, i.e. not darwin. 2) Emit non-variadic complete constructors for classes with no virtual bases as calls to the base constructor. This is enabled on all targets and in theory can trigger in situations that the alias optimization can't (mostly involving virtual bases, mostly not yet supported). These are bundled together because I didn't think it worthwhile to split them, not because they really need to be. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96842 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-19More refactoring around constructor/destructor code generation.John McCall
Fix some bugs with function-try-blocks and simplify normal try-block code generation. This implementation excludes a deleting destructor's call to operator delete() from the function-try-block, which I believe is correct but which I can't find straightforward support for at a moment's glance. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96670 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18Make deleting and complete dtor variants defer to other dtor variants byJohn McCall
calling them as subroutines. This triggers whenever the alias optimization doesn't, i.e. when the dtor has linkonce linkage or there are virtual bases or it's the deleting dtor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96605 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-18Extract out function-body code generation into its own method. No functionalityJohn McCall
change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96564 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16IRgen optimization: cache the value of 'this' and 'vtt' instead ofJohn McCall
repeatedly reloading from an alloca. We still need to create the alloca for debug info purposes (although we currently create it in all cases because of some abstraction boundaries that're hard to break down). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96403 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16When emitting complete destructors for classes with virtual bases, computeJohn McCall
the offset to the virtual bases statically inside of relying on the virtual base offsets in the object's vtable(s). This is both more efficient and sound against the destructor's manipulation of the vtables. Also extract a few helper routines. Oh and we seem to pass all tests with an optimized clang now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96327 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-07Make sure to set vtable pointers in the destructors as well.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95525 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-06Call destructors for constructed bases as well.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95502 91177308-0d34-0410-b5e6-96231b3b80d8