1 //===--- CGClass.cpp - Emit LLVM Code for C++ classes ---------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This contains code dealing with C++ code generation of classes 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "CGDebugInfo.h" 15 #include "CodeGenFunction.h" 16 #include "clang/AST/CXXInheritance.h" 17 #include "clang/AST/EvaluatedExprVisitor.h" 18 #include "clang/AST/RecordLayout.h" 19 #include "clang/AST/StmtCXX.h" 20 #include "clang/Frontend/CodeGenOptions.h" 21 22 using namespace clang; 23 using namespace CodeGen; 24 25 static CharUnits 26 ComputeNonVirtualBaseClassOffset(ASTContext &Context, 27 const CXXRecordDecl *DerivedClass, 28 CastExpr::path_const_iterator Start, 29 CastExpr::path_const_iterator End) { 30 CharUnits Offset = CharUnits::Zero(); 31 32 const CXXRecordDecl *RD = DerivedClass; 33 34 for (CastExpr::path_const_iterator I = Start; I != End; ++I) { 35 const CXXBaseSpecifier *Base = *I; 36 assert(!Base->isVirtual() && "Should not see virtual bases here!"); 37 38 // Get the layout. 39 const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD); 40 41 const CXXRecordDecl *BaseDecl = 42 cast<CXXRecordDecl>(Base->getType()->getAs<RecordType>()->getDecl()); 43 44 // Add the offset. 45 Offset += Layout.getBaseClassOffset(BaseDecl); 46 47 RD = BaseDecl; 48 } 49 50 return Offset; 51 } 52 53 llvm::Constant * 54 CodeGenModule::GetNonVirtualBaseClassOffset(const CXXRecordDecl *ClassDecl, 55 CastExpr::path_const_iterator PathBegin, 56 CastExpr::path_const_iterator PathEnd) { 57 assert(PathBegin != PathEnd && "Base path should not be empty!"); 58 59 CharUnits Offset = 60 ComputeNonVirtualBaseClassOffset(getContext(), ClassDecl, 61 PathBegin, PathEnd); 62 if (Offset.isZero()) 63 return 0; 64 65 const llvm::Type *PtrDiffTy = 66 Types.ConvertType(getContext().getPointerDiffType()); 67 68 return llvm::ConstantInt::get(PtrDiffTy, Offset.getQuantity()); 69 } 70 71 /// Gets the address of a direct base class within a complete object. 72 /// This should only be used for (1) non-virtual bases or (2) virtual bases 73 /// when the type is known to be complete (e.g. in complete destructors). 74 /// 75 /// The object pointed to by 'This' is assumed to be non-null. 76 llvm::Value * 77 CodeGenFunction::GetAddressOfDirectBaseInCompleteClass(llvm::Value *This, 78 const CXXRecordDecl *Derived, 79 const CXXRecordDecl *Base, 80 bool BaseIsVirtual) { 81 // 'this' must be a pointer (in some address space) to Derived. 82 assert(This->getType()->isPointerTy() && 83 cast<llvm::PointerType>(This->getType())->getElementType() 84 == ConvertType(Derived)); 85 86 // Compute the offset of the virtual base. 87 CharUnits Offset; 88 const ASTRecordLayout &Layout = getContext().getASTRecordLayout(Derived); 89 if (BaseIsVirtual) 90 Offset = Layout.getVBaseClassOffset(Base); 91 else 92 Offset = Layout.getBaseClassOffset(Base); 93 94 // Shift and cast down to the base type. 95 // TODO: for complete types, this should be possible with a GEP. 96 llvm::Value *V = This; 97 if (Offset.isPositive()) { 98 const llvm::Type *Int8PtrTy = llvm::Type::getInt8PtrTy(getLLVMContext()); 99 V = Builder.CreateBitCast(V, Int8PtrTy); 100 V = Builder.CreateConstInBoundsGEP1_64(V, Offset.getQuantity()); 101 } 102 V = Builder.CreateBitCast(V, ConvertType(Base)->getPointerTo()); 103 104 return V; 105 } 106 107 static llvm::Value * 108 ApplyNonVirtualAndVirtualOffset(CodeGenFunction &CGF, llvm::Value *ThisPtr, 109 CharUnits NonVirtual, llvm::Value *Virtual) { 110 const llvm::Type *PtrDiffTy = 111 CGF.ConvertType(CGF.getContext().getPointerDiffType()); 112 113 llvm::Value *NonVirtualOffset = 0; 114 if (!NonVirtual.isZero()) 115 NonVirtualOffset = llvm::ConstantInt::get(PtrDiffTy, 116 NonVirtual.getQuantity()); 117 118 llvm::Value *BaseOffset; 119 if (Virtual) { 120 if (NonVirtualOffset) 121 BaseOffset = CGF.Builder.CreateAdd(Virtual, NonVirtualOffset); 122 else 123 BaseOffset = Virtual; 124 } else 125 BaseOffset = NonVirtualOffset; 126 127 // Apply the base offset. 128 const llvm::Type *Int8PtrTy = llvm::Type::getInt8PtrTy(CGF.getLLVMContext()); 129 ThisPtr = CGF.Builder.CreateBitCast(ThisPtr, Int8PtrTy); 130 ThisPtr = CGF.Builder.CreateGEP(ThisPtr, BaseOffset, "add.ptr"); 131 132 return ThisPtr; 133 } 134 135 llvm::Value * 136 CodeGenFunction::GetAddressOfBaseClass(llvm::Value *Value, 137 const CXXRecordDecl *Derived, 138 CastExpr::path_const_iterator PathBegin, 139 CastExpr::path_const_iterator PathEnd, 140 bool NullCheckValue) { 141 assert(PathBegin != PathEnd && "Base path should not be empty!"); 142 143 CastExpr::path_const_iterator Start = PathBegin; 144 const CXXRecordDecl *VBase = 0; 145 146 // Get the virtual base. 147 if ((*Start)->isVirtual()) { 148 VBase = 149 cast<CXXRecordDecl>((*Start)->getType()->getAs<RecordType>()->getDecl()); 150 ++Start; 151 } 152 153 CharUnits NonVirtualOffset = 154 ComputeNonVirtualBaseClassOffset(getContext(), VBase ? VBase : Derived, 155 Start, PathEnd); 156 157 // Get the base pointer type. 158 const llvm::Type *BasePtrTy = 159 ConvertType((PathEnd[-1])->getType())->getPointerTo(); 160 161 if (NonVirtualOffset.isZero() && !VBase) { 162 // Just cast back. 163 return Builder.CreateBitCast(Value, BasePtrTy); 164 } 165 166 llvm::BasicBlock *CastNull = 0; 167 llvm::BasicBlock *CastNotNull = 0; 168 llvm::BasicBlock *CastEnd = 0; 169 170 if (NullCheckValue) { 171 CastNull = createBasicBlock("cast.null"); 172 CastNotNull = createBasicBlock("cast.notnull"); 173 CastEnd = createBasicBlock("cast.end"); 174 175 llvm::Value *IsNull = Builder.CreateIsNull(Value); 176 Builder.CreateCondBr(IsNull, CastNull, CastNotNull); 177 EmitBlock(CastNotNull); 178 } 179 180 llvm::Value *VirtualOffset = 0; 181 182 if (VBase) { 183 if (Derived->hasAttr<FinalAttr>()) { 184 VirtualOffset = 0; 185 186 const ASTRecordLayout &Layout = getContext().getASTRecordLayout(Derived); 187 188 CharUnits VBaseOffset = Layout.getVBaseClassOffset(VBase); 189 NonVirtualOffset += VBaseOffset; 190 } else 191 VirtualOffset = GetVirtualBaseClassOffset(Value, Derived, VBase); 192 } 193 194 // Apply the offsets. 195 Value = ApplyNonVirtualAndVirtualOffset(*this, Value, 196 NonVirtualOffset, 197 VirtualOffset); 198 199 // Cast back. 200 Value = Builder.CreateBitCast(Value, BasePtrTy); 201 202 if (NullCheckValue) { 203 Builder.CreateBr(CastEnd); 204 EmitBlock(CastNull); 205 Builder.CreateBr(CastEnd); 206 EmitBlock(CastEnd); 207 208 llvm::PHINode *PHI = Builder.CreatePHI(Value->getType(), 2); 209 PHI->addIncoming(Value, CastNotNull); 210 PHI->addIncoming(llvm::Constant::getNullValue(Value->getType()), 211 CastNull); 212 Value = PHI; 213 } 214 215 return Value; 216 } 217 218 llvm::Value * 219 CodeGenFunction::GetAddressOfDerivedClass(llvm::Value *Value, 220 const CXXRecordDecl *Derived, 221 CastExpr::path_const_iterator PathBegin, 222 CastExpr::path_const_iterator PathEnd, 223 bool NullCheckValue) { 224 assert(PathBegin != PathEnd && "Base path should not be empty!"); 225 226 QualType DerivedTy = 227 getContext().getCanonicalType(getContext().getTagDeclType(Derived)); 228 const llvm::Type *DerivedPtrTy = ConvertType(DerivedTy)->getPointerTo(); 229 230 llvm::Value *NonVirtualOffset = 231 CGM.GetNonVirtualBaseClassOffset(Derived, PathBegin, PathEnd); 232 233 if (!NonVirtualOffset) { 234 // No offset, we can just cast back. 235 return Builder.CreateBitCast(Value, DerivedPtrTy); 236 } 237 238 llvm::BasicBlock *CastNull = 0; 239 llvm::BasicBlock *CastNotNull = 0; 240 llvm::BasicBlock *CastEnd = 0; 241 242 if (NullCheckValue) { 243 CastNull = createBasicBlock("cast.null"); 244 CastNotNull = createBasicBlock("cast.notnull"); 245 CastEnd = createBasicBlock("cast.end"); 246 247 llvm::Value *IsNull = Builder.CreateIsNull(Value); 248 Builder.CreateCondBr(IsNull, CastNull, CastNotNull); 249 EmitBlock(CastNotNull); 250 } 251 252 // Apply the offset. 253 Value = Builder.CreatePtrToInt(Value, NonVirtualOffset->getType()); 254 Value = Builder.CreateSub(Value, NonVirtualOffset); 255 Value = Builder.CreateIntToPtr(Value, DerivedPtrTy); 256 257 // Just cast. 258 Value = Builder.CreateBitCast(Value, DerivedPtrTy); 259 260 if (NullCheckValue) { 261 Builder.CreateBr(CastEnd); 262 EmitBlock(CastNull); 263 Builder.CreateBr(CastEnd); 264 EmitBlock(CastEnd); 265 266 llvm::PHINode *PHI = Builder.CreatePHI(Value->getType(), 2); 267 PHI->addIncoming(Value, CastNotNull); 268 PHI->addIncoming(llvm::Constant::getNullValue(Value->getType()), 269 CastNull); 270 Value = PHI; 271 } 272 273 return Value; 274 } 275 276 /// GetVTTParameter - Return the VTT parameter that should be passed to a 277 /// base constructor/destructor with virtual bases. 278 static llvm::Value *GetVTTParameter(CodeGenFunction &CGF, GlobalDecl GD, 279 bool ForVirtualBase) { 280 if (!CodeGenVTables::needsVTTParameter(GD)) { 281 // This constructor/destructor does not need a VTT parameter. 282 return 0; 283 } 284 285 const CXXRecordDecl *RD = cast<CXXMethodDecl>(CGF.CurFuncDecl)->getParent(); 286 const CXXRecordDecl *Base = cast<CXXMethodDecl>(GD.getDecl())->getParent(); 287 288 llvm::Value *VTT; 289 290 uint64_t SubVTTIndex; 291 292 // If the record matches the base, this is the complete ctor/dtor 293 // variant calling the base variant in a class with virtual bases. 294 if (RD == Base) { 295 assert(!CodeGenVTables::needsVTTParameter(CGF.CurGD) && 296 "doing no-op VTT offset in base dtor/ctor?"); 297 assert(!ForVirtualBase && "Can't have same class as virtual base!"); 298 SubVTTIndex = 0; 299 } else { 300 const ASTRecordLayout &Layout = 301 CGF.getContext().getASTRecordLayout(RD); 302 CharUnits BaseOffset = ForVirtualBase ? 303 Layout.getVBaseClassOffset(Base) : 304 Layout.getBaseClassOffset(Base); 305 306 SubVTTIndex = 307 CGF.CGM.getVTables().getSubVTTIndex(RD, BaseSubobject(Base, BaseOffset)); 308 assert(SubVTTIndex != 0 && "Sub-VTT index must be greater than zero!"); 309 } 310 311 if (CodeGenVTables::needsVTTParameter(CGF.CurGD)) { 312 // A VTT parameter was passed to the constructor, use it. 313 VTT = CGF.LoadCXXVTT(); 314 VTT = CGF.Builder.CreateConstInBoundsGEP1_64(VTT, SubVTTIndex); 315 } else { 316 // We're the complete constructor, so get the VTT by name. 317 VTT = CGF.CGM.getVTables().GetAddrOfVTT(RD); 318 VTT = CGF.Builder.CreateConstInBoundsGEP2_64(VTT, 0, SubVTTIndex); 319 } 320 321 return VTT; 322 } 323 324 namespace { 325 /// Call the destructor for a direct base class. 326 struct CallBaseDtor : EHScopeStack::Cleanup { 327 const CXXRecordDecl *BaseClass; 328 bool BaseIsVirtual; 329 CallBaseDtor(const CXXRecordDecl *Base, bool BaseIsVirtual) 330 : BaseClass(Base), BaseIsVirtual(BaseIsVirtual) {} 331 332 void Emit(CodeGenFunction &CGF, bool IsForEH) { 333 const CXXRecordDecl *DerivedClass = 334 cast<CXXMethodDecl>(CGF.CurCodeDecl)->getParent(); 335 336 const CXXDestructorDecl *D = BaseClass->getDestructor(); 337 llvm::Value *Addr = 338 CGF.GetAddressOfDirectBaseInCompleteClass(CGF.LoadCXXThis(), 339 DerivedClass, BaseClass, 340 BaseIsVirtual); 341 CGF.EmitCXXDestructorCall(D, Dtor_Base, BaseIsVirtual, Addr); 342 } 343 }; 344 345 /// A visitor which checks whether an initializer uses 'this' in a 346 /// way which requires the vtable to be properly set. 347 struct DynamicThisUseChecker : EvaluatedExprVisitor<DynamicThisUseChecker> { 348 typedef EvaluatedExprVisitor<DynamicThisUseChecker> super; 349 350 bool UsesThis; 351 352 DynamicThisUseChecker(ASTContext &C) : super(C), UsesThis(false) {} 353 354 // Black-list all explicit and implicit references to 'this'. 355 // 356 // Do we need to worry about external references to 'this' derived 357 // from arbitrary code? If so, then anything which runs arbitrary 358 // external code might potentially access the vtable. 359 void VisitCXXThisExpr(CXXThisExpr *E) { UsesThis = true; } 360 }; 361 } 362 363 static bool BaseInitializerUsesThis(ASTContext &C, const Expr *Init) { 364 DynamicThisUseChecker Checker(C); 365 Checker.Visit(const_cast<Expr*>(Init)); 366 return Checker.UsesThis; 367 } 368 369 static void EmitBaseInitializer(CodeGenFunction &CGF, 370 const CXXRecordDecl *ClassDecl, 371 CXXCtorInitializer *BaseInit, 372 CXXCtorType CtorType) { 373 assert(BaseInit->isBaseInitializer() && 374 "Must have base initializer!"); 375 376 llvm::Value *ThisPtr = CGF.LoadCXXThis(); 377 378 const Type *BaseType = BaseInit->getBaseClass(); 379 CXXRecordDecl *BaseClassDecl = 380 cast<CXXRecordDecl>(BaseType->getAs<RecordType>()->getDecl()); 381 382 bool isBaseVirtual = BaseInit->isBaseVirtual(); 383 384 // The base constructor doesn't construct virtual bases. 385 if (CtorType == Ctor_Base && isBaseVirtual) 386 return; 387 388 // If the initializer for the base (other than the constructor 389 // itself) accesses 'this' in any way, we need to initialize the 390 // vtables. 391 if (BaseInitializerUsesThis(CGF.getContext(), BaseInit->getInit())) 392 CGF.InitializeVTablePointers(ClassDecl); 393 394 // We can pretend to be a complete class because it only matters for 395 // virtual bases, and we only do virtual bases for complete ctors. 396 llvm::Value *V = 397 CGF.GetAddressOfDirectBaseInCompleteClass(ThisPtr, ClassDecl, 398 BaseClassDecl, 399 isBaseVirtual); 400 401 AggValueSlot AggSlot = AggValueSlot::forAddr(V, false, /*Lifetime*/ true); 402 403 CGF.EmitAggExpr(BaseInit->getInit(), AggSlot); 404 405 if (CGF.CGM.getLangOptions().Exceptions && 406 !BaseClassDecl->hasTrivialDestructor()) 407 CGF.EHStack.pushCleanup<CallBaseDtor>(EHCleanup, BaseClassDecl, 408 isBaseVirtual); 409 } 410 411 static void EmitAggMemberInitializer(CodeGenFunction &CGF, 412 LValue LHS, 413 llvm::Value *ArrayIndexVar, 414 CXXCtorInitializer *MemberInit, 415 QualType T, 416 unsigned Index) { 417 if (Index == MemberInit->getNumArrayIndices()) { 418 CodeGenFunction::RunCleanupsScope Cleanups(CGF); 419 420 llvm::Value *Dest = LHS.getAddress(); 421 if (ArrayIndexVar) { 422 // If we have an array index variable, load it and use it as an offset. 423 // Then, increment the value. 424 llvm::Value *ArrayIndex = CGF.Builder.CreateLoad(ArrayIndexVar); 425 Dest = CGF.Builder.CreateInBoundsGEP(Dest, ArrayIndex, "destaddress"); 426 llvm::Value *Next = llvm::ConstantInt::get(ArrayIndex->getType(), 1); 427 Next = CGF.Builder.CreateAdd(ArrayIndex, Next, "inc"); 428 CGF.Builder.CreateStore(Next, ArrayIndexVar); 429 } 430 431 AggValueSlot Slot = AggValueSlot::forAddr(Dest, LHS.isVolatileQualified(), 432 /*Lifetime*/ true); 433 434 CGF.EmitAggExpr(MemberInit->getInit(), Slot); 435 436 return; 437 } 438 439 const ConstantArrayType *Array = CGF.getContext().getAsConstantArrayType(T); 440 assert(Array && "Array initialization without the array type?"); 441 llvm::Value *IndexVar 442 = CGF.GetAddrOfLocalVar(MemberInit->getArrayIndex(Index)); 443 assert(IndexVar && "Array index variable not loaded"); 444 445 // Initialize this index variable to zero. 446 llvm::Value* Zero 447 = llvm::Constant::getNullValue( 448 CGF.ConvertType(CGF.getContext().getSizeType())); 449 CGF.Builder.CreateStore(Zero, IndexVar); 450 451 // Start the loop with a block that tests the condition. 452 llvm::BasicBlock *CondBlock = CGF.createBasicBlock("for.cond"); 453 llvm::BasicBlock *AfterFor = CGF.createBasicBlock("for.end"); 454 455 CGF.EmitBlock(CondBlock); 456 457 llvm::BasicBlock *ForBody = CGF.createBasicBlock("for.body"); 458 // Generate: if (loop-index < number-of-elements) fall to the loop body, 459 // otherwise, go to the block after the for-loop. 460 uint64_t NumElements = Array->getSize().getZExtValue(); 461 llvm::Value *Counter = CGF.Builder.CreateLoad(IndexVar); 462 llvm::Value *NumElementsPtr = 463 llvm::ConstantInt::get(Counter->getType(), NumElements); 464 llvm::Value *IsLess = CGF.Builder.CreateICmpULT(Counter, NumElementsPtr, 465 "isless"); 466 467 // If the condition is true, execute the body. 468 CGF.Builder.CreateCondBr(IsLess, ForBody, AfterFor); 469 470 CGF.EmitBlock(ForBody); 471 llvm::BasicBlock *ContinueBlock = CGF.createBasicBlock("for.inc"); 472 473 { 474 CodeGenFunction::RunCleanupsScope Cleanups(CGF); 475 476 // Inside the loop body recurse to emit the inner loop or, eventually, the 477 // constructor call. 478 EmitAggMemberInitializer(CGF, LHS, ArrayIndexVar, MemberInit, 479 Array->getElementType(), Index + 1); 480 } 481 482 CGF.EmitBlock(ContinueBlock); 483 484 // Emit the increment of the loop counter. 485 llvm::Value *NextVal = llvm::ConstantInt::get(Counter->getType(), 1); 486 Counter = CGF.Builder.CreateLoad(IndexVar); 487 NextVal = CGF.Builder.CreateAdd(Counter, NextVal, "inc"); 488 CGF.Builder.CreateStore(NextVal, IndexVar); 489 490 // Finally, branch back up to the condition for the next iteration. 491 CGF.EmitBranch(CondBlock); 492 493 // Emit the fall-through block. 494 CGF.EmitBlock(AfterFor, true); 495 } 496 497 namespace { 498 struct CallMemberDtor : EHScopeStack::Cleanup { 499 FieldDecl *Field; 500 CXXDestructorDecl *Dtor; 501 502 CallMemberDtor(FieldDecl *Field, CXXDestructorDecl *Dtor) 503 : Field(Field), Dtor(Dtor) {} 504 505 void Emit(CodeGenFunction &CGF, bool IsForEH) { 506 // FIXME: Is this OK for C++0x delegating constructors? 507 llvm::Value *ThisPtr = CGF.LoadCXXThis(); 508 LValue LHS = CGF.EmitLValueForField(ThisPtr, Field, 0); 509 510 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, /*ForVirtualBase=*/false, 511 LHS.getAddress()); 512 } 513 }; 514 } 515 516 static void EmitMemberInitializer(CodeGenFunction &CGF, 517 const CXXRecordDecl *ClassDecl, 518 CXXCtorInitializer *MemberInit, 519 const CXXConstructorDecl *Constructor, 520 FunctionArgList &Args) { 521 assert(MemberInit->isAnyMemberInitializer() && 522 "Must have member initializer!"); 523 524 // non-static data member initializers. 525 FieldDecl *Field = MemberInit->getAnyMember(); 526 QualType FieldType = CGF.getContext().getCanonicalType(Field->getType()); 527 528 llvm::Value *ThisPtr = CGF.LoadCXXThis(); 529 LValue LHS; 530 531 // If we are initializing an anonymous union field, drill down to the field. 532 if (MemberInit->isIndirectMemberInitializer()) { 533 LHS = CGF.EmitLValueForAnonRecordField(ThisPtr, 534 MemberInit->getIndirectMember(), 0); 535 FieldType = MemberInit->getIndirectMember()->getAnonField()->getType(); 536 } else { 537 LHS = CGF.EmitLValueForFieldInitialization(ThisPtr, Field, 0); 538 } 539 540 // FIXME: If there's no initializer and the CXXCtorInitializer 541 // was implicitly generated, we shouldn't be zeroing memory. 542 RValue RHS; 543 if (FieldType->isReferenceType()) { 544 RHS = CGF.EmitReferenceBindingToExpr(MemberInit->getInit(), Field); 545 CGF.EmitStoreThroughLValue(RHS, LHS, FieldType); 546 } else if (FieldType->isArrayType() && !MemberInit->getInit()) { 547 CGF.EmitNullInitialization(LHS.getAddress(), Field->getType()); 548 } else if (!CGF.hasAggregateLLVMType(Field->getType())) { 549 RHS = RValue::get(CGF.EmitScalarExpr(MemberInit->getInit())); 550 CGF.EmitStoreThroughLValue(RHS, LHS, FieldType); 551 } else if (MemberInit->getInit()->getType()->isAnyComplexType()) { 552 CGF.EmitComplexExprIntoAddr(MemberInit->getInit(), LHS.getAddress(), 553 LHS.isVolatileQualified()); 554 } else { 555 llvm::Value *ArrayIndexVar = 0; 556 const ConstantArrayType *Array 557 = CGF.getContext().getAsConstantArrayType(FieldType); 558 if (Array && Constructor->isImplicit() && 559 Constructor->isCopyConstructor()) { 560 const llvm::Type *SizeTy 561 = CGF.ConvertType(CGF.getContext().getSizeType()); 562 563 // The LHS is a pointer to the first object we'll be constructing, as 564 // a flat array. 565 QualType BaseElementTy = CGF.getContext().getBaseElementType(Array); 566 const llvm::Type *BasePtr = CGF.ConvertType(BaseElementTy); 567 BasePtr = llvm::PointerType::getUnqual(BasePtr); 568 llvm::Value *BaseAddrPtr = CGF.Builder.CreateBitCast(LHS.getAddress(), 569 BasePtr); 570 LHS = CGF.MakeAddrLValue(BaseAddrPtr, BaseElementTy); 571 572 // Create an array index that will be used to walk over all of the 573 // objects we're constructing. 574 ArrayIndexVar = CGF.CreateTempAlloca(SizeTy, "object.index"); 575 llvm::Value *Zero = llvm::Constant::getNullValue(SizeTy); 576 CGF.Builder.CreateStore(Zero, ArrayIndexVar); 577 578 // If we are copying an array of scalars or classes with trivial copy 579 // constructors, perform a single aggregate copy. 580 const RecordType *Record = BaseElementTy->getAs<RecordType>(); 581 if (!Record || 582 cast<CXXRecordDecl>(Record->getDecl())->hasTrivialCopyConstructor()) { 583 // Find the source pointer. We knows it's the last argument because 584 // we know we're in a copy constructor. 585 unsigned SrcArgIndex = Args.size() - 1; 586 llvm::Value *SrcPtr 587 = CGF.Builder.CreateLoad(CGF.GetAddrOfLocalVar(Args[SrcArgIndex])); 588 LValue Src = CGF.EmitLValueForFieldInitialization(SrcPtr, Field, 0); 589 590 // Copy the aggregate. 591 CGF.EmitAggregateCopy(LHS.getAddress(), Src.getAddress(), FieldType, 592 LHS.isVolatileQualified()); 593 return; 594 } 595 596 // Emit the block variables for the array indices, if any. 597 for (unsigned I = 0, N = MemberInit->getNumArrayIndices(); I != N; ++I) 598 CGF.EmitAutoVarDecl(*MemberInit->getArrayIndex(I)); 599 } 600 601 EmitAggMemberInitializer(CGF, LHS, ArrayIndexVar, MemberInit, FieldType, 0); 602 603 if (!CGF.CGM.getLangOptions().Exceptions) 604 return; 605 606 // FIXME: If we have an array of classes w/ non-trivial destructors, 607 // we need to destroy in reverse order of construction along the exception 608 // path. 609 const RecordType *RT = FieldType->getAs<RecordType>(); 610 if (!RT) 611 return; 612 613 CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); 614 if (!RD->hasTrivialDestructor()) 615 CGF.EHStack.pushCleanup<CallMemberDtor>(EHCleanup, Field, 616 RD->getDestructor()); 617 } 618 } 619 620 /// Checks whether the given constructor is a valid subject for the 621 /// complete-to-base constructor delegation optimization, i.e. 622 /// emitting the complete constructor as a simple call to the base 623 /// constructor. 624 static bool IsConstructorDelegationValid(const CXXConstructorDecl *Ctor) { 625 626 // Currently we disable the optimization for classes with virtual 627 // bases because (1) the addresses of parameter variables need to be 628 // consistent across all initializers but (2) the delegate function 629 // call necessarily creates a second copy of the parameter variable. 630 // 631 // The limiting example (purely theoretical AFAIK): 632 // struct A { A(int &c) { c++; } }; 633 // struct B : virtual A { 634 // B(int count) : A(count) { printf("%d\n", count); } 635 // }; 636 // ...although even this example could in principle be emitted as a 637 // delegation since the address of the parameter doesn't escape. 638 if (Ctor->getParent()->getNumVBases()) { 639 // TODO: white-list trivial vbase initializers. This case wouldn't 640 // be subject to the restrictions below. 641 642 // TODO: white-list cases where: 643 // - there are no non-reference parameters to the constructor 644 // - the initializers don't access any non-reference parameters 645 // - the initializers don't take the address of non-reference 646 // parameters 647 // - etc. 648 // If we ever add any of the above cases, remember that: 649 // - function-try-blocks will always blacklist this optimization 650 // - we need to perform the constructor prologue and cleanup in 651 // EmitConstructorBody. 652 653 return false; 654 } 655 656 // We also disable the optimization for variadic functions because 657 // it's impossible to "re-pass" varargs. 658 if (Ctor->getType()->getAs<FunctionProtoType>()->isVariadic()) 659 return false; 660 661 // FIXME: Decide if we can do a delegation of a delegating constructor. 662 if (Ctor->isDelegatingConstructor()) 663 return false; 664 665 return true; 666 } 667 668 /// EmitConstructorBody - Emits the body of the current constructor. 669 void CodeGenFunction::EmitConstructorBody(FunctionArgList &Args) { 670 const CXXConstructorDecl *Ctor = cast<CXXConstructorDecl>(CurGD.getDecl()); 671 CXXCtorType CtorType = CurGD.getCtorType(); 672 673 // Before we go any further, try the complete->base constructor 674 // delegation optimization. 675 if (CtorType == Ctor_Complete && IsConstructorDelegationValid(Ctor)) { 676 if (CGDebugInfo *DI = getDebugInfo()) 677 DI->EmitStopPoint(Builder); 678 EmitDelegateCXXConstructorCall(Ctor, Ctor_Base, Args); 679 return; 680 } 681 682 Stmt *Body = Ctor->getBody(); 683 684 // Enter the function-try-block before the constructor prologue if 685 // applicable. 686 bool IsTryBody = (Body && isa<CXXTryStmt>(Body)); 687 if (IsTryBody) 688 EnterCXXTryStmt(*cast<CXXTryStmt>(Body), true); 689 690 EHScopeStack::stable_iterator CleanupDepth = EHStack.stable_begin(); 691 692 // Emit the constructor prologue, i.e. the base and member 693 // initializers. 694 EmitCtorPrologue(Ctor, CtorType, Args); 695 696 // Emit the body of the statement. 697 if (IsTryBody) 698 EmitStmt(cast<CXXTryStmt>(Body)->getTryBlock()); 699 else if (Body) 700 EmitStmt(Body); 701 702 // Emit any cleanup blocks associated with the member or base 703 // initializers, which includes (along the exceptional path) the 704 // destructors for those members and bases that were fully 705 // constructed. 706 PopCleanupBlocks(CleanupDepth); 707 708 if (IsTryBody) 709 ExitCXXTryStmt(*cast<CXXTryStmt>(Body), true); 710 } 711 712 /// EmitCtorPrologue - This routine generates necessary code to initialize 713 /// base classes and non-static data members belonging to this constructor. 714 void CodeGenFunction::EmitCtorPrologue(const CXXConstructorDecl *CD, 715 CXXCtorType CtorType, 716 FunctionArgList &Args) { 717 if (CD->isDelegatingConstructor()) 718 return EmitDelegatingCXXConstructorCall(CD, Args); 719 720 const CXXRecordDecl *ClassDecl = CD->getParent(); 721 722 llvm::SmallVector<CXXCtorInitializer *, 8> MemberInitializers; 723 724 for (CXXConstructorDecl::init_const_iterator B = CD->init_begin(), 725 E = CD->init_end(); 726 B != E; ++B) { 727 CXXCtorInitializer *Member = (*B); 728 729 if (Member->isBaseInitializer()) { 730 EmitBaseInitializer(*this, ClassDecl, Member, CtorType); 731 } else { 732 assert(Member->isAnyMemberInitializer() && 733 "Delegating initializer on non-delegating constructor"); 734 MemberInitializers.push_back(Member); 735 } 736 } 737 738 InitializeVTablePointers(ClassDecl); 739 740 for (unsigned I = 0, E = MemberInitializers.size(); I != E; ++I) 741 EmitMemberInitializer(*this, ClassDecl, MemberInitializers[I], CD, Args); 742 } 743 744 /// EmitDestructorBody - Emits the body of the current destructor. 745 void CodeGenFunction::EmitDestructorBody(FunctionArgList &Args) { 746 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CurGD.getDecl()); 747 CXXDtorType DtorType = CurGD.getDtorType(); 748 749 // The call to operator delete in a deleting destructor happens 750 // outside of the function-try-block, which means it's always 751 // possible to delegate the destructor body to the complete 752 // destructor. Do so. 753 if (DtorType == Dtor_Deleting) { 754 EnterDtorCleanups(Dtor, Dtor_Deleting); 755 EmitCXXDestructorCall(Dtor, Dtor_Complete, /*ForVirtualBase=*/false, 756 LoadCXXThis()); 757 PopCleanupBlock(); 758 return; 759 } 760 761 Stmt *Body = Dtor->getBody(); 762 763 // If the body is a function-try-block, enter the try before 764 // anything else. 765 bool isTryBody = (Body && isa<CXXTryStmt>(Body)); 766 if (isTryBody) 767 EnterCXXTryStmt(*cast<CXXTryStmt>(Body), true); 768 769 // Enter the epilogue cleanups. 770 RunCleanupsScope DtorEpilogue(*this); 771 772 // If this is the complete variant, just invoke the base variant; 773 // the epilogue will destruct the virtual bases. But we can't do 774 // this optimization if the body is a function-try-block, because 775 // we'd introduce *two* handler blocks. 776 switch (DtorType) { 777 case Dtor_Deleting: llvm_unreachable("already handled deleting case"); 778 779 case Dtor_Complete: 780 // Enter the cleanup scopes for virtual bases. 781 EnterDtorCleanups(Dtor, Dtor_Complete); 782 783 if (!isTryBody) { 784 EmitCXXDestructorCall(Dtor, Dtor_Base, /*ForVirtualBase=*/false, 785 LoadCXXThis()); 786 break; 787 } 788 // Fallthrough: act like we're in the base variant. 789 790 case Dtor_Base: 791 // Enter the cleanup scopes for fields and non-virtual bases. 792 EnterDtorCleanups(Dtor, Dtor_Base); 793 794 // Initialize the vtable pointers before entering the body. 795 InitializeVTablePointers(Dtor->getParent()); 796 797 if (isTryBody) 798 EmitStmt(cast<CXXTryStmt>(Body)->getTryBlock()); 799 else if (Body) 800 EmitStmt(Body); 801 else { 802 assert(Dtor->isImplicit() && "bodyless dtor not implicit"); 803 // nothing to do besides what's in the epilogue 804 } 805 // -fapple-kext must inline any call to this dtor into 806 // the caller's body. 807 if (getContext().getLangOptions().AppleKext) 808 CurFn->addFnAttr(llvm::Attribute::AlwaysInline); 809 break; 810 } 811 812 // Jump out through the epilogue cleanups. 813 DtorEpilogue.ForceCleanup(); 814 815 // Exit the try if applicable. 816 if (isTryBody) 817 ExitCXXTryStmt(*cast<CXXTryStmt>(Body), true); 818 } 819 820 namespace { 821 /// Call the operator delete associated with the current destructor. 822 struct CallDtorDelete : EHScopeStack::Cleanup { 823 CallDtorDelete() {} 824 825 void Emit(CodeGenFunction &CGF, bool IsForEH) { 826 const CXXDestructorDecl *Dtor = cast<CXXDestructorDecl>(CGF.CurCodeDecl); 827 const CXXRecordDecl *ClassDecl = Dtor->getParent(); 828 CGF.EmitDeleteCall(Dtor->getOperatorDelete(), CGF.LoadCXXThis(), 829 CGF.getContext().getTagDeclType(ClassDecl)); 830 } 831 }; 832 833 struct CallArrayFieldDtor : EHScopeStack::Cleanup { 834 const FieldDecl *Field; 835 CallArrayFieldDtor(const FieldDecl *Field) : Field(Field) {} 836 837 void Emit(CodeGenFunction &CGF, bool IsForEH) { 838 QualType FieldType = Field->getType(); 839 const ConstantArrayType *Array = 840 CGF.getContext().getAsConstantArrayType(FieldType); 841 842 QualType BaseType = 843 CGF.getContext().getBaseElementType(Array->getElementType()); 844 const CXXRecordDecl *FieldClassDecl = BaseType->getAsCXXRecordDecl(); 845 846 llvm::Value *ThisPtr = CGF.LoadCXXThis(); 847 LValue LHS = CGF.EmitLValueForField(ThisPtr, Field, 848 // FIXME: Qualifiers? 849 /*CVRQualifiers=*/0); 850 851 const llvm::Type *BasePtr = CGF.ConvertType(BaseType)->getPointerTo(); 852 llvm::Value *BaseAddrPtr = 853 CGF.Builder.CreateBitCast(LHS.getAddress(), BasePtr); 854 CGF.EmitCXXAggrDestructorCall(FieldClassDecl->getDestructor(), 855 Array, BaseAddrPtr); 856 } 857 }; 858 859 struct CallFieldDtor : EHScopeStack::Cleanup { 860 const FieldDecl *Field; 861 CallFieldDtor(const FieldDecl *Field) : Field(Field) {} 862 863 void Emit(CodeGenFunction &CGF, bool IsForEH) { 864 const CXXRecordDecl *FieldClassDecl = 865 Field->getType()->getAsCXXRecordDecl(); 866 867 llvm::Value *ThisPtr = CGF.LoadCXXThis(); 868 LValue LHS = CGF.EmitLValueForField(ThisPtr, Field, 869 // FIXME: Qualifiers? 870 /*CVRQualifiers=*/0); 871 872 CGF.EmitCXXDestructorCall(FieldClassDecl->getDestructor(), 873 Dtor_Complete, /*ForVirtualBase=*/false, 874 LHS.getAddress()); 875 } 876 }; 877 } 878 879 /// EmitDtorEpilogue - Emit all code that comes at the end of class's 880 /// destructor. This is to call destructors on members and base classes 881 /// in reverse order of their construction. 882 void CodeGenFunction::EnterDtorCleanups(const CXXDestructorDecl *DD, 883 CXXDtorType DtorType) { 884 assert(!DD->isTrivial() && 885 "Should not emit dtor epilogue for trivial dtor!"); 886 887 // The deleting-destructor phase just needs to call the appropriate 888 // operator delete that Sema picked up. 889 if (DtorType == Dtor_Deleting) { 890 assert(DD->getOperatorDelete() && 891 "operator delete missing - EmitDtorEpilogue"); 892 EHStack.pushCleanup<CallDtorDelete>(NormalAndEHCleanup); 893 return; 894 } 895 896 const CXXRecordDecl *ClassDecl = DD->getParent(); 897 898 // The complete-destructor phase just destructs all the virtual bases. 899 if (DtorType == Dtor_Complete) { 900 901 // We push them in the forward order so that they'll be popped in 902 // the reverse order. 903 for (CXXRecordDecl::base_class_const_iterator I = 904 ClassDecl->vbases_begin(), E = ClassDecl->vbases_end(); 905 I != E; ++I) { 906 const CXXBaseSpecifier &Base = *I; 907 CXXRecordDecl *BaseClassDecl 908 = cast<CXXRecordDecl>(Base.getType()->getAs<RecordType>()->getDecl()); 909 910 // Ignore trivial destructors. 911 if (BaseClassDecl->hasTrivialDestructor()) 912 continue; 913 914 EHStack.pushCleanup<CallBaseDtor>(NormalAndEHCleanup, 915 BaseClassDecl, 916 /*BaseIsVirtual*/ true); 917 } 918 919 return; 920 } 921 922 assert(DtorType == Dtor_Base); 923 924 // Destroy non-virtual bases. 925 for (CXXRecordDecl::base_class_const_iterator I = 926 ClassDecl->bases_begin(), E = ClassDecl->bases_end(); I != E; ++I) { 927 const CXXBaseSpecifier &Base = *I; 928 929 // Ignore virtual bases. 930 if (Base.isVirtual()) 931 continue; 932 933 CXXRecordDecl *BaseClassDecl = Base.getType()->getAsCXXRecordDecl(); 934 935 // Ignore trivial destructors. 936 if (BaseClassDecl->hasTrivialDestructor()) 937 continue; 938 939 EHStack.pushCleanup<CallBaseDtor>(NormalAndEHCleanup, 940 BaseClassDecl, 941 /*BaseIsVirtual*/ false); 942 } 943 944 // Destroy direct fields. 945 llvm::SmallVector<const FieldDecl *, 16> FieldDecls; 946 for (CXXRecordDecl::field_iterator I = ClassDecl->field_begin(), 947 E = ClassDecl->field_end(); I != E; ++I) { 948 const FieldDecl *Field = *I; 949 950 QualType FieldType = getContext().getCanonicalType(Field->getType()); 951 const ConstantArrayType *Array = 952 getContext().getAsConstantArrayType(FieldType); 953 if (Array) 954 FieldType = getContext().getBaseElementType(Array->getElementType()); 955 956 const RecordType *RT = FieldType->getAs<RecordType>(); 957 if (!RT) 958 continue; 959 960 CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl()); 961 if (FieldClassDecl->hasTrivialDestructor()) 962 continue; 963 964 if (Array) 965 EHStack.pushCleanup<CallArrayFieldDtor>(NormalAndEHCleanup, Field); 966 else 967 EHStack.pushCleanup<CallFieldDtor>(NormalAndEHCleanup, Field); 968 } 969 } 970 971 /// EmitCXXAggrConstructorCall - This routine essentially creates a (nested) 972 /// for-loop to call the default constructor on individual members of the 973 /// array. 974 /// 'D' is the default constructor for elements of the array, 'ArrayTy' is the 975 /// array type and 'ArrayPtr' points to the beginning fo the array. 976 /// It is assumed that all relevant checks have been made by the caller. 977 /// 978 /// \param ZeroInitialization True if each element should be zero-initialized 979 /// before it is constructed. 980 void 981 CodeGenFunction::EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, 982 const ConstantArrayType *ArrayTy, 983 llvm::Value *ArrayPtr, 984 CallExpr::const_arg_iterator ArgBeg, 985 CallExpr::const_arg_iterator ArgEnd, 986 bool ZeroInitialization) { 987 988 const llvm::Type *SizeTy = ConvertType(getContext().getSizeType()); 989 llvm::Value * NumElements = 990 llvm::ConstantInt::get(SizeTy, 991 getContext().getConstantArrayElementCount(ArrayTy)); 992 993 EmitCXXAggrConstructorCall(D, NumElements, ArrayPtr, ArgBeg, ArgEnd, 994 ZeroInitialization); 995 } 996 997 void 998 CodeGenFunction::EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, 999 llvm::Value *NumElements, 1000 llvm::Value *ArrayPtr, 1001 CallExpr::const_arg_iterator ArgBeg, 1002 CallExpr::const_arg_iterator ArgEnd, 1003 bool ZeroInitialization) { 1004 const llvm::Type *SizeTy = ConvertType(getContext().getSizeType()); 1005 1006 // Create a temporary for the loop index and initialize it with 0. 1007 llvm::Value *IndexPtr = CreateTempAlloca(SizeTy, "loop.index"); 1008 llvm::Value *Zero = llvm::Constant::getNullValue(SizeTy); 1009 Builder.CreateStore(Zero, IndexPtr); 1010 1011 // Start the loop with a block that tests the condition. 1012 llvm::BasicBlock *CondBlock = createBasicBlock("for.cond"); 1013 llvm::BasicBlock *AfterFor = createBasicBlock("for.end"); 1014 1015 EmitBlock(CondBlock); 1016 1017 llvm::BasicBlock *ForBody = createBasicBlock("for.body"); 1018 1019 // Generate: if (loop-index < number-of-elements fall to the loop body, 1020 // otherwise, go to the block after the for-loop. 1021 llvm::Value *Counter = Builder.CreateLoad(IndexPtr); 1022 llvm::Value *IsLess = Builder.CreateICmpULT(Counter, NumElements, "isless"); 1023 // If the condition is true, execute the body. 1024 Builder.CreateCondBr(IsLess, ForBody, AfterFor); 1025 1026 EmitBlock(ForBody); 1027 1028 llvm::BasicBlock *ContinueBlock = createBasicBlock("for.inc"); 1029 // Inside the loop body, emit the constructor call on the array element. 1030 Counter = Builder.CreateLoad(IndexPtr); 1031 llvm::Value *Address = Builder.CreateInBoundsGEP(ArrayPtr, Counter, 1032 "arrayidx"); 1033 1034 // Zero initialize the storage, if requested. 1035 if (ZeroInitialization) 1036 EmitNullInitialization(Address, 1037 getContext().getTypeDeclType(D->getParent())); 1038 1039 // C++ [class.temporary]p4: 1040 // There are two contexts in which temporaries are destroyed at a different 1041 // point than the end of the full-expression. The first context is when a 1042 // default constructor is called to initialize an element of an array. 1043 // If the constructor has one or more default arguments, the destruction of 1044 // every temporary created in a default argument expression is sequenced 1045 // before the construction of the next array element, if any. 1046 1047 // Keep track of the current number of live temporaries. 1048 { 1049 RunCleanupsScope Scope(*this); 1050 1051 EmitCXXConstructorCall(D, Ctor_Complete, /*ForVirtualBase=*/false, Address, 1052 ArgBeg, ArgEnd); 1053 } 1054 1055 EmitBlock(ContinueBlock); 1056 1057 // Emit the increment of the loop counter. 1058 llvm::Value *NextVal = llvm::ConstantInt::get(SizeTy, 1); 1059 Counter = Builder.CreateLoad(IndexPtr); 1060 NextVal = Builder.CreateAdd(Counter, NextVal, "inc"); 1061 Builder.CreateStore(NextVal, IndexPtr); 1062 1063 // Finally, branch back up to the condition for the next iteration. 1064 EmitBranch(CondBlock); 1065 1066 // Emit the fall-through block. 1067 EmitBlock(AfterFor, true); 1068 } 1069 1070 /// EmitCXXAggrDestructorCall - calls the default destructor on array 1071 /// elements in reverse order of construction. 1072 void 1073 CodeGenFunction::EmitCXXAggrDestructorCall(const CXXDestructorDecl *D, 1074 const ArrayType *Array, 1075 llvm::Value *This) { 1076 const ConstantArrayType *CA = dyn_cast<ConstantArrayType>(Array); 1077 assert(CA && "Do we support VLA for destruction ?"); 1078 uint64_t ElementCount = getContext().getConstantArrayElementCount(CA); 1079 1080 const llvm::Type *SizeLTy = ConvertType(getContext().getSizeType()); 1081 llvm::Value* ElementCountPtr = llvm::ConstantInt::get(SizeLTy, ElementCount); 1082 EmitCXXAggrDestructorCall(D, ElementCountPtr, This); 1083 } 1084 1085 /// EmitCXXAggrDestructorCall - calls the default destructor on array 1086 /// elements in reverse order of construction. 1087 void 1088 CodeGenFunction::EmitCXXAggrDestructorCall(const CXXDestructorDecl *D, 1089 llvm::Value *UpperCount, 1090 llvm::Value *This) { 1091 const llvm::Type *SizeLTy = ConvertType(getContext().getSizeType()); 1092 llvm::Value *One = llvm::ConstantInt::get(SizeLTy, 1); 1093 1094 // Create a temporary for the loop index and initialize it with count of 1095 // array elements. 1096 llvm::Value *IndexPtr = CreateTempAlloca(SizeLTy, "loop.index"); 1097 1098 // Store the number of elements in the index pointer. 1099 Builder.CreateStore(UpperCount, IndexPtr); 1100 1101 // Start the loop with a block that tests the condition. 1102 llvm::BasicBlock *CondBlock = createBasicBlock("for.cond"); 1103 llvm::BasicBlock *AfterFor = createBasicBlock("for.end"); 1104 1105 EmitBlock(CondBlock); 1106 1107 llvm::BasicBlock *ForBody = createBasicBlock("for.body"); 1108 1109 // Generate: if (loop-index != 0 fall to the loop body, 1110 // otherwise, go to the block after the for-loop. 1111 llvm::Value* zeroConstant = 1112 llvm::Constant::getNullValue(SizeLTy); 1113 llvm::Value *Counter = Builder.CreateLoad(IndexPtr); 1114 llvm::Value *IsNE = Builder.CreateICmpNE(Counter, zeroConstant, 1115 "isne"); 1116 // If the condition is true, execute the body. 1117 Builder.CreateCondBr(IsNE, ForBody, AfterFor); 1118 1119 EmitBlock(ForBody); 1120 1121 llvm::BasicBlock *ContinueBlock = createBasicBlock("for.inc"); 1122 // Inside the loop body, emit the constructor call on the array element. 1123 Counter = Builder.CreateLoad(IndexPtr); 1124 Counter = Builder.CreateSub(Counter, One); 1125 llvm::Value *Address = Builder.CreateInBoundsGEP(This, Counter, "arrayidx"); 1126 EmitCXXDestructorCall(D, Dtor_Complete, /*ForVirtualBase=*/false, Address); 1127 1128 EmitBlock(ContinueBlock); 1129 1130 // Emit the decrement of the loop counter. 1131 Counter = Builder.CreateLoad(IndexPtr); 1132 Counter = Builder.CreateSub(Counter, One, "dec"); 1133 Builder.CreateStore(Counter, IndexPtr); 1134 1135 // Finally, branch back up to the condition for the next iteration. 1136 EmitBranch(CondBlock); 1137 1138 // Emit the fall-through block. 1139 EmitBlock(AfterFor, true); 1140 } 1141 1142 void 1143 CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D, 1144 CXXCtorType Type, bool ForVirtualBase, 1145 llvm::Value *This, 1146 CallExpr::const_arg_iterator ArgBeg, 1147 CallExpr::const_arg_iterator ArgEnd) { 1148 1149 CGDebugInfo *DI = getDebugInfo(); 1150 if (DI && CGM.getCodeGenOpts().LimitDebugInfo) { 1151 // If debug info for this class has been emitted then this is the right time 1152 // to do so. 1153 const CXXRecordDecl *Parent = D->getParent(); 1154 DI->getOrCreateRecordType(CGM.getContext().getTypeDeclType(Parent), 1155 Parent->getLocation()); 1156 } 1157 1158 if (D->isTrivial()) { 1159 if (ArgBeg == ArgEnd) { 1160 // Trivial default constructor, no codegen required. 1161 assert(D->isDefaultConstructor() && 1162 "trivial 0-arg ctor not a default ctor"); 1163 return; 1164 } 1165 1166 assert(ArgBeg + 1 == ArgEnd && "unexpected argcount for trivial ctor"); 1167 assert(D->isCopyConstructor() && "trivial 1-arg ctor not a copy ctor"); 1168 1169 const Expr *E = (*ArgBeg); 1170 QualType Ty = E->getType(); 1171 llvm::Value *Src = EmitLValue(E).getAddress(); 1172 EmitAggregateCopy(This, Src, Ty); 1173 return; 1174 } 1175 1176 llvm::Value *VTT = GetVTTParameter(*this, GlobalDecl(D, Type), ForVirtualBase); 1177 llvm::Value *Callee = CGM.GetAddrOfCXXConstructor(D, Type); 1178 1179 EmitCXXMemberCall(D, Callee, ReturnValueSlot(), This, VTT, ArgBeg, ArgEnd); 1180 } 1181 1182 void 1183 CodeGenFunction::EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D, 1184 llvm::Value *This, llvm::Value *Src, 1185 CallExpr::const_arg_iterator ArgBeg, 1186 CallExpr::const_arg_iterator ArgEnd) { 1187 if (D->isTrivial()) { 1188 assert(ArgBeg + 1 == ArgEnd && "unexpected argcount for trivial ctor"); 1189 assert(D->isCopyConstructor() && "trivial 1-arg ctor not a copy ctor"); 1190 EmitAggregateCopy(This, Src, (*ArgBeg)->getType()); 1191 return; 1192 } 1193 llvm::Value *Callee = CGM.GetAddrOfCXXConstructor(D, 1194 clang::Ctor_Complete); 1195 assert(D->isInstance() && 1196 "Trying to emit a member call expr on a static method!"); 1197 1198 const FunctionProtoType *FPT = D->getType()->getAs<FunctionProtoType>(); 1199 1200 CallArgList Args; 1201 1202 // Push the this ptr. 1203 Args.add(RValue::get(This), D->getThisType(getContext())); 1204 1205 1206 // Push the src ptr. 1207 QualType QT = *(FPT->arg_type_begin()); 1208 const llvm::Type *t = CGM.getTypes().ConvertType(QT); 1209 Src = Builder.CreateBitCast(Src, t); 1210 Args.add(RValue::get(Src), QT); 1211 1212 // Skip over first argument (Src). 1213 ++ArgBeg; 1214 CallExpr::const_arg_iterator Arg = ArgBeg; 1215 for (FunctionProtoType::arg_type_iterator I = FPT->arg_type_begin()+1, 1216 E = FPT->arg_type_end(); I != E; ++I, ++Arg) { 1217 assert(Arg != ArgEnd && "Running over edge of argument list!"); 1218 EmitCallArg(Args, *Arg, *I); 1219 } 1220 // Either we've emitted all the call args, or we have a call to a 1221 // variadic function. 1222 assert((Arg == ArgEnd || FPT->isVariadic()) && 1223 "Extra arguments in non-variadic function!"); 1224 // If we still have any arguments, emit them using the type of the argument. 1225 for (; Arg != ArgEnd; ++Arg) { 1226 QualType ArgType = Arg->getType(); 1227 EmitCallArg(Args, *Arg, ArgType); 1228 } 1229 1230 QualType ResultType = FPT->getResultType(); 1231 EmitCall(CGM.getTypes().getFunctionInfo(ResultType, Args, 1232 FPT->getExtInfo()), 1233 Callee, ReturnValueSlot(), Args, D); 1234 } 1235 1236 void 1237 CodeGenFunction::EmitDelegateCXXConstructorCall(const CXXConstructorDecl *Ctor, 1238 CXXCtorType CtorType, 1239 const FunctionArgList &Args) { 1240 CallArgList DelegateArgs; 1241 1242 FunctionArgList::const_iterator I = Args.begin(), E = Args.end(); 1243 assert(I != E && "no parameters to constructor"); 1244 1245 // this 1246 DelegateArgs.add(RValue::get(LoadCXXThis()), (*I)->getType()); 1247 ++I; 1248 1249 // vtt 1250 if (llvm::Value *VTT = GetVTTParameter(*this, GlobalDecl(Ctor, CtorType), 1251 /*ForVirtualBase=*/false)) { 1252 QualType VoidPP = getContext().getPointerType(getContext().VoidPtrTy); 1253 DelegateArgs.add(RValue::get(VTT), VoidPP); 1254 1255 if (CodeGenVTables::needsVTTParameter(CurGD)) { 1256 assert(I != E && "cannot skip vtt parameter, already done with args"); 1257 assert((*I)->getType() == VoidPP && "skipping parameter not of vtt type"); 1258 ++I; 1259 } 1260 } 1261 1262 // Explicit arguments. 1263 for (; I != E; ++I) { 1264 const VarDecl *param = *I; 1265 EmitDelegateCallArg(DelegateArgs, param); 1266 } 1267 1268 EmitCall(CGM.getTypes().getFunctionInfo(Ctor, CtorType), 1269 CGM.GetAddrOfCXXConstructor(Ctor, CtorType), 1270 ReturnValueSlot(), DelegateArgs, Ctor); 1271 } 1272 1273 namespace { 1274 struct CallDelegatingCtorDtor : EHScopeStack::Cleanup { 1275 const CXXDestructorDecl *Dtor; 1276 llvm::Value *Addr; 1277 CXXDtorType Type; 1278 1279 CallDelegatingCtorDtor(const CXXDestructorDecl *D, llvm::Value *Addr, 1280 CXXDtorType Type) 1281 : Dtor(D), Addr(Addr), Type(Type) {} 1282 1283 void Emit(CodeGenFunction &CGF, bool IsForEH) { 1284 CGF.EmitCXXDestructorCall(Dtor, Type, /*ForVirtualBase=*/false, 1285 Addr); 1286 } 1287 }; 1288 } 1289 1290 void 1291 CodeGenFunction::EmitDelegatingCXXConstructorCall(const CXXConstructorDecl *Ctor, 1292 const FunctionArgList &Args) { 1293 assert(Ctor->isDelegatingConstructor()); 1294 1295 llvm::Value *ThisPtr = LoadCXXThis(); 1296 1297 AggValueSlot AggSlot = AggValueSlot::forAddr(ThisPtr, false, /*Lifetime*/ true); 1298 1299 EmitAggExpr(Ctor->init_begin()[0]->getInit(), AggSlot); 1300 1301 const CXXRecordDecl *ClassDecl = Ctor->getParent(); 1302 if (CGM.getLangOptions().Exceptions && !ClassDecl->hasTrivialDestructor()) { 1303 CXXDtorType Type = 1304 CurGD.getCtorType() == Ctor_Complete ? Dtor_Complete : Dtor_Base; 1305 1306 EHStack.pushCleanup<CallDelegatingCtorDtor>(EHCleanup, 1307 ClassDecl->getDestructor(), 1308 ThisPtr, Type); 1309 } 1310 } 1311 1312 void CodeGenFunction::EmitCXXDestructorCall(const CXXDestructorDecl *DD, 1313 CXXDtorType Type, 1314 bool ForVirtualBase, 1315 llvm::Value *This) { 1316 llvm::Value *VTT = GetVTTParameter(*this, GlobalDecl(DD, Type), 1317 ForVirtualBase); 1318 llvm::Value *Callee = 0; 1319 if (getContext().getLangOptions().AppleKext) 1320 Callee = BuildAppleKextVirtualDestructorCall(DD, Type, 1321 DD->getParent()); 1322 1323 if (!Callee) 1324 Callee = CGM.GetAddrOfCXXDestructor(DD, Type); 1325 1326 EmitCXXMemberCall(DD, Callee, ReturnValueSlot(), This, VTT, 0, 0); 1327 } 1328 1329 namespace { 1330 struct CallLocalDtor : EHScopeStack::Cleanup { 1331 const CXXDestructorDecl *Dtor; 1332 llvm::Value *Addr; 1333 1334 CallLocalDtor(const CXXDestructorDecl *D, llvm::Value *Addr) 1335 : Dtor(D), Addr(Addr) {} 1336 1337 void Emit(CodeGenFunction &CGF, bool IsForEH) { 1338 CGF.EmitCXXDestructorCall(Dtor, Dtor_Complete, 1339 /*ForVirtualBase=*/false, Addr); 1340 } 1341 }; 1342 } 1343 1344 void CodeGenFunction::PushDestructorCleanup(const CXXDestructorDecl *D, 1345 llvm::Value *Addr) { 1346 EHStack.pushCleanup<CallLocalDtor>(NormalAndEHCleanup, D, Addr); 1347 } 1348 1349 void CodeGenFunction::PushDestructorCleanup(QualType T, llvm::Value *Addr) { 1350 CXXRecordDecl *ClassDecl = T->getAsCXXRecordDecl(); 1351 if (!ClassDecl) return; 1352 if (ClassDecl->hasTrivialDestructor()) return; 1353 1354 const CXXDestructorDecl *D = ClassDecl->getDestructor(); 1355 assert(D && D->isUsed() && "destructor not marked as used!"); 1356 PushDestructorCleanup(D, Addr); 1357 } 1358 1359 llvm::Value * 1360 CodeGenFunction::GetVirtualBaseClassOffset(llvm::Value *This, 1361 const CXXRecordDecl *ClassDecl, 1362 const CXXRecordDecl *BaseClassDecl) { 1363 llvm::Value *VTablePtr = GetVTablePtr(This, Int8PtrTy); 1364 CharUnits VBaseOffsetOffset = 1365 CGM.getVTables().getVirtualBaseOffsetOffset(ClassDecl, BaseClassDecl); 1366 1367 llvm::Value *VBaseOffsetPtr = 1368 Builder.CreateConstGEP1_64(VTablePtr, VBaseOffsetOffset.getQuantity(), 1369 "vbase.offset.ptr"); 1370 const llvm::Type *PtrDiffTy = 1371 ConvertType(getContext().getPointerDiffType()); 1372 1373 VBaseOffsetPtr = Builder.CreateBitCast(VBaseOffsetPtr, 1374 PtrDiffTy->getPointerTo()); 1375 1376 llvm::Value *VBaseOffset = Builder.CreateLoad(VBaseOffsetPtr, "vbase.offset"); 1377 1378 return VBaseOffset; 1379 } 1380 1381 void 1382 CodeGenFunction::InitializeVTablePointer(BaseSubobject Base, 1383 const CXXRecordDecl *NearestVBase, 1384 CharUnits OffsetFromNearestVBase, 1385 llvm::Constant *VTable, 1386 const CXXRecordDecl *VTableClass) { 1387 const CXXRecordDecl *RD = Base.getBase(); 1388 1389 // Compute the address point. 1390 llvm::Value *VTableAddressPoint; 1391 1392 // Check if we need to use a vtable from the VTT. 1393 if (CodeGenVTables::needsVTTParameter(CurGD) && 1394 (RD->getNumVBases() || NearestVBase)) { 1395 // Get the secondary vpointer index. 1396 uint64_t VirtualPointerIndex = 1397 CGM.getVTables().getSecondaryVirtualPointerIndex(VTableClass, Base); 1398 1399 /// Load the VTT. 1400 llvm::Value *VTT = LoadCXXVTT(); 1401 if (VirtualPointerIndex) 1402 VTT = Builder.CreateConstInBoundsGEP1_64(VTT, VirtualPointerIndex); 1403 1404 // And load the address point from the VTT. 1405 VTableAddressPoint = Builder.CreateLoad(VTT); 1406 } else { 1407 uint64_t AddressPoint = CGM.getVTables().getAddressPoint(Base, VTableClass); 1408 VTableAddressPoint = 1409 Builder.CreateConstInBoundsGEP2_64(VTable, 0, AddressPoint); 1410 } 1411 1412 // Compute where to store the address point. 1413 llvm::Value *VirtualOffset = 0; 1414 CharUnits NonVirtualOffset = CharUnits::Zero(); 1415 1416 if (CodeGenVTables::needsVTTParameter(CurGD) && NearestVBase) { 1417 // We need to use the virtual base offset offset because the virtual base 1418 // might have a different offset in the most derived class. 1419 VirtualOffset = GetVirtualBaseClassOffset(LoadCXXThis(), VTableClass, 1420 NearestVBase); 1421 NonVirtualOffset = OffsetFromNearestVBase; 1422 } else { 1423 // We can just use the base offset in the complete class. 1424 NonVirtualOffset = Base.getBaseOffset(); 1425 } 1426 1427 // Apply the offsets. 1428 llvm::Value *VTableField = LoadCXXThis(); 1429 1430 if (!NonVirtualOffset.isZero() || VirtualOffset) 1431 VTableField = ApplyNonVirtualAndVirtualOffset(*this, VTableField, 1432 NonVirtualOffset, 1433 VirtualOffset); 1434 1435 // Finally, store the address point. 1436 const llvm::Type *AddressPointPtrTy = 1437 VTableAddressPoint->getType()->getPointerTo(); 1438 VTableField = Builder.CreateBitCast(VTableField, AddressPointPtrTy); 1439 Builder.CreateStore(VTableAddressPoint, VTableField); 1440 } 1441 1442 void 1443 CodeGenFunction::InitializeVTablePointers(BaseSubobject Base, 1444 const CXXRecordDecl *NearestVBase, 1445 CharUnits OffsetFromNearestVBase, 1446 bool BaseIsNonVirtualPrimaryBase, 1447 llvm::Constant *VTable, 1448 const CXXRecordDecl *VTableClass, 1449 VisitedVirtualBasesSetTy& VBases) { 1450 // If this base is a non-virtual primary base the address point has already 1451 // been set. 1452 if (!BaseIsNonVirtualPrimaryBase) { 1453 // Initialize the vtable pointer for this base. 1454 InitializeVTablePointer(Base, NearestVBase, OffsetFromNearestVBase, 1455 VTable, VTableClass); 1456 } 1457 1458 const CXXRecordDecl *RD = Base.getBase(); 1459 1460 // Traverse bases. 1461 for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(), 1462 E = RD->bases_end(); I != E; ++I) { 1463 CXXRecordDecl *BaseDecl 1464 = cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl()); 1465 1466 // Ignore classes without a vtable. 1467 if (!BaseDecl->isDynamicClass()) 1468 continue; 1469 1470 CharUnits BaseOffset; 1471 CharUnits BaseOffsetFromNearestVBase; 1472 bool BaseDeclIsNonVirtualPrimaryBase; 1473 1474 if (I->isVirtual()) { 1475 // Check if we've visited this virtual base before. 1476 if (!VBases.insert(BaseDecl)) 1477 continue; 1478 1479 const ASTRecordLayout &Layout = 1480 getContext().getASTRecordLayout(VTableClass); 1481 1482 BaseOffset = Layout.getVBaseClassOffset(BaseDecl); 1483 BaseOffsetFromNearestVBase = CharUnits::Zero(); 1484 BaseDeclIsNonVirtualPrimaryBase = false; 1485 } else { 1486 const ASTRecordLayout &Layout = getContext().getASTRecordLayout(RD); 1487 1488 BaseOffset = Base.getBaseOffset() + Layout.getBaseClassOffset(BaseDecl); 1489 BaseOffsetFromNearestVBase = 1490 OffsetFromNearestVBase + Layout.getBaseClassOffset(BaseDecl); 1491 BaseDeclIsNonVirtualPrimaryBase = Layout.getPrimaryBase() == BaseDecl; 1492 } 1493 1494 InitializeVTablePointers(BaseSubobject(BaseDecl, BaseOffset), 1495 I->isVirtual() ? BaseDecl : NearestVBase, 1496 BaseOffsetFromNearestVBase, 1497 BaseDeclIsNonVirtualPrimaryBase, 1498 VTable, VTableClass, VBases); 1499 } 1500 } 1501 1502 void CodeGenFunction::InitializeVTablePointers(const CXXRecordDecl *RD) { 1503 // Ignore classes without a vtable. 1504 if (!RD->isDynamicClass()) 1505 return; 1506 1507 // Get the VTable. 1508 llvm::Constant *VTable = CGM.getVTables().GetAddrOfVTable(RD); 1509 1510 // Initialize the vtable pointers for this class and all of its bases. 1511 VisitedVirtualBasesSetTy VBases; 1512 InitializeVTablePointers(BaseSubobject(RD, CharUnits::Zero()), 1513 /*NearestVBase=*/0, 1514 /*OffsetFromNearestVBase=*/CharUnits::Zero(), 1515 /*BaseIsNonVirtualPrimaryBase=*/false, 1516 VTable, RD, VBases); 1517 } 1518 1519 llvm::Value *CodeGenFunction::GetVTablePtr(llvm::Value *This, 1520 const llvm::Type *Ty) { 1521 llvm::Value *VTablePtrSrc = Builder.CreateBitCast(This, Ty->getPointerTo()); 1522 return Builder.CreateLoad(VTablePtrSrc, "vtable"); 1523 } 1524