summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGClass.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Implement "optimization" for lambda-to-block conversion which inlines the ↵Eli Friedman2012-03-011-2/+0
| | | | | | | | generated block literal for lambdas which are immediately converted to block pointer type. This simplifies the AST, avoids an unnecessary copy of the lambda and makes it much easier to avoid copying the result onto the heap. Note that this transformation has a substantial semantic effect outside of ARC: it gives the converted lambda lifetime semantics similar to a block literal. With ARC, the effect is much less obvious because the lifetime of blocks is already managed. llvm-svn: 151797
* Prefer bitcast+GEP over ptrtoint+sub+inttoptr: it's semantically equivalent ↵Eli Friedman2012-02-281-3/+3
| | | | | | here, and generally nicer to the optimizer. llvm-svn: 151659
* Ensure that we delete destructors in the right cases. Specifically:Richard Smith2012-02-261-0/+4
| | | | | | | | | | | | | | - variant members with nontrivial destructors make the containing class's destructor deleted - check for a virtual destructor after checking for overridden methods in the base class(es) - check for an inaccessible operator delete for a class with a virtual destructor. Do not try to call an anonymous union field's destructor from the destructor of the containing class. llvm-svn: 151483
* Work-in-progress for lambda conversion-to-block operator. Still need to ↵Eli Friedman2012-02-251-21/+62
| | | | | | implement the retain+autorelease outside of ARC, and there's a bug that causes the generated code to crash in ARC (which I think is unrelated to my code, although I'm not completely sure). llvm-svn: 151428
* Make heap-allocation of std::initializer_list 'work'.Sebastian Redl2012-02-191-1/+1
| | | | llvm-svn: 150931
* Make std::initializer_list member initializers 'work'.Sebastian Redl2012-02-191-31/+37
| | | | llvm-svn: 150930
* Whether an argument is required (in contrast with being anJohn McCall2012-02-171-11/+11
| | | | | | | | | | | | | | | | | | | | | optional argument passed through the variadic ellipsis) potentially affects how we need to lower it. Propagate this information down to the various getFunctionInfo(...) overloads on CodeGenTypes. Furthermore, rename those overloads to clarify their distinct purposes, and make sure we're calling the right one in the right place. This has a nice side-effect of making it easier to construct a function type, since the 'variadic' bit is no longer separable. This shouldn't really change anything for our existing platforms, with one minor exception --- we should now call variadic ObjC methods with the ... in the "right place" (see the test case), which I guess matters for anyone running GNUStep on MIPS. Mostly it's just a substantial clean-up. llvm-svn: 150788
* Rework the Sema/AST/IRgen dance for the lambda closure type'sDouglas Gregor2012-02-171-50/+9
| | | | | | | | | | | | | | | | | | | | conversion to function pointer. Rather than having IRgen synthesize the body of this function, we instead introduce a static member function "__invoke" with the same signature as the lambda's operator() in the AST. Sema then generates a body for the conversion to function pointer which simply returns the address of __invoke. This approach makes it easier to evaluate a call to the conversion function as a constant, makes the linkage of the __invoke function follow the normal rules for member functions, and may make life easier down the road if we ever want to constexpr'ify some of lambdas. Note that IR generation is responsible for filling in the body of __invoke (Sema just adds a dummy body), because the body can't generally be expressed in C++. Eli, please review! llvm-svn: 150783
* Initial implementation of IRGen for the lambda ↵Eli Friedman2012-02-161-1/+93
| | | | | | conversion-to-function-pointer operator. llvm-svn: 150660
* Start of IRGen for lambda conversion operators.Eli Friedman2012-02-161-0/+8
| | | | llvm-svn: 150649
* Implement IRGen of lambda expressions which capture arrays.Eli Friedman2012-02-141-28/+22
| | | | llvm-svn: 150452
* Refactor out new function EmitInitializerForField from ↵Eli Friedman2012-02-141-50/+69
| | | | | | EmitMemberInitializer. The new function will be used to initialize the fields of lambda expressions. llvm-svn: 150451
* simplify a bunch of code to use the well-known LLVM IR types computed by ↵Chris Lattner2012-02-071-3/+1
| | | | | | CodeGenModule. llvm-svn: 149943
* Fix comment.Eric Christopher2012-02-011-2/+2
| | | | llvm-svn: 149543
* Use function pointers, rather than references, to pass DestroyersPeter Collingbourne2012-01-261-2/+2
| | | | | | | around, in the process cleaning up the various gcc/msvc compiler workarounds. llvm-svn: 149036
* Switch LValue so that it exposes alignment in CharUnits. (No functional ↵Eli Friedman2011-12-031-1/+1
| | | | | | change.) llvm-svn: 145753
* Switch the Alignment argument on AggValueSlot over to CharUnits, per John's ↵Eli Friedman2011-12-031-3/+2
| | | | | | review comment. llvm-svn: 145741
* Track alignment in AggValueSlot. No functional change in this patch, but ↵Eli Friedman2011-12-031-15/+23
| | | | | | I'll be introducing uses of the specified alignment soon. llvm-svn: 145736
* Recommit:Eric Christopher2011-10-131-1/+1
| | | | | | | | | | | | | | | Start handling debug line and scope information better: Migrate most of the location setting within the larger API in CGDebugInfo and update a lot of callers. Remove the existing file/scope change machinery in UpdateLineDirectiveRegion and replace it with DILexicalBlockFile usage. Finishes off the rest of rdar://10246360 after fixing a few bugs that were exposed in gdb testsuite testing. llvm-svn: 141893
* Revert file/scope handling patches. gdb testing revealed a couple of bugs.Eric Christopher2011-10-121-1/+1
| | | | llvm-svn: 141796
* Removed extra line in comment.Jim Goodnow II2011-10-121-1/+0
| | | | llvm-svn: 141773
* Start handling debug line and scope information better:Eric Christopher2011-10-111-1/+1
| | | | | | | | | | | Migrate most of the location setting within the larger API in CGDebugInfo and update a lot of callers. Remove the existing file/scope change machinery in UpdateLineDirectiveRegion and replace it with DILexicalBlockFile usage. Finishes off the rest of rdar://10246360 llvm-svn: 141732
* Rename EmitStopPoint in CGDebugInfo to EmitLocation. "stop points" don'tEric Christopher2011-09-291-1/+1
| | | | | | exist anymore. llvm-svn: 140739
* Move all vtable layout data into new VTableLayout classPeter Collingbourne2011-09-261-1/+1
| | | | llvm-svn: 140506
* Move vtable component accessors to VTableContextPeter Collingbourne2011-09-261-1/+2
| | | | llvm-svn: 140504
* Create a VTableContext class and start moving CodeGenVTables methods to itPeter Collingbourne2011-09-261-1/+1
| | | | llvm-svn: 140502
* Only trigger the initialize-an-array-via-elementwise-copy/move codeDouglas Gregor2011-09-221-1/+2
| | | | | | | | generation when we're dealing with an implicitly-defined copy or move constructor. And, actually set the implicitly-defined bit for implicitly-defined constructors and destructors. Should fix self-host. llvm-svn: 140334
* Explicitly-defaulted copy/move constructors are not "implicit", butDouglas Gregor2011-09-221-2/+1
| | | | | | | they still need the logic to cope with array member initialization. Fixes PR10720. llvm-svn: 140302
* PR10304: Do not call destructors for data members from union destructors. ↵Richard Smith2011-09-181-0/+4
| | | | | | | | | Prior to C++11, this has no effect since any such destructors must be trivial, and in C++11 such destructors must not be called. llvm-svn: 139997
* Sorry, that assertion actually already exists.John McCall2011-09-151-2/+0
| | | | llvm-svn: 139770
* We don't generate null initializer expressions anymore, andJohn McCall2011-09-151-5/+3
| | | | | | we don't need to. llvm-svn: 139769
* Declare and define implicit move constructor and assignment operator.Sebastian Redl2011-08-301-4/+13
| | | | | | | | | This makes the code duplication of implicit special member handling even worse, but the cleanup will have to come later. For now, this works. Follow-up with tests for explicit defaulting and enabling the __has_feature flag to come. llvm-svn: 138821
* Track whether an AggValueSlot is potentially aliased, and do notJohn McCall2011-08-251-3/+6
| | | | | | | | | | emit call results into potentially aliased slots. This allows us to properly mark indirect return slots as noalias, at the cost of requiring an extra memcpy when assigning an aggregate call result into a l-value. It also brings us into compliance with the x86-64 ABI. llvm-svn: 138599
* Use stronger typing for the flags on AggValueSlot and requireJohn McCall2011-08-251-5/+11
| | | | | | | creators to tell us whether something needs GC barriers. No functionality change. llvm-svn: 138581
* Cleanup; no functionality change.Eli Friedman2011-08-091-4/+2
| | | | llvm-svn: 137126
* remove unneeded llvm:: namespace qualifiers on some core types now that ↵Chris Lattner2011-07-231-2/+2
| | | | | | | | LLVM.h imports them into the clang namespace. llvm-svn: 135852
* de-constify llvm::Type, patch by David Blaikie!Chris Lattner2011-07-181-13/+13
| | | | llvm-svn: 135370
* Arrays are permitted to be zero-length in some situations.John McCall2011-07-131-1/+27
| | | | llvm-svn: 135036
* Convert the standard default-construction loops to use phis andJohn McCall2011-07-131-72/+73
| | | | | | partial destruction. llvm-svn: 135033
* Aggressive dead code elimination.John McCall2011-07-131-72/+0
| | | | llvm-svn: 135029
* Generalize Cleanup::Emit's "isForEH" parameter into a setJohn McCall2011-07-121-7/+7
| | | | | | of flags. No functionality change. llvm-svn: 134997
* Switch field destruction over to use the new destroyer-based APIJohn McCall2011-07-121-68/+28
| | | | | | and kill a lot of redundant code. llvm-svn: 134988
* A number of array-related IR-gen cleanups.John McCall2011-07-091-0/+11
| | | | | | | | | | | | - Emit default-initialization of arrays that were partially initialized with initializer lists with a loop, rather than emitting the default initializer N times; - support destroying VLAs of non-trivial type, although this is not yet exposed to users; and - support the partial destruction of arrays initialized with initializer lists when an initializer throws an exception. llvm-svn: 134784
* LValue carries a type now, so simplify the main EmitLoad/Store APIsJohn McCall2011-06-251-1/+1
| | | | | | by removing the redundant type parameter. llvm-svn: 133860
* Restore correct use of GC barriers.John McCall2011-06-161-6/+3
| | | | llvm-svn: 133144
* Automatic Reference Counting.John McCall2011-06-151-37/+56
| | | | | | | | | | Language-design credit goes to a lot of people, but I particularly want to single out Blaine Garst and Patrick Beard for their contributions. Compiler implementation credit goes to Argyrios, Doug, Fariborz, and myself, in no particular order. llvm-svn: 133103
* Implement support for C++11 in-class initialization of non-static data members.Richard Smith2011-06-111-0/+1
| | | | llvm-svn: 132878
* Fix another regression from the "skip vtable pointer initialization"Anders Carlsson2011-05-161-1/+1
| | | | | | | optimization. Make sure to require a vtable when trying to get the address of a VTT, otherwise we would never end up emitting the VTT. llvm-svn: 131400
* Re-enable the fix for PR9181 now that all the edge cases are handled.Anders Carlsson2011-05-151-18/+70
| | | | llvm-svn: 131385
* Disable the optimization until the bug noticed by Sean Hunt has been fixed.Anders Carlsson2011-05-151-0/+4
| | | | llvm-svn: 131372
OpenPOWER on IntegriCloud