aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGClass.cpp
AgeCommit message (Collapse)Author
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
2010-02-06If a constructor throws an exception we need to execute the destructors for ↵Anders Carlsson
all fully constructed members. Fixes ctor_dtor_count.cpp in the test suite. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95501 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-06Remove unused variable.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95476 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-06Rearrange some checks to avoid call to isCopyConstructor() and clarify pathJohn McCall
taken for non-trivial constructors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95457 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-05Standardize the parsing of function type attributes in a way thatJohn McCall
follows (as conservatively as possible) gcc's current behavior: attributes written on return types that don't apply there are applied to the function instead, etc. Only parse CC attributes as type attributes, not as decl attributes; don't accepet noreturn as a decl attribute on ValueDecls, either (it still needs to apply to other decls, like blocks). Consistently consume CC/noreturn information throughout codegen; enforce this by removing their default values in CodeGenTypes::getFunctionInfo(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95436 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-03Revert the new reference binding code; I came up with a way simpler solution ↵Anders Carlsson
for the reference binding bug that is preventing self-hosting. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95223 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-02Set the correct vtable pointers _before_ generating code for any member ↵Anders Carlsson
initializers. Fixes about ~2000 clang/LLVM tests in the clang-on-clang build. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@95116 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-31Simplify EmitMemberInitializer; no intended functionality change.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94965 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-31Rework base and member initialization in constructors, with severalDouglas Gregor
(necessarily simultaneous) changes: - CXXBaseOrMemberInitializer now contains only a single initializer rather than a set of initialiation arguments + a constructor. The single initializer covers all aspects of initialization, including constructor calls as necessary but also cleanup of temporaries created by the initializer (which we never handled before!). - Rework + simplify code generation for CXXBaseOrMemberInitializers, since we can now just emit the initializer as an initializer. - Switched base and member initialization over to the new initialization code (InitializationSequence), so that it - Improved diagnostics for the new initialization code when initializing bases and members, to match the diagnostics produced by the previous (special-purpose) code. - Simplify the representation of type-checked constructor initializers in templates; instead of keeping the fully-type-checked AST, which is rather hard to undo at template instantiation time, throw away the type-checked AST and store the raw expressions in the AST. This simplifies instantiation, but loses a little but of information in the AST. - When type-checking implicit base or member initializers within a dependent context, don't add the generated initializers into the AST, because they'll look like they were explicit. - Record in CXXConstructExpr when the constructor call is to initialize a base class, so that CodeGen does not have to infer it from context. This ensures that we call the right kind of constructor. There are also a few "opportunity" fixes here that were needed to not regress, for example: - Diagnose default-initialization of a const-qualified class that does not have a user-declared default constructor. We had this diagnostic specifically for bases and members, but missed it for variables. That's fixed now. - When defining the implicit constructors, destructor, and copy-assignment operator, set the CurContext to that constructor when we're defining the body. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94952 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-31When performing a derived-to-base cast that we know will not change the ↵Anders Carlsson
offset, we don't need to null check the input pointer. Fixes PR5965. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94942 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-31When doing a base-to-derived cast we don't need to null check the derived ↵Anders Carlsson
value if the class offset is 0. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94939 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-31Some class related cleanup.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94938 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-29Use EmitLValueForFieldInitialization when synthesizing the copy ctor as well.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94800 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-29Add a new EmitLValueForFieldInitialization that will be used for ↵Anders Carlsson
initializing fields (and reference type fields in particular). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94799 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-29Simplify EmitLValueForField - we can get whether the field is part of a ↵Anders Carlsson
union or not from the FieldDecl (through its DeclContext). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94798 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-15Fix a couple bugs in copy assignment operator synthesis.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93546 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-02Move address points to CGVtableInfo, no functionality change.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92420 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-02Correctly pass VTT parameters to constructors and destructors. The VTTs ↵Anders Carlsson
aren't yet used in the ctors/dtors, but that will follow. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92409 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-01Move a few more functions away from CGCXX and to CGClass and CGExprCXX.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92399 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-24Move a bunch of class related functions to CGClass.cpp, no functionality change.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92148 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-03Add CodeGenModule::ComputeThunkAdjustment, which Eli wrote.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90401 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-28Tests now pass with the assertion.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90026 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-28Add a much more thorough test of casts to virtual bases, and fixEli Friedman
GetCXXBaseClassOffset to actually pass the test. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90025 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-24Get rid of the ugly CGCXX names and replace them with CGClass, CGExprCXX and ↵Anders Carlsson
CGTemporaries. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89742 91177308-0d34-0410-b5e6-96231b3b80d8