271c36811d 
								
							 
						 
						
							
							
								
								Fix delegating constructors stylistic issues.  
							
							... 
							
							
							
							Material bugfixes to come this afternoon.
llvm-svn: 130782 
							
						 
						
							2011-05-03 20:19:28 +00:00  
				
					
						
							
							
								 
						
							
								f4258eb484 
								
							 
						 
						
							
							
								
								Switch CallArgList from an std::pair to a new CallArg struct (which will eventually gain more members). Working towards modifying call emission to avoid unnecessary copies.  
							
							... 
							
							
							
							llvm-svn: 130700 
							
						 
						
							2011-05-02 18:05:27 +00:00  
				
					
						
							
							
								 
						
							
								43dca6a8d2 
								
							 
						 
						
							
							
								
								Simplify code a bit by using CallArgList::add.  No intended functionality change.  
							
							... 
							
							
							
							llvm-svn: 130699 
							
						 
						
							2011-05-02 17:57:46 +00:00  
				
					
						
							
							
								 
						
							
								61bc173784 
								
							 
						 
						
							
							
								
								Fully implement delegating constructors!  
							
							... 
							
							
							
							As far as I know, this implementation is complete but might be missing a
few optimizations. Exceptions and virtual bases are handled correctly.
Because I'm an optimist, the web page has appropriately been updated. If
I'm wrong, feel free to downgrade its support categories.
llvm-svn: 130642 
							
						 
						
							2011-05-01 07:04:31 +00:00  
				
					
						
							
							
								 
						
							
								03535265ef 
								
							 
						 
						
							
							
								
								Cut down unnecessary zero'ing when value-initializing arrays of C++ objects.  
							
							... 
							
							
							
							-C++ objects with user-declared constructor don't need zero'ing.
-We can zero-initialize arrays of C++ objects in "bulk" now, in which case don't zero-initialize each object again.
llvm-svn: 130453 
							
						 
						
							2011-04-28 22:57:55 +00:00  
				
					
						
							
							
								 
						
							
								0009fcc39e 
								
							 
						 
						
							
							
								
								Make yet another placeholder type, this one marking that an expression is a bound  
							
							... 
							
							
							
							member function, i.e. something of the form 'x.f' where 'f' is a non-static
member function.  Diagnose this in the general case.  Some of the new diagnostics
are probably worse than the old ones, but we now get this right much more
universally, and there's certainly room for improvement in the diagnostics.
llvm-svn: 130239 
							
						 
						
							2011-04-26 20:42:42 +00:00  
				
					
						
							
							
								 
						
							
								940f02d248 
								
							 
						 
						
							
							
								
								Clean up code generation of typeid expressions and add C++ standard references.  
							
							... 
							
							
							
							llvm-svn: 129682 
							
						 
						
							2011-04-18 00:57:03 +00:00  
				
					
						
							
							
								 
						
							
								bbe277c4a9 
								
							 
						 
						
							
							
								
								Use EmitCallOrInvoke in EmitBadTypeidCall and EmitBadCastCall.  
							
							... 
							
							
							
							llvm-svn: 129424 
							
						 
						
							2011-04-13 02:35:36 +00:00  
				
					
						
							
							
								 
						
							
								0c63350b0b 
								
							 
						 
						
							
							
								
								If there's an invoke destination, we should use invoke instead of call when calling the __cxa_bad_typeid function. Fixes PR7400.  
							
							... 
							
							
							
							llvm-svn: 129273 
							
						 
						
							2011-04-11 14:13:40 +00:00  
				
					
						
							
							
								 
						
							
								2d2e870745 
								
							 
						 
						
							
							
								
								More __unknown_anytype work.  
							
							... 
							
							
							
							llvm-svn: 129269 
							
						 
						
							2011-04-11 07:02:50 +00:00  
				
					
						
							
							
								 
						
							
								c1c9971cab 
								
							 
						 
						
							
							
								
								When we know that a dynamic_cast always returns null, we can make  
							
							... 
							
							
							
							CodeGenFunction::EmitDynamicCast always return null or throw a bad_cast 
exception.
llvm-svn: 129264 
							
						 
						
							2011-04-11 01:45:29 +00:00  
				
					
						
							
							
								 
						
							
								882d790f72 
								
							 
						 
						
							
							
								
								Clean up CodeGenFunction::EmitDynamicCast. No functionality change.  
							
							... 
							
							
							
							llvm-svn: 129262 
							
						 
						
							2011-04-11 00:46:40 +00:00  
				
					
						
							
							
								 
						
							
								98981b10c8 
								
							 
						 
						
							
							
								
								Replace a couple of Builder.CreateICmpEQ with Builder.CreateIsNull. No functionality change.  
							
							... 
							
							
							
							llvm-svn: 129261 
							
						 
						
							2011-04-11 00:30:07 +00:00  
				
					
						
							
							
								 
						
							
								c53d9e8350 
								
							 
						 
						
							
							
								
								Strip off parens and no-op casts when deciding if an expr can be devirtualized. Fixes the second half of PR9660.  
							
							... 
							
							
							
							llvm-svn: 129253 
							
						 
						
							2011-04-10 18:20:53 +00:00  
				
					
						
							
							
								 
						
							
								db42a3e876 
								
							 
						 
						
							
							
								
								Make sure we or together the overflow flags of the multiply and add, so the  
							
							... 
							
							
							
							check is triggered appropriately.  Reported on cfe-dev.
llvm-svn: 129231 
							
						 
						
							2011-04-09 19:54:33 +00:00  
				
					
						
							
							
								 
						
							
								20c0f02cc5 
								
							 
						 
						
							
							
								
								Remove PHINode::reserveOperandSpace(). Instead, add a parameter to  
							
							... 
							
							
							
							PHINode::Create() giving the (known or expected) number of operands.
llvm-svn: 128538 
							
						 
						
							2011-03-30 11:28:58 +00:00  
				
					
						
							
							
								 
						
							
								31ad754c96 
								
							 
						 
						
							
							
								
								Instead of storing an ASTContext* in FunctionProtoTypes with computed noexcept specifiers, unique FunctionProtoTypes with a ContextualFoldingSet, as suggested by John McCall.  
							
							... 
							
							
							
							llvm-svn: 127568 
							
						 
						
							2011-03-13 17:09:40 +00:00  
				
					
						
							
							
								 
						
							
								fa453cfdc3 
								
							 
						 
						
							
							
								
								Propagate the new exception information to FunctionProtoType.  
							
							... 
							
							
							
							Change the interface to expose the new information and deal with the enormous fallout.
Introduce the new ExceptionSpecificationType value EST_DynamicNone to more easily deal with empty throw specifications.
Update the tests for noexcept and fix the various bugs uncovered, such as lack of tentative parsing support.
llvm-svn: 127537 
							
						 
						
							2011-03-12 11:50:43 +00:00  
				
					
						
							
							
								 
						
							
								32ea969415 
								
							 
						 
						
							
							
								
								Use a slightly more semantic interface for emitting call arguments.  
							
							... 
							
							
							
							llvm-svn: 127494 
							
						 
						
							2011-03-11 20:59:21 +00:00  
				
					
						
							
							
								 
						
							
								75f9498a7c 
								
							 
						 
						
							
							
								
								The conditional needs to be pushed before the branch.  Make the test less  
							
							... 
							
							
							
							trivial to check this.  Adjust for style.
llvm-svn: 127151 
							
						 
						
							2011-03-07 03:12:35 +00:00  
				
					
						
							
							
								 
						
							
								f7dcf320a7 
								
							 
						 
						
							
							
								
								An operator new with an empty exception specifier returns null on a bad  
							
							... 
							
							
							
							allocation and therefore requires a null-check.  We were doing that, but
we weren't treating the new-initializer as being conditionally executed,
which means it was possible to get ill-formed IR as in PR9298.
llvm-svn: 127147 
							
						 
						
							2011-03-07 01:52:56 +00:00  
				
					
						
							
							
								 
						
							
								99cc30c371 
								
							 
						 
						
							
							
								
								Revert "Add CC_Win64ThisCall and set it in the necessary places."  
							
							... 
							
							
							
							This reverts commit 126863.
llvm-svn: 126886 
							
						 
						
							2011-03-02 21:36:49 +00:00  
				
					
						
							
							
								 
						
							
								454464b491 
								
							 
						 
						
							
							
								
								Add CC_Win64ThisCall and set it in the necessary places.  
							
							... 
							
							
							
							llvm-svn: 126863 
							
						 
						
							2011-03-02 19:36:23 +00:00  
				
					
						
							
							
								 
						
							
								ad7c5c1657 
								
							 
						 
						
							
							
								
								Reorganize CodeGen{Function,Module} to eliminate the unfortunate  
							
							... 
							
							
							
							Block{Function,Module} base class.  Minor other refactorings.
Fixed a few address-space bugs while I was there.
llvm-svn: 125085 
							
						 
						
							2011-02-08 08:22:06 +00:00  
				
					
						
							
							
								 
						
							
								7f6f81ba9b 
								
							 
						 
						
							
							
								
								Clean up of -fapple-kext abi code. No change otherwise.  
							
							... 
							
							
							
							llvm-svn: 124807 
							
						 
						
							2011-02-03 19:27:17 +00:00  
				
					
						
							
							
								 
						
							
								265c325ef3 
								
							 
						 
						
							
							
								
								-fapple-kext support for indirect call to virtuals dtors - wip.  
							
							... 
							
							
							
							llvm-svn: 124701 
							
						 
						
							2011-02-01 23:22:34 +00:00  
				
					
						
							
							
								 
						
							
								6b3afd7df1 
								
							 
						 
						
							
							
								
								When trying to get the most derived class, don't assume that we can ignore all casts. We can only ignore derived-to-base and no-op casts. Fixes selfhost.  
							
							... 
							
							
							
							llvm-svn: 124528 
							
						 
						
							2011-01-29 05:04:11 +00:00  
				
					
						
							
							
								 
						
							
								1ae64c5a9d 
								
							 
						 
						
							
							
								
								When calling a virtual member function on a base class and the most derived class is marked 'final', we can devirtualize the call.  
							
							... 
							
							
							
							llvm-svn: 124524 
							
						 
						
							2011-01-29 03:52:01 +00:00  
				
					
						
							
							
								 
						
							
								9f9438b314 
								
							 
						 
						
							
							
								
								More work to support -fapple-kext regarding  
							
							... 
							
							
							
							indirect vf calls and addition of extra entry
at bottom of vtbls.
llvm-svn: 124507 
							
						 
						
							2011-01-28 23:42:29 +00:00  
				
					
						
							
							
								 
						
							
								ed1ae86ac6 
								
							 
						 
						
							
							
								
								Move all the cleanups framework code into a single file.  
							
							... 
							
							
							
							Pure motion.
llvm-svn: 124484 
							
						 
						
							2011-01-28 11:13:47 +00:00  
				
					
						
							
							
								 
						
							
								cb5f77f046 
								
							 
						 
						
							
							
								
								Reorganize the value-dominance metaprogram and introduce a specialization  
							
							... 
							
							
							
							for CodeGen's RValue type.
llvm-svn: 124483 
							
						 
						
							2011-01-28 10:53:53 +00:00  
				
					
						
							
							
								 
						
							
								e4df6c8d96 
								
							 
						 
						
							
							
								
								Convert the exception-freeing cleanup over to the conditional cleanups code,  
							
							... 
							
							
							
							fixing a crash which probably nobody was ever going to see.  In doing so,
fix a horrendous number of problems with the conditional-cleanups code.
Also, make conditional cleanups re-use the cleanup's activation variable,
which avoids some unfortunate repetitiveness.
llvm-svn: 124481 
							
						 
						
							2011-01-28 08:37:24 +00:00  
				
					
						
							
							
								 
						
							
								284c48fff6 
								
							 
						 
						
							
							
								
								Do a proper recursive lookup when deciding whether a class's usual  
							
							... 
							
							
							
							deallocation function has a two-argument form.  Store the result of this
check in new[] and delete[] nodes.
Fixes rdar://problem/8913519
llvm-svn: 124373 
							
						 
						
							2011-01-27 09:37:56 +00:00  
				
					
						
							
							
								 
						
							
								1eb95961d3 
								
							 
						 
						
							
							
								
								Use attributes for all the override control specifiers.  
							
							... 
							
							
							
							llvm-svn: 124122 
							
						 
						
							2011-01-24 16:26:15 +00:00  
				
					
						
							
							
								 
						
							
								19588aa40b 
								
							 
						 
						
							
							
								
								Get rid of the [[final]] C++0x attribute.  
							
							... 
							
							
							
							llvm-svn: 124083 
							
						 
						
							2011-01-23 21:07:30 +00:00  
				
					
						
							
							
								 
						
							
								252a47f635 
								
							 
						 
						
							
							
								
								Move cheking of kext into canDevirtualizeMemberFunctionCalls().  
							
							... 
							
							
							
							Improve on test case. Per Doug's comment. wip.
llvm-svn: 123954 
							
						 
						
							2011-01-21 01:04:41 +00:00  
				
					
						
							
							
								 
						
							
								47609b088c 
								
							 
						 
						
							
							
								
								apple kext abi requires all vf calls, including qualified  
							
							... 
							
							
							
							vf calls, be made indirect. This patch is towards that goal.
llvm-svn: 123922 
							
						 
						
							2011-01-20 17:19:02 +00:00  
				
					
						
							
							
								 
						
							
								705ba07ef0 
								
							 
						 
						
							
							
								
								Replace calls to getTypeSize() and getTypeAlign() with their 'InChars'  
							
							... 
							
							
							
							counterparts where char units are needed.
llvm-svn: 123805 
							
						 
						
							2011-01-19 01:58:38 +00:00  
				
					
						
							
							
								 
						
							
								6422579411 
								
							 
						 
						
							
							
								
								Add support for explicit constructor calls in Microsoft mode.  
							
							... 
							
							
							
							For example: 
class A{ 
public:
  A& operator=(const A& that) {
      if (this != &that) {
          this->A::~A();
          this->A::A(that);  // <=== explicit constructor call.
      }
      return *this;
  }
};
More work will be needed to support an explicit call to a template constructor.
llvm-svn: 123735 
							
						 
						
							2011-01-18 05:04:39 +00:00  
				
					
						
							
							
								 
						
							
								acc6b4e2fd 
								
							 
						 
						
							
							
								
								Simplify mem{cpy, move, set} creation with IRBuilder.  
							
							... 
							
							
							
							llvm-svn: 122634 
							
						 
						
							2010-12-30 00:13:21 +00:00  
				
					
						
							
							
								 
						
							
								6d4db0c885 
								
							 
						 
						
							
							
								
								PR5207: Change APInt methods trunc(), sext(), zext(), sextOrTrunc() and  
							
							... 
							
							
							
							zextOrTrunc(), and APSInt methods extend(), extOrTrunc() and new method
trunc(), to be const and to return a new value instead of modifying the
object in place.
llvm-svn: 121121 
							
						 
						
							2010-12-07 08:25:34 +00:00  
				
					
						
							
							
								 
						
							
								5d41378146 
								
							 
						 
						
							
							
								
								Rename CXXExprWithTemporaries -> ExprWithCleanups;  there's no theoretical  
							
							... 
							
							
							
							reason this is limited to C++, and it's certainly not limited to temporaries.
llvm-svn: 120996 
							
						 
						
							2010-12-06 08:20:24 +00:00  
				
					
						
							
							
								 
						
							
								e26a872b02 
								
							 
						 
						
							
							
								
								Remove some defensive calls to EmitLoadOfPropertyRefLValue that shouldn't  
							
							... 
							
							
							
							be required, and then fix up some missing loads on overloaded-operator
paths which that exposed.
llvm-svn: 120896 
							
						 
						
							2010-12-04 08:14:53 +00:00  
				
					
						
							
							
								 
						
							
								f3eb96fccf 
								
							 
						 
						
							
							
								
								Kill the KVC l-value kind and calculate the base expression when emitting  
							
							... 
							
							
							
							the l-value.
llvm-svn: 120884 
							
						 
						
							2010-12-04 02:32:38 +00:00  
				
					
						
							
							
								 
						
							
								50198098b9 
								
							 
						 
						
							
							
								
								IR Gen. part of API support for __block cxx  
							
							... 
							
							
							
							objects imported into blocks. //rdar://8594790.
Will have a test case coming (as well as one
sent to llvm test suite).
llvm-svn: 120713 
							
						 
						
							2010-12-02 17:02:11 +00:00  
				
					
						
							
							
								 
						
							
								99da11cf04 
								
							 
						 
						
							
							
								
								Silence an unused variable warning during release builds by folding the  
							
							... 
							
							
							
							expression into the assert.
llvm-svn: 119143 
							
						 
						
							2010-11-15 13:54:43 +00:00  
				
					
						
							
							
								 
						
							
								e988bdac44 
								
							 
						 
						
							
							
								
								Block API patch to do copy ctor of copied-in cxx objects in  
							
							... 
							
							
							
							copy helper function and dtor of copied cxx objects
in dispose helper functions. __block variables
TBD next.
llvm-svn: 119011 
							
						 
						
							2010-11-13 21:53:34 +00:00  
				
					
						
							
							
								 
						
							
								b00c2144b3 
								
							 
						 
						
							
							
								
								Also devirtualize calls to a member functions where the containing class has been marked final.  
							
							... 
							
							
							
							llvm-svn: 117445 
							
						 
						
							2010-10-27 13:34:43 +00:00  
				
					
						
							
							
								 
						
							
								a7911fa3d7 
								
							 
						 
						
							
							
								
								If a virtual member function has the 'final' attribute, we can devirtualize calls to it.  
							
							... 
							
							
							
							llvm-svn: 117444 
							
						 
						
							2010-10-27 13:28:46 +00:00  
				
					
						
							
							
								 
						
							
								8fc50c296a 
								
							 
						 
						
							
							
								
								Factor out the code for emitting code to load vtable pointer members  
							
							... 
							
							
							
							so that it's done in one place.
llvm-svn: 117386 
							
						 
						
							2010-10-26 18:44:08 +00:00