1 //===--- CGDebugInfo.cpp - Emit Debug Information for a Module ------------===// 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 coordinates the debug information generation while generating code. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "CGDebugInfo.h" 15 #include "CGBlocks.h" 16 #include "CGCXXABI.h" 17 #include "CGObjCRuntime.h" 18 #include "CodeGenFunction.h" 19 #include "CodeGenModule.h" 20 #include "clang/AST/ASTContext.h" 21 #include "clang/AST/DeclFriend.h" 22 #include "clang/AST/DeclObjC.h" 23 #include "clang/AST/DeclTemplate.h" 24 #include "clang/AST/Expr.h" 25 #include "clang/AST/RecordLayout.h" 26 #include "clang/Basic/FileManager.h" 27 #include "clang/Basic/SourceManager.h" 28 #include "clang/Basic/Version.h" 29 #include "clang/Frontend/CodeGenOptions.h" 30 #include "llvm/ADT/SmallVector.h" 31 #include "llvm/ADT/StringExtras.h" 32 #include "llvm/IR/Constants.h" 33 #include "llvm/IR/DataLayout.h" 34 #include "llvm/IR/DerivedTypes.h" 35 #include "llvm/IR/Instructions.h" 36 #include "llvm/IR/Intrinsics.h" 37 #include "llvm/IR/Module.h" 38 #include "llvm/Support/Dwarf.h" 39 #include "llvm/Support/FileSystem.h" 40 #include "llvm/Support/Path.h" 41 using namespace clang; 42 using namespace clang::CodeGen; 43 44 CGDebugInfo::CGDebugInfo(CodeGenModule &CGM) 45 : CGM(CGM), DebugKind(CGM.getCodeGenOpts().getDebugInfo()), 46 DBuilder(CGM.getModule()) { 47 CreateCompileUnit(); 48 } 49 50 CGDebugInfo::~CGDebugInfo() { 51 assert(LexicalBlockStack.empty() && 52 "Region stack mismatch, stack not empty!"); 53 } 54 55 ArtificialLocation::ArtificialLocation(CodeGenFunction &CGF) 56 : ApplyDebugLocation(CGF) { 57 if (auto *DI = CGF.getDebugInfo()) { 58 // Construct a location that has a valid scope, but no line info. 59 assert(!DI->LexicalBlockStack.empty()); 60 llvm::DIDescriptor Scope(DI->LexicalBlockStack.back()); 61 CGF.Builder.SetCurrentDebugLocation(llvm::DebugLoc::get(0, 0, Scope)); 62 } 63 } 64 65 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, 66 SourceLocation TemporaryLocation) 67 : CGF(CGF) { 68 init(TemporaryLocation); 69 } 70 71 void ApplyDebugLocation::init(SourceLocation TemporaryLocation) { 72 if (auto *DI = CGF.getDebugInfo()) { 73 OriginalLocation = CGF.Builder.getCurrentDebugLocation(); 74 if (TemporaryLocation.isInvalid()) 75 CGF.Builder.SetCurrentDebugLocation(llvm::DebugLoc()); 76 else 77 DI->EmitLocation(CGF.Builder, TemporaryLocation); 78 } 79 } 80 81 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, const Expr *E) 82 : CGF(CGF) { 83 init(E->getExprLoc()); 84 } 85 86 ApplyDebugLocation::ApplyDebugLocation(CodeGenFunction &CGF, llvm::DebugLoc Loc) 87 : CGF(CGF) { 88 if (CGF.getDebugInfo()) { 89 OriginalLocation = CGF.Builder.getCurrentDebugLocation(); 90 if (!Loc.isUnknown()) 91 CGF.Builder.SetCurrentDebugLocation(Loc); 92 } 93 } 94 95 ApplyDebugLocation::~ApplyDebugLocation() { 96 // Query CGF so the location isn't overwritten when location updates are 97 // temporarily disabled (for C++ default function arguments) 98 if (CGF.getDebugInfo()) 99 CGF.Builder.SetCurrentDebugLocation(OriginalLocation); 100 } 101 102 /// ArtificialLocation - An RAII object that temporarily switches to 103 /// an artificial debug location that has a valid scope, but no line 104 void CGDebugInfo::setLocation(SourceLocation Loc) { 105 // If the new location isn't valid return. 106 if (Loc.isInvalid()) 107 return; 108 109 CurLoc = CGM.getContext().getSourceManager().getExpansionLoc(Loc); 110 111 // If we've changed files in the middle of a lexical scope go ahead 112 // and create a new lexical scope with file node if it's different 113 // from the one in the scope. 114 if (LexicalBlockStack.empty()) 115 return; 116 117 SourceManager &SM = CGM.getContext().getSourceManager(); 118 llvm::DIScope Scope(LexicalBlockStack.back()); 119 PresumedLoc PCLoc = SM.getPresumedLoc(CurLoc); 120 121 if (PCLoc.isInvalid() || Scope.getFilename() == PCLoc.getFilename()) 122 return; 123 124 if (Scope.isLexicalBlockFile()) { 125 llvm::DILexicalBlockFile LBF = llvm::DILexicalBlockFile(Scope); 126 llvm::DIDescriptor D = DBuilder.createLexicalBlockFile( 127 LBF.getScope(), getOrCreateFile(CurLoc)); 128 llvm::MDNode *N = D; 129 LexicalBlockStack.pop_back(); 130 LexicalBlockStack.emplace_back(N); 131 } else if (Scope.isLexicalBlock() || Scope.isSubprogram()) { 132 llvm::DIDescriptor D = 133 DBuilder.createLexicalBlockFile(Scope, getOrCreateFile(CurLoc)); 134 llvm::MDNode *N = D; 135 LexicalBlockStack.pop_back(); 136 LexicalBlockStack.emplace_back(N); 137 } 138 } 139 140 /// getContextDescriptor - Get context info for the decl. 141 llvm::DIScope CGDebugInfo::getContextDescriptor(const Decl *Context) { 142 if (!Context) 143 return TheCU; 144 145 auto I = RegionMap.find(Context); 146 if (I != RegionMap.end()) { 147 llvm::Metadata *V = I->second; 148 return llvm::DIScope(dyn_cast_or_null<llvm::MDNode>(V)); 149 } 150 151 // Check namespace. 152 if (const NamespaceDecl *NSDecl = dyn_cast<NamespaceDecl>(Context)) 153 return getOrCreateNameSpace(NSDecl); 154 155 if (const RecordDecl *RDecl = dyn_cast<RecordDecl>(Context)) 156 if (!RDecl->isDependentType()) 157 return getOrCreateType(CGM.getContext().getTypeDeclType(RDecl), 158 getOrCreateMainFile()); 159 return TheCU; 160 } 161 162 /// getFunctionName - Get function name for the given FunctionDecl. If the 163 /// name is constructed on demand (e.g. C++ destructor) then the name 164 /// is stored on the side. 165 StringRef CGDebugInfo::getFunctionName(const FunctionDecl *FD) { 166 assert(FD && "Invalid FunctionDecl!"); 167 IdentifierInfo *FII = FD->getIdentifier(); 168 FunctionTemplateSpecializationInfo *Info = 169 FD->getTemplateSpecializationInfo(); 170 if (!Info && FII) 171 return FII->getName(); 172 173 // Otherwise construct human readable name for debug info. 174 SmallString<128> NS; 175 llvm::raw_svector_ostream OS(NS); 176 FD->printName(OS); 177 178 // Add any template specialization args. 179 if (Info) { 180 const TemplateArgumentList *TArgs = Info->TemplateArguments; 181 const TemplateArgument *Args = TArgs->data(); 182 unsigned NumArgs = TArgs->size(); 183 PrintingPolicy Policy(CGM.getLangOpts()); 184 TemplateSpecializationType::PrintTemplateArgumentList(OS, Args, NumArgs, 185 Policy); 186 } 187 188 // Copy this name on the side and use its reference. 189 return internString(OS.str()); 190 } 191 192 StringRef CGDebugInfo::getObjCMethodName(const ObjCMethodDecl *OMD) { 193 SmallString<256> MethodName; 194 llvm::raw_svector_ostream OS(MethodName); 195 OS << (OMD->isInstanceMethod() ? '-' : '+') << '['; 196 const DeclContext *DC = OMD->getDeclContext(); 197 if (const ObjCImplementationDecl *OID = 198 dyn_cast<const ObjCImplementationDecl>(DC)) { 199 OS << OID->getName(); 200 } else if (const ObjCInterfaceDecl *OID = 201 dyn_cast<const ObjCInterfaceDecl>(DC)) { 202 OS << OID->getName(); 203 } else if (const ObjCCategoryImplDecl *OCD = 204 dyn_cast<const ObjCCategoryImplDecl>(DC)) { 205 OS << ((const NamedDecl *)OCD)->getIdentifier()->getNameStart() << '(' 206 << OCD->getIdentifier()->getNameStart() << ')'; 207 } else if (isa<ObjCProtocolDecl>(DC)) { 208 // We can extract the type of the class from the self pointer. 209 if (ImplicitParamDecl *SelfDecl = OMD->getSelfDecl()) { 210 QualType ClassTy = 211 cast<ObjCObjectPointerType>(SelfDecl->getType())->getPointeeType(); 212 ClassTy.print(OS, PrintingPolicy(LangOptions())); 213 } 214 } 215 OS << ' ' << OMD->getSelector().getAsString() << ']'; 216 217 return internString(OS.str()); 218 } 219 220 /// getSelectorName - Return selector name. This is used for debugging 221 /// info. 222 StringRef CGDebugInfo::getSelectorName(Selector S) { 223 return internString(S.getAsString()); 224 } 225 226 /// getClassName - Get class name including template argument list. 227 StringRef CGDebugInfo::getClassName(const RecordDecl *RD) { 228 // quick optimization to avoid having to intern strings that are already 229 // stored reliably elsewhere 230 if (!isa<ClassTemplateSpecializationDecl>(RD)) 231 return RD->getName(); 232 233 SmallString<128> Name; 234 { 235 llvm::raw_svector_ostream OS(Name); 236 RD->getNameForDiagnostic(OS, CGM.getContext().getPrintingPolicy(), 237 /*Qualified*/ false); 238 } 239 240 // Copy this name on the side and use its reference. 241 return internString(Name); 242 } 243 244 /// getOrCreateFile - Get the file debug info descriptor for the input location. 245 llvm::DIFile CGDebugInfo::getOrCreateFile(SourceLocation Loc) { 246 if (!Loc.isValid()) 247 // If Location is not valid then use main input file. 248 return DBuilder.createFile(TheCU.getFilename(), TheCU.getDirectory()); 249 250 SourceManager &SM = CGM.getContext().getSourceManager(); 251 PresumedLoc PLoc = SM.getPresumedLoc(Loc); 252 253 if (PLoc.isInvalid() || StringRef(PLoc.getFilename()).empty()) 254 // If the location is not valid then use main input file. 255 return DBuilder.createFile(TheCU.getFilename(), TheCU.getDirectory()); 256 257 // Cache the results. 258 const char *fname = PLoc.getFilename(); 259 auto it = DIFileCache.find(fname); 260 261 if (it != DIFileCache.end()) { 262 // Verify that the information still exists. 263 if (llvm::Metadata *V = it->second) 264 return llvm::DIFile(cast<llvm::MDNode>(V)); 265 } 266 267 llvm::DIFile F = DBuilder.createFile(PLoc.getFilename(), getCurrentDirname()); 268 269 DIFileCache[fname].reset(F); 270 return F; 271 } 272 273 /// getOrCreateMainFile - Get the file info for main compile unit. 274 llvm::DIFile CGDebugInfo::getOrCreateMainFile() { 275 return DBuilder.createFile(TheCU.getFilename(), TheCU.getDirectory()); 276 } 277 278 /// getLineNumber - Get line number for the location. If location is invalid 279 /// then use current location. 280 unsigned CGDebugInfo::getLineNumber(SourceLocation Loc) { 281 if (Loc.isInvalid() && CurLoc.isInvalid()) 282 return 0; 283 SourceManager &SM = CGM.getContext().getSourceManager(); 284 PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc); 285 return PLoc.isValid() ? PLoc.getLine() : 0; 286 } 287 288 /// getColumnNumber - Get column number for the location. 289 unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc, bool Force) { 290 // We may not want column information at all. 291 if (!Force && !CGM.getCodeGenOpts().DebugColumnInfo) 292 return 0; 293 294 // If the location is invalid then use the current column. 295 if (Loc.isInvalid() && CurLoc.isInvalid()) 296 return 0; 297 SourceManager &SM = CGM.getContext().getSourceManager(); 298 PresumedLoc PLoc = SM.getPresumedLoc(Loc.isValid() ? Loc : CurLoc); 299 return PLoc.isValid() ? PLoc.getColumn() : 0; 300 } 301 302 StringRef CGDebugInfo::getCurrentDirname() { 303 if (!CGM.getCodeGenOpts().DebugCompilationDir.empty()) 304 return CGM.getCodeGenOpts().DebugCompilationDir; 305 306 if (!CWDName.empty()) 307 return CWDName; 308 SmallString<256> CWD; 309 llvm::sys::fs::current_path(CWD); 310 return CWDName = internString(CWD); 311 } 312 313 /// CreateCompileUnit - Create new compile unit. 314 void CGDebugInfo::CreateCompileUnit() { 315 316 // Should we be asking the SourceManager for the main file name, instead of 317 // accepting it as an argument? This just causes the main file name to 318 // mismatch with source locations and create extra lexical scopes or 319 // mismatched debug info (a CU with a DW_AT_file of "-", because that's what 320 // the driver passed, but functions/other things have DW_AT_file of "<stdin>" 321 // because that's what the SourceManager says) 322 323 // Get absolute path name. 324 SourceManager &SM = CGM.getContext().getSourceManager(); 325 std::string MainFileName = CGM.getCodeGenOpts().MainFileName; 326 if (MainFileName.empty()) 327 MainFileName = "<stdin>"; 328 329 // The main file name provided via the "-main-file-name" option contains just 330 // the file name itself with no path information. This file name may have had 331 // a relative path, so we look into the actual file entry for the main 332 // file to determine the real absolute path for the file. 333 std::string MainFileDir; 334 if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) { 335 MainFileDir = MainFile->getDir()->getName(); 336 if (MainFileDir != ".") { 337 llvm::SmallString<1024> MainFileDirSS(MainFileDir); 338 llvm::sys::path::append(MainFileDirSS, MainFileName); 339 MainFileName = MainFileDirSS.str(); 340 } 341 } 342 343 // Save filename string. 344 StringRef Filename = internString(MainFileName); 345 346 // Save split dwarf file string. 347 std::string SplitDwarfFile = CGM.getCodeGenOpts().SplitDwarfFile; 348 StringRef SplitDwarfFilename = internString(SplitDwarfFile); 349 350 llvm::dwarf::SourceLanguage LangTag; 351 const LangOptions &LO = CGM.getLangOpts(); 352 if (LO.CPlusPlus) { 353 if (LO.ObjC1) 354 LangTag = llvm::dwarf::DW_LANG_ObjC_plus_plus; 355 else 356 LangTag = llvm::dwarf::DW_LANG_C_plus_plus; 357 } else if (LO.ObjC1) { 358 LangTag = llvm::dwarf::DW_LANG_ObjC; 359 } else if (LO.C99) { 360 LangTag = llvm::dwarf::DW_LANG_C99; 361 } else { 362 LangTag = llvm::dwarf::DW_LANG_C89; 363 } 364 365 std::string Producer = getClangFullVersion(); 366 367 // Figure out which version of the ObjC runtime we have. 368 unsigned RuntimeVers = 0; 369 if (LO.ObjC1) 370 RuntimeVers = LO.ObjCRuntime.isNonFragile() ? 2 : 1; 371 372 // Create new compile unit. 373 // FIXME - Eliminate TheCU. 374 TheCU = DBuilder.createCompileUnit( 375 LangTag, Filename, getCurrentDirname(), Producer, LO.Optimize, 376 CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers, SplitDwarfFilename, 377 DebugKind <= CodeGenOptions::DebugLineTablesOnly 378 ? llvm::DIBuilder::LineTablesOnly 379 : llvm::DIBuilder::FullDebug, 380 DebugKind != CodeGenOptions::LocTrackingOnly); 381 } 382 383 /// CreateType - Get the Basic type from the cache or create a new 384 /// one if necessary. 385 llvm::DIType CGDebugInfo::CreateType(const BuiltinType *BT) { 386 llvm::dwarf::TypeKind Encoding; 387 StringRef BTName; 388 switch (BT->getKind()) { 389 #define BUILTIN_TYPE(Id, SingletonId) 390 #define PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id: 391 #include "clang/AST/BuiltinTypes.def" 392 case BuiltinType::Dependent: 393 llvm_unreachable("Unexpected builtin type"); 394 case BuiltinType::NullPtr: 395 return DBuilder.createNullPtrType(); 396 case BuiltinType::Void: 397 return llvm::DIType(); 398 case BuiltinType::ObjCClass: 399 if (!ClassTy) 400 ClassTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type, 401 "objc_class", TheCU, 402 getOrCreateMainFile(), 0); 403 return ClassTy; 404 case BuiltinType::ObjCId: { 405 // typedef struct objc_class *Class; 406 // typedef struct objc_object { 407 // Class isa; 408 // } *id; 409 410 if (ObjTy) 411 return ObjTy; 412 413 if (!ClassTy) 414 ClassTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type, 415 "objc_class", TheCU, 416 getOrCreateMainFile(), 0); 417 418 unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy); 419 420 llvm::DIType ISATy = DBuilder.createPointerType(ClassTy, Size); 421 422 ObjTy = 423 DBuilder.createStructType(TheCU, "objc_object", getOrCreateMainFile(), 424 0, 0, 0, 0, llvm::DIType(), llvm::DIArray()); 425 426 DBuilder.replaceArrays( 427 ObjTy, 428 DBuilder.getOrCreateArray(&*DBuilder.createMemberType( 429 ObjTy, "isa", getOrCreateMainFile(), 0, Size, 0, 0, 0, ISATy))); 430 return ObjTy; 431 } 432 case BuiltinType::ObjCSel: { 433 if (!SelTy) 434 SelTy = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type, 435 "objc_selector", TheCU, 436 getOrCreateMainFile(), 0); 437 return SelTy; 438 } 439 440 case BuiltinType::OCLImage1d: 441 return getOrCreateStructPtrType("opencl_image1d_t", OCLImage1dDITy); 442 case BuiltinType::OCLImage1dArray: 443 return getOrCreateStructPtrType("opencl_image1d_array_t", 444 OCLImage1dArrayDITy); 445 case BuiltinType::OCLImage1dBuffer: 446 return getOrCreateStructPtrType("opencl_image1d_buffer_t", 447 OCLImage1dBufferDITy); 448 case BuiltinType::OCLImage2d: 449 return getOrCreateStructPtrType("opencl_image2d_t", OCLImage2dDITy); 450 case BuiltinType::OCLImage2dArray: 451 return getOrCreateStructPtrType("opencl_image2d_array_t", 452 OCLImage2dArrayDITy); 453 case BuiltinType::OCLImage3d: 454 return getOrCreateStructPtrType("opencl_image3d_t", OCLImage3dDITy); 455 case BuiltinType::OCLSampler: 456 return DBuilder.createBasicType( 457 "opencl_sampler_t", CGM.getContext().getTypeSize(BT), 458 CGM.getContext().getTypeAlign(BT), llvm::dwarf::DW_ATE_unsigned); 459 case BuiltinType::OCLEvent: 460 return getOrCreateStructPtrType("opencl_event_t", OCLEventDITy); 461 462 case BuiltinType::UChar: 463 case BuiltinType::Char_U: 464 Encoding = llvm::dwarf::DW_ATE_unsigned_char; 465 break; 466 case BuiltinType::Char_S: 467 case BuiltinType::SChar: 468 Encoding = llvm::dwarf::DW_ATE_signed_char; 469 break; 470 case BuiltinType::Char16: 471 case BuiltinType::Char32: 472 Encoding = llvm::dwarf::DW_ATE_UTF; 473 break; 474 case BuiltinType::UShort: 475 case BuiltinType::UInt: 476 case BuiltinType::UInt128: 477 case BuiltinType::ULong: 478 case BuiltinType::WChar_U: 479 case BuiltinType::ULongLong: 480 Encoding = llvm::dwarf::DW_ATE_unsigned; 481 break; 482 case BuiltinType::Short: 483 case BuiltinType::Int: 484 case BuiltinType::Int128: 485 case BuiltinType::Long: 486 case BuiltinType::WChar_S: 487 case BuiltinType::LongLong: 488 Encoding = llvm::dwarf::DW_ATE_signed; 489 break; 490 case BuiltinType::Bool: 491 Encoding = llvm::dwarf::DW_ATE_boolean; 492 break; 493 case BuiltinType::Half: 494 case BuiltinType::Float: 495 case BuiltinType::LongDouble: 496 case BuiltinType::Double: 497 Encoding = llvm::dwarf::DW_ATE_float; 498 break; 499 } 500 501 switch (BT->getKind()) { 502 case BuiltinType::Long: 503 BTName = "long int"; 504 break; 505 case BuiltinType::LongLong: 506 BTName = "long long int"; 507 break; 508 case BuiltinType::ULong: 509 BTName = "long unsigned int"; 510 break; 511 case BuiltinType::ULongLong: 512 BTName = "long long unsigned int"; 513 break; 514 default: 515 BTName = BT->getName(CGM.getLangOpts()); 516 break; 517 } 518 // Bit size, align and offset of the type. 519 uint64_t Size = CGM.getContext().getTypeSize(BT); 520 uint64_t Align = CGM.getContext().getTypeAlign(BT); 521 llvm::DIType DbgTy = DBuilder.createBasicType(BTName, Size, Align, Encoding); 522 return DbgTy; 523 } 524 525 llvm::DIType CGDebugInfo::CreateType(const ComplexType *Ty) { 526 // Bit size, align and offset of the type. 527 llvm::dwarf::TypeKind Encoding = llvm::dwarf::DW_ATE_complex_float; 528 if (Ty->isComplexIntegerType()) 529 Encoding = llvm::dwarf::DW_ATE_lo_user; 530 531 uint64_t Size = CGM.getContext().getTypeSize(Ty); 532 uint64_t Align = CGM.getContext().getTypeAlign(Ty); 533 llvm::DIType DbgTy = 534 DBuilder.createBasicType("complex", Size, Align, Encoding); 535 536 return DbgTy; 537 } 538 539 /// CreateCVRType - Get the qualified type from the cache or create 540 /// a new one if necessary. 541 llvm::DIType CGDebugInfo::CreateQualifiedType(QualType Ty, llvm::DIFile Unit) { 542 QualifierCollector Qc; 543 const Type *T = Qc.strip(Ty); 544 545 // Ignore these qualifiers for now. 546 Qc.removeObjCGCAttr(); 547 Qc.removeAddressSpace(); 548 Qc.removeObjCLifetime(); 549 550 // We will create one Derived type for one qualifier and recurse to handle any 551 // additional ones. 552 llvm::dwarf::Tag Tag; 553 if (Qc.hasConst()) { 554 Tag = llvm::dwarf::DW_TAG_const_type; 555 Qc.removeConst(); 556 } else if (Qc.hasVolatile()) { 557 Tag = llvm::dwarf::DW_TAG_volatile_type; 558 Qc.removeVolatile(); 559 } else if (Qc.hasRestrict()) { 560 Tag = llvm::dwarf::DW_TAG_restrict_type; 561 Qc.removeRestrict(); 562 } else { 563 assert(Qc.empty() && "Unknown type qualifier for debug info"); 564 return getOrCreateType(QualType(T, 0), Unit); 565 } 566 567 llvm::DIType FromTy = getOrCreateType(Qc.apply(CGM.getContext(), T), Unit); 568 569 // No need to fill in the Name, Line, Size, Alignment, Offset in case of 570 // CVR derived types. 571 llvm::DIType DbgTy = DBuilder.createQualifiedType(Tag, FromTy); 572 573 return DbgTy; 574 } 575 576 llvm::DIType CGDebugInfo::CreateType(const ObjCObjectPointerType *Ty, 577 llvm::DIFile Unit) { 578 579 // The frontend treats 'id' as a typedef to an ObjCObjectType, 580 // whereas 'id<protocol>' is treated as an ObjCPointerType. For the 581 // debug info, we want to emit 'id' in both cases. 582 if (Ty->isObjCQualifiedIdType()) 583 return getOrCreateType(CGM.getContext().getObjCIdType(), Unit); 584 585 llvm::DIType DbgTy = CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, 586 Ty, Ty->getPointeeType(), Unit); 587 return DbgTy; 588 } 589 590 llvm::DIType CGDebugInfo::CreateType(const PointerType *Ty, llvm::DIFile Unit) { 591 return CreatePointerLikeType(llvm::dwarf::DW_TAG_pointer_type, Ty, 592 Ty->getPointeeType(), Unit); 593 } 594 595 /// In C++ mode, types have linkage, so we can rely on the ODR and 596 /// on their mangled names, if they're external. 597 static SmallString<256> getUniqueTagTypeName(const TagType *Ty, 598 CodeGenModule &CGM, 599 llvm::DICompileUnit TheCU) { 600 SmallString<256> FullName; 601 // FIXME: ODR should apply to ObjC++ exactly the same wasy it does to C++. 602 // For now, only apply ODR with C++. 603 const TagDecl *TD = Ty->getDecl(); 604 if (TheCU.getLanguage() != llvm::dwarf::DW_LANG_C_plus_plus || 605 !TD->isExternallyVisible()) 606 return FullName; 607 // Microsoft Mangler does not have support for mangleCXXRTTIName yet. 608 if (CGM.getTarget().getCXXABI().isMicrosoft()) 609 return FullName; 610 611 // TODO: This is using the RTTI name. Is there a better way to get 612 // a unique string for a type? 613 llvm::raw_svector_ostream Out(FullName); 614 CGM.getCXXABI().getMangleContext().mangleCXXRTTIName(QualType(Ty, 0), Out); 615 Out.flush(); 616 return FullName; 617 } 618 619 // Creates a forward declaration for a RecordDecl in the given context. 620 llvm::DICompositeType 621 CGDebugInfo::getOrCreateRecordFwdDecl(const RecordType *Ty, 622 llvm::DIDescriptor Ctx) { 623 const RecordDecl *RD = Ty->getDecl(); 624 if (llvm::DIType T = getTypeOrNull(CGM.getContext().getRecordType(RD))) 625 return llvm::DICompositeType(T); 626 llvm::DIFile DefUnit = getOrCreateFile(RD->getLocation()); 627 unsigned Line = getLineNumber(RD->getLocation()); 628 StringRef RDName = getClassName(RD); 629 630 llvm::dwarf::Tag Tag; 631 if (RD->isStruct() || RD->isInterface()) 632 Tag = llvm::dwarf::DW_TAG_structure_type; 633 else if (RD->isUnion()) 634 Tag = llvm::dwarf::DW_TAG_union_type; 635 else { 636 assert(RD->isClass()); 637 Tag = llvm::dwarf::DW_TAG_class_type; 638 } 639 640 // Create the type. 641 SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU); 642 llvm::DICompositeType RetTy = DBuilder.createReplaceableForwardDecl( 643 Tag, RDName, Ctx, DefUnit, Line, 0, 0, 0, FullName); 644 ReplaceMap.emplace_back( 645 std::piecewise_construct, std::make_tuple(Ty), 646 std::make_tuple(static_cast<llvm::Metadata *>(RetTy))); 647 return RetTy; 648 } 649 650 llvm::DIType CGDebugInfo::CreatePointerLikeType(llvm::dwarf::Tag Tag, 651 const Type *Ty, 652 QualType PointeeTy, 653 llvm::DIFile Unit) { 654 if (Tag == llvm::dwarf::DW_TAG_reference_type || 655 Tag == llvm::dwarf::DW_TAG_rvalue_reference_type) 656 return DBuilder.createReferenceType(Tag, getOrCreateType(PointeeTy, Unit)); 657 658 // Bit size, align and offset of the type. 659 // Size is always the size of a pointer. We can't use getTypeSize here 660 // because that does not return the correct value for references. 661 unsigned AS = CGM.getContext().getTargetAddressSpace(PointeeTy); 662 uint64_t Size = CGM.getTarget().getPointerWidth(AS); 663 uint64_t Align = CGM.getContext().getTypeAlign(Ty); 664 665 return DBuilder.createPointerType(getOrCreateType(PointeeTy, Unit), Size, 666 Align); 667 } 668 669 llvm::DIType CGDebugInfo::getOrCreateStructPtrType(StringRef Name, 670 llvm::DIType &Cache) { 671 if (Cache) 672 return Cache; 673 Cache = DBuilder.createForwardDecl(llvm::dwarf::DW_TAG_structure_type, Name, 674 TheCU, getOrCreateMainFile(), 0); 675 unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy); 676 Cache = DBuilder.createPointerType(Cache, Size); 677 return Cache; 678 } 679 680 llvm::DIType CGDebugInfo::CreateType(const BlockPointerType *Ty, 681 llvm::DIFile Unit) { 682 if (BlockLiteralGeneric) 683 return BlockLiteralGeneric; 684 685 SmallVector<llvm::Metadata *, 8> EltTys; 686 llvm::DIType FieldTy; 687 QualType FType; 688 uint64_t FieldSize, FieldOffset; 689 unsigned FieldAlign; 690 llvm::DIArray Elements; 691 llvm::DIType EltTy, DescTy; 692 693 FieldOffset = 0; 694 FType = CGM.getContext().UnsignedLongTy; 695 EltTys.push_back(CreateMemberType(Unit, FType, "reserved", &FieldOffset)); 696 EltTys.push_back(CreateMemberType(Unit, FType, "Size", &FieldOffset)); 697 698 Elements = DBuilder.getOrCreateArray(EltTys); 699 EltTys.clear(); 700 701 unsigned Flags = llvm::DIDescriptor::FlagAppleBlock; 702 unsigned LineNo = getLineNumber(CurLoc); 703 704 EltTy = DBuilder.createStructType(Unit, "__block_descriptor", Unit, LineNo, 705 FieldOffset, 0, Flags, llvm::DIType(), 706 Elements); 707 708 // Bit size, align and offset of the type. 709 uint64_t Size = CGM.getContext().getTypeSize(Ty); 710 711 DescTy = DBuilder.createPointerType(EltTy, Size); 712 713 FieldOffset = 0; 714 FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); 715 EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset)); 716 FType = CGM.getContext().IntTy; 717 EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset)); 718 EltTys.push_back(CreateMemberType(Unit, FType, "__reserved", &FieldOffset)); 719 FType = CGM.getContext().getPointerType(Ty->getPointeeType()); 720 EltTys.push_back(CreateMemberType(Unit, FType, "__FuncPtr", &FieldOffset)); 721 722 FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); 723 FieldTy = DescTy; 724 FieldSize = CGM.getContext().getTypeSize(Ty); 725 FieldAlign = CGM.getContext().getTypeAlign(Ty); 726 FieldTy = 727 DBuilder.createMemberType(Unit, "__descriptor", Unit, LineNo, FieldSize, 728 FieldAlign, FieldOffset, 0, FieldTy); 729 EltTys.push_back(FieldTy); 730 731 FieldOffset += FieldSize; 732 Elements = DBuilder.getOrCreateArray(EltTys); 733 734 EltTy = DBuilder.createStructType(Unit, "__block_literal_generic", Unit, 735 LineNo, FieldOffset, 0, Flags, 736 llvm::DIType(), Elements); 737 738 BlockLiteralGeneric = DBuilder.createPointerType(EltTy, Size); 739 return BlockLiteralGeneric; 740 } 741 742 llvm::DIType CGDebugInfo::CreateType(const TemplateSpecializationType *Ty, 743 llvm::DIFile Unit) { 744 assert(Ty->isTypeAlias()); 745 llvm::DIType Src = getOrCreateType(Ty->getAliasedType(), Unit); 746 747 SmallString<128> NS; 748 llvm::raw_svector_ostream OS(NS); 749 Ty->getTemplateName().print(OS, CGM.getContext().getPrintingPolicy(), 750 /*qualified*/ false); 751 752 TemplateSpecializationType::PrintTemplateArgumentList( 753 OS, Ty->getArgs(), Ty->getNumArgs(), 754 CGM.getContext().getPrintingPolicy()); 755 756 TypeAliasDecl *AliasDecl = cast<TypeAliasTemplateDecl>( 757 Ty->getTemplateName().getAsTemplateDecl())->getTemplatedDecl(); 758 759 SourceLocation Loc = AliasDecl->getLocation(); 760 llvm::DIFile File = getOrCreateFile(Loc); 761 unsigned Line = getLineNumber(Loc); 762 763 llvm::DIDescriptor Ctxt = 764 getContextDescriptor(cast<Decl>(AliasDecl->getDeclContext())); 765 766 return DBuilder.createTypedef(Src, internString(OS.str()), File, Line, Ctxt); 767 } 768 769 llvm::DIType CGDebugInfo::CreateType(const TypedefType *Ty, llvm::DIFile Unit) { 770 // Typedefs are derived from some other type. If we have a typedef of a 771 // typedef, make sure to emit the whole chain. 772 llvm::DIType Src = getOrCreateType(Ty->getDecl()->getUnderlyingType(), Unit); 773 // We don't set size information, but do specify where the typedef was 774 // declared. 775 SourceLocation Loc = Ty->getDecl()->getLocation(); 776 llvm::DIFile File = getOrCreateFile(Loc); 777 unsigned Line = getLineNumber(Loc); 778 const TypedefNameDecl *TyDecl = Ty->getDecl(); 779 780 llvm::DIDescriptor TypedefContext = 781 getContextDescriptor(cast<Decl>(Ty->getDecl()->getDeclContext())); 782 783 return DBuilder.createTypedef(Src, TyDecl->getName(), File, Line, 784 TypedefContext); 785 } 786 787 llvm::DIType CGDebugInfo::CreateType(const FunctionType *Ty, 788 llvm::DIFile Unit) { 789 SmallVector<llvm::Metadata *, 16> EltTys; 790 791 // Add the result type at least. 792 EltTys.push_back(getOrCreateType(Ty->getReturnType(), Unit)); 793 794 // Set up remainder of arguments if there is a prototype. 795 // otherwise emit it as a variadic function. 796 if (isa<FunctionNoProtoType>(Ty)) 797 EltTys.push_back(DBuilder.createUnspecifiedParameter()); 798 else if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(Ty)) { 799 for (unsigned i = 0, e = FPT->getNumParams(); i != e; ++i) 800 EltTys.push_back(getOrCreateType(FPT->getParamType(i), Unit)); 801 if (FPT->isVariadic()) 802 EltTys.push_back(DBuilder.createUnspecifiedParameter()); 803 } 804 805 llvm::DITypeArray EltTypeArray = DBuilder.getOrCreateTypeArray(EltTys); 806 return DBuilder.createSubroutineType(Unit, EltTypeArray); 807 } 808 809 /// Convert an AccessSpecifier into the corresponding DIDescriptor flag. 810 /// As an optimization, return 0 if the access specifier equals the 811 /// default for the containing type. 812 static unsigned getAccessFlag(AccessSpecifier Access, const RecordDecl *RD) { 813 AccessSpecifier Default = clang::AS_none; 814 if (RD && RD->isClass()) 815 Default = clang::AS_private; 816 else if (RD && (RD->isStruct() || RD->isUnion())) 817 Default = clang::AS_public; 818 819 if (Access == Default) 820 return 0; 821 822 switch (Access) { 823 case clang::AS_private: 824 return llvm::DIDescriptor::FlagPrivate; 825 case clang::AS_protected: 826 return llvm::DIDescriptor::FlagProtected; 827 case clang::AS_public: 828 return llvm::DIDescriptor::FlagPublic; 829 case clang::AS_none: 830 return 0; 831 } 832 llvm_unreachable("unexpected access enumerator"); 833 } 834 835 llvm::DIType CGDebugInfo::createFieldType( 836 StringRef name, QualType type, uint64_t sizeInBitsOverride, 837 SourceLocation loc, AccessSpecifier AS, uint64_t offsetInBits, 838 llvm::DIFile tunit, llvm::DIScope scope, const RecordDecl *RD) { 839 llvm::DIType debugType = getOrCreateType(type, tunit); 840 841 // Get the location for the field. 842 llvm::DIFile file = getOrCreateFile(loc); 843 unsigned line = getLineNumber(loc); 844 845 uint64_t SizeInBits = 0; 846 unsigned AlignInBits = 0; 847 if (!type->isIncompleteArrayType()) { 848 TypeInfo TI = CGM.getContext().getTypeInfo(type); 849 SizeInBits = TI.Width; 850 AlignInBits = TI.Align; 851 852 if (sizeInBitsOverride) 853 SizeInBits = sizeInBitsOverride; 854 } 855 856 unsigned flags = getAccessFlag(AS, RD); 857 return DBuilder.createMemberType(scope, name, file, line, SizeInBits, 858 AlignInBits, offsetInBits, flags, debugType); 859 } 860 861 /// CollectRecordLambdaFields - Helper for CollectRecordFields. 862 void CGDebugInfo::CollectRecordLambdaFields( 863 const CXXRecordDecl *CXXDecl, SmallVectorImpl<llvm::Metadata *> &elements, 864 llvm::DIType RecordTy) { 865 // For C++11 Lambdas a Field will be the same as a Capture, but the Capture 866 // has the name and the location of the variable so we should iterate over 867 // both concurrently. 868 const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(CXXDecl); 869 RecordDecl::field_iterator Field = CXXDecl->field_begin(); 870 unsigned fieldno = 0; 871 for (CXXRecordDecl::capture_const_iterator I = CXXDecl->captures_begin(), 872 E = CXXDecl->captures_end(); 873 I != E; ++I, ++Field, ++fieldno) { 874 const LambdaCapture &C = *I; 875 if (C.capturesVariable()) { 876 VarDecl *V = C.getCapturedVar(); 877 llvm::DIFile VUnit = getOrCreateFile(C.getLocation()); 878 StringRef VName = V->getName(); 879 uint64_t SizeInBitsOverride = 0; 880 if (Field->isBitField()) { 881 SizeInBitsOverride = Field->getBitWidthValue(CGM.getContext()); 882 assert(SizeInBitsOverride && "found named 0-width bitfield"); 883 } 884 llvm::DIType fieldType = createFieldType( 885 VName, Field->getType(), SizeInBitsOverride, C.getLocation(), 886 Field->getAccess(), layout.getFieldOffset(fieldno), VUnit, RecordTy, 887 CXXDecl); 888 elements.push_back(fieldType); 889 } else if (C.capturesThis()) { 890 // TODO: Need to handle 'this' in some way by probably renaming the 891 // this of the lambda class and having a field member of 'this' or 892 // by using AT_object_pointer for the function and having that be 893 // used as 'this' for semantic references. 894 FieldDecl *f = *Field; 895 llvm::DIFile VUnit = getOrCreateFile(f->getLocation()); 896 QualType type = f->getType(); 897 llvm::DIType fieldType = createFieldType( 898 "this", type, 0, f->getLocation(), f->getAccess(), 899 layout.getFieldOffset(fieldno), VUnit, RecordTy, CXXDecl); 900 901 elements.push_back(fieldType); 902 } 903 } 904 } 905 906 /// Helper for CollectRecordFields. 907 llvm::DIDerivedType CGDebugInfo::CreateRecordStaticField(const VarDecl *Var, 908 llvm::DIType RecordTy, 909 const RecordDecl *RD) { 910 // Create the descriptor for the static variable, with or without 911 // constant initializers. 912 Var = Var->getCanonicalDecl(); 913 llvm::DIFile VUnit = getOrCreateFile(Var->getLocation()); 914 llvm::DIType VTy = getOrCreateType(Var->getType(), VUnit); 915 916 unsigned LineNumber = getLineNumber(Var->getLocation()); 917 StringRef VName = Var->getName(); 918 llvm::Constant *C = nullptr; 919 if (Var->getInit()) { 920 const APValue *Value = Var->evaluateValue(); 921 if (Value) { 922 if (Value->isInt()) 923 C = llvm::ConstantInt::get(CGM.getLLVMContext(), Value->getInt()); 924 if (Value->isFloat()) 925 C = llvm::ConstantFP::get(CGM.getLLVMContext(), Value->getFloat()); 926 } 927 } 928 929 unsigned Flags = getAccessFlag(Var->getAccess(), RD); 930 llvm::DIDerivedType GV = DBuilder.createStaticMemberType( 931 RecordTy, VName, VUnit, LineNumber, VTy, Flags, C); 932 StaticDataMemberCache[Var->getCanonicalDecl()].reset(GV); 933 return GV; 934 } 935 936 /// CollectRecordNormalField - Helper for CollectRecordFields. 937 void CGDebugInfo::CollectRecordNormalField( 938 const FieldDecl *field, uint64_t OffsetInBits, llvm::DIFile tunit, 939 SmallVectorImpl<llvm::Metadata *> &elements, llvm::DIType RecordTy, 940 const RecordDecl *RD) { 941 StringRef name = field->getName(); 942 QualType type = field->getType(); 943 944 // Ignore unnamed fields unless they're anonymous structs/unions. 945 if (name.empty() && !type->isRecordType()) 946 return; 947 948 uint64_t SizeInBitsOverride = 0; 949 if (field->isBitField()) { 950 SizeInBitsOverride = field->getBitWidthValue(CGM.getContext()); 951 assert(SizeInBitsOverride && "found named 0-width bitfield"); 952 } 953 954 llvm::DIType fieldType = 955 createFieldType(name, type, SizeInBitsOverride, field->getLocation(), 956 field->getAccess(), OffsetInBits, tunit, RecordTy, RD); 957 958 elements.push_back(fieldType); 959 } 960 961 /// CollectRecordFields - A helper function to collect debug info for 962 /// record fields. This is used while creating debug info entry for a Record. 963 void CGDebugInfo::CollectRecordFields( 964 const RecordDecl *record, llvm::DIFile tunit, 965 SmallVectorImpl<llvm::Metadata *> &elements, 966 llvm::DICompositeType RecordTy) { 967 const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(record); 968 969 if (CXXDecl && CXXDecl->isLambda()) 970 CollectRecordLambdaFields(CXXDecl, elements, RecordTy); 971 else { 972 const ASTRecordLayout &layout = CGM.getContext().getASTRecordLayout(record); 973 974 // Field number for non-static fields. 975 unsigned fieldNo = 0; 976 977 // Static and non-static members should appear in the same order as 978 // the corresponding declarations in the source program. 979 for (const auto *I : record->decls()) 980 if (const auto *V = dyn_cast<VarDecl>(I)) { 981 // Reuse the existing static member declaration if one exists 982 auto MI = StaticDataMemberCache.find(V->getCanonicalDecl()); 983 if (MI != StaticDataMemberCache.end()) { 984 assert(MI->second && 985 "Static data member declaration should still exist"); 986 elements.push_back( 987 llvm::DIDerivedType(cast<llvm::MDNode>(MI->second))); 988 } else { 989 auto Field = CreateRecordStaticField(V, RecordTy, record); 990 elements.push_back(Field); 991 } 992 } else if (const auto *field = dyn_cast<FieldDecl>(I)) { 993 CollectRecordNormalField(field, layout.getFieldOffset(fieldNo), tunit, 994 elements, RecordTy, record); 995 996 // Bump field number for next field. 997 ++fieldNo; 998 } 999 } 1000 } 1001 1002 /// getOrCreateMethodType - CXXMethodDecl's type is a FunctionType. This 1003 /// function type is not updated to include implicit "this" pointer. Use this 1004 /// routine to get a method type which includes "this" pointer. 1005 llvm::DICompositeType 1006 CGDebugInfo::getOrCreateMethodType(const CXXMethodDecl *Method, 1007 llvm::DIFile Unit) { 1008 const FunctionProtoType *Func = Method->getType()->getAs<FunctionProtoType>(); 1009 if (Method->isStatic()) 1010 return llvm::DICompositeType(getOrCreateType(QualType(Func, 0), Unit)); 1011 return getOrCreateInstanceMethodType(Method->getThisType(CGM.getContext()), 1012 Func, Unit); 1013 } 1014 1015 llvm::DICompositeType CGDebugInfo::getOrCreateInstanceMethodType( 1016 QualType ThisPtr, const FunctionProtoType *Func, llvm::DIFile Unit) { 1017 // Add "this" pointer. 1018 llvm::DITypeArray Args = llvm::DISubroutineType( 1019 getOrCreateType(QualType(Func, 0), Unit)).getTypeArray(); 1020 assert(Args.getNumElements() && "Invalid number of arguments!"); 1021 1022 SmallVector<llvm::Metadata *, 16> Elts; 1023 1024 // First element is always return type. For 'void' functions it is NULL. 1025 Elts.push_back(Args.getElement(0)); 1026 1027 // "this" pointer is always first argument. 1028 const CXXRecordDecl *RD = ThisPtr->getPointeeCXXRecordDecl(); 1029 if (isa<ClassTemplateSpecializationDecl>(RD)) { 1030 // Create pointer type directly in this case. 1031 const PointerType *ThisPtrTy = cast<PointerType>(ThisPtr); 1032 QualType PointeeTy = ThisPtrTy->getPointeeType(); 1033 unsigned AS = CGM.getContext().getTargetAddressSpace(PointeeTy); 1034 uint64_t Size = CGM.getTarget().getPointerWidth(AS); 1035 uint64_t Align = CGM.getContext().getTypeAlign(ThisPtrTy); 1036 llvm::DIType PointeeType = getOrCreateType(PointeeTy, Unit); 1037 llvm::DIType ThisPtrType = 1038 DBuilder.createPointerType(PointeeType, Size, Align); 1039 TypeCache[ThisPtr.getAsOpaquePtr()].reset(ThisPtrType); 1040 // TODO: This and the artificial type below are misleading, the 1041 // types aren't artificial the argument is, but the current 1042 // metadata doesn't represent that. 1043 ThisPtrType = DBuilder.createObjectPointerType(ThisPtrType); 1044 Elts.push_back(ThisPtrType); 1045 } else { 1046 llvm::DIType ThisPtrType = getOrCreateType(ThisPtr, Unit); 1047 TypeCache[ThisPtr.getAsOpaquePtr()].reset(ThisPtrType); 1048 ThisPtrType = DBuilder.createObjectPointerType(ThisPtrType); 1049 Elts.push_back(ThisPtrType); 1050 } 1051 1052 // Copy rest of the arguments. 1053 for (unsigned i = 1, e = Args.getNumElements(); i != e; ++i) 1054 Elts.push_back(Args.getElement(i)); 1055 1056 llvm::DITypeArray EltTypeArray = DBuilder.getOrCreateTypeArray(Elts); 1057 1058 unsigned Flags = 0; 1059 if (Func->getExtProtoInfo().RefQualifier == RQ_LValue) 1060 Flags |= llvm::DIDescriptor::FlagLValueReference; 1061 if (Func->getExtProtoInfo().RefQualifier == RQ_RValue) 1062 Flags |= llvm::DIDescriptor::FlagRValueReference; 1063 1064 return DBuilder.createSubroutineType(Unit, EltTypeArray, Flags); 1065 } 1066 1067 /// isFunctionLocalClass - Return true if CXXRecordDecl is defined 1068 /// inside a function. 1069 static bool isFunctionLocalClass(const CXXRecordDecl *RD) { 1070 if (const CXXRecordDecl *NRD = dyn_cast<CXXRecordDecl>(RD->getDeclContext())) 1071 return isFunctionLocalClass(NRD); 1072 if (isa<FunctionDecl>(RD->getDeclContext())) 1073 return true; 1074 return false; 1075 } 1076 1077 /// CreateCXXMemberFunction - A helper function to create a DISubprogram for 1078 /// a single member function GlobalDecl. 1079 llvm::DISubprogram 1080 CGDebugInfo::CreateCXXMemberFunction(const CXXMethodDecl *Method, 1081 llvm::DIFile Unit, llvm::DIType RecordTy) { 1082 bool IsCtorOrDtor = 1083 isa<CXXConstructorDecl>(Method) || isa<CXXDestructorDecl>(Method); 1084 1085 StringRef MethodName = getFunctionName(Method); 1086 llvm::DICompositeType MethodTy = getOrCreateMethodType(Method, Unit); 1087 1088 // Since a single ctor/dtor corresponds to multiple functions, it doesn't 1089 // make sense to give a single ctor/dtor a linkage name. 1090 StringRef MethodLinkageName; 1091 if (!IsCtorOrDtor && !isFunctionLocalClass(Method->getParent())) 1092 MethodLinkageName = CGM.getMangledName(Method); 1093 1094 // Get the location for the method. 1095 llvm::DIFile MethodDefUnit; 1096 unsigned MethodLine = 0; 1097 if (!Method->isImplicit()) { 1098 MethodDefUnit = getOrCreateFile(Method->getLocation()); 1099 MethodLine = getLineNumber(Method->getLocation()); 1100 } 1101 1102 // Collect virtual method info. 1103 llvm::DIType ContainingType; 1104 unsigned Virtuality = 0; 1105 unsigned VIndex = 0; 1106 1107 if (Method->isVirtual()) { 1108 if (Method->isPure()) 1109 Virtuality = llvm::dwarf::DW_VIRTUALITY_pure_virtual; 1110 else 1111 Virtuality = llvm::dwarf::DW_VIRTUALITY_virtual; 1112 1113 // It doesn't make sense to give a virtual destructor a vtable index, 1114 // since a single destructor has two entries in the vtable. 1115 // FIXME: Add proper support for debug info for virtual calls in 1116 // the Microsoft ABI, where we may use multiple vptrs to make a vftable 1117 // lookup if we have multiple or virtual inheritance. 1118 if (!isa<CXXDestructorDecl>(Method) && 1119 !CGM.getTarget().getCXXABI().isMicrosoft()) 1120 VIndex = CGM.getItaniumVTableContext().getMethodVTableIndex(Method); 1121 ContainingType = RecordTy; 1122 } 1123 1124 unsigned Flags = 0; 1125 if (Method->isImplicit()) 1126 Flags |= llvm::DIDescriptor::FlagArtificial; 1127 Flags |= getAccessFlag(Method->getAccess(), Method->getParent()); 1128 if (const CXXConstructorDecl *CXXC = dyn_cast<CXXConstructorDecl>(Method)) { 1129 if (CXXC->isExplicit()) 1130 Flags |= llvm::DIDescriptor::FlagExplicit; 1131 } else if (const CXXConversionDecl *CXXC = 1132 dyn_cast<CXXConversionDecl>(Method)) { 1133 if (CXXC->isExplicit()) 1134 Flags |= llvm::DIDescriptor::FlagExplicit; 1135 } 1136 if (Method->hasPrototype()) 1137 Flags |= llvm::DIDescriptor::FlagPrototyped; 1138 if (Method->getRefQualifier() == RQ_LValue) 1139 Flags |= llvm::DIDescriptor::FlagLValueReference; 1140 if (Method->getRefQualifier() == RQ_RValue) 1141 Flags |= llvm::DIDescriptor::FlagRValueReference; 1142 1143 llvm::DIArray TParamsArray = CollectFunctionTemplateParams(Method, Unit); 1144 llvm::DISubprogram SP = DBuilder.createMethod( 1145 RecordTy, MethodName, MethodLinkageName, MethodDefUnit, MethodLine, 1146 MethodTy, /*isLocalToUnit=*/false, 1147 /* isDefinition=*/false, Virtuality, VIndex, ContainingType, Flags, 1148 CGM.getLangOpts().Optimize, nullptr, TParamsArray); 1149 1150 SPCache[Method->getCanonicalDecl()].reset(SP); 1151 1152 return SP; 1153 } 1154 1155 /// CollectCXXMemberFunctions - A helper function to collect debug info for 1156 /// C++ member functions. This is used while creating debug info entry for 1157 /// a Record. 1158 void CGDebugInfo::CollectCXXMemberFunctions( 1159 const CXXRecordDecl *RD, llvm::DIFile Unit, 1160 SmallVectorImpl<llvm::Metadata *> &EltTys, llvm::DIType RecordTy) { 1161 1162 // Since we want more than just the individual member decls if we 1163 // have templated functions iterate over every declaration to gather 1164 // the functions. 1165 for (const auto *I : RD->decls()) { 1166 const auto *Method = dyn_cast<CXXMethodDecl>(I); 1167 // If the member is implicit, don't add it to the member list. This avoids 1168 // the member being added to type units by LLVM, while still allowing it 1169 // to be emitted into the type declaration/reference inside the compile 1170 // unit. 1171 // FIXME: Handle Using(Shadow?)Decls here to create 1172 // DW_TAG_imported_declarations inside the class for base decls brought into 1173 // derived classes. GDB doesn't seem to notice/leverage these when I tried 1174 // it, so I'm not rushing to fix this. (GCC seems to produce them, if 1175 // referenced) 1176 if (!Method || Method->isImplicit()) 1177 continue; 1178 1179 if (Method->getType()->getAs<FunctionProtoType>()->getContainedAutoType()) 1180 continue; 1181 1182 // Reuse the existing member function declaration if it exists. 1183 // It may be associated with the declaration of the type & should be 1184 // reused as we're building the definition. 1185 // 1186 // This situation can arise in the vtable-based debug info reduction where 1187 // implicit members are emitted in a non-vtable TU. 1188 auto MI = SPCache.find(Method->getCanonicalDecl()); 1189 EltTys.push_back(MI == SPCache.end() 1190 ? CreateCXXMemberFunction(Method, Unit, RecordTy) 1191 : static_cast<llvm::Metadata *>(MI->second)); 1192 } 1193 } 1194 1195 /// CollectCXXBases - A helper function to collect debug info for 1196 /// C++ base classes. This is used while creating debug info entry for 1197 /// a Record. 1198 void CGDebugInfo::CollectCXXBases(const CXXRecordDecl *RD, llvm::DIFile Unit, 1199 SmallVectorImpl<llvm::Metadata *> &EltTys, 1200 llvm::DIType RecordTy) { 1201 1202 const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD); 1203 for (const auto &BI : RD->bases()) { 1204 unsigned BFlags = 0; 1205 uint64_t BaseOffset; 1206 1207 const CXXRecordDecl *Base = 1208 cast<CXXRecordDecl>(BI.getType()->getAs<RecordType>()->getDecl()); 1209 1210 if (BI.isVirtual()) { 1211 if (CGM.getTarget().getCXXABI().isItaniumFamily()) { 1212 // virtual base offset offset is -ve. The code generator emits dwarf 1213 // expression where it expects +ve number. 1214 BaseOffset = 0 - CGM.getItaniumVTableContext() 1215 .getVirtualBaseOffsetOffset(RD, Base) 1216 .getQuantity(); 1217 } else { 1218 // In the MS ABI, store the vbtable offset, which is analogous to the 1219 // vbase offset offset in Itanium. 1220 BaseOffset = 1221 4 * CGM.getMicrosoftVTableContext().getVBTableIndex(RD, Base); 1222 } 1223 BFlags = llvm::DIDescriptor::FlagVirtual; 1224 } else 1225 BaseOffset = CGM.getContext().toBits(RL.getBaseClassOffset(Base)); 1226 // FIXME: Inconsistent units for BaseOffset. It is in bytes when 1227 // BI->isVirtual() and bits when not. 1228 1229 BFlags |= getAccessFlag(BI.getAccessSpecifier(), RD); 1230 llvm::DIType DTy = DBuilder.createInheritance( 1231 RecordTy, getOrCreateType(BI.getType(), Unit), BaseOffset, BFlags); 1232 EltTys.push_back(DTy); 1233 } 1234 } 1235 1236 /// CollectTemplateParams - A helper function to collect template parameters. 1237 llvm::DIArray 1238 CGDebugInfo::CollectTemplateParams(const TemplateParameterList *TPList, 1239 ArrayRef<TemplateArgument> TAList, 1240 llvm::DIFile Unit) { 1241 SmallVector<llvm::Metadata *, 16> TemplateParams; 1242 for (unsigned i = 0, e = TAList.size(); i != e; ++i) { 1243 const TemplateArgument &TA = TAList[i]; 1244 StringRef Name; 1245 if (TPList) 1246 Name = TPList->getParam(i)->getName(); 1247 switch (TA.getKind()) { 1248 case TemplateArgument::Type: { 1249 llvm::DIType TTy = getOrCreateType(TA.getAsType(), Unit); 1250 llvm::DITemplateTypeParameter TTP = 1251 DBuilder.createTemplateTypeParameter(TheCU, Name, TTy); 1252 TemplateParams.push_back(TTP); 1253 } break; 1254 case TemplateArgument::Integral: { 1255 llvm::DIType TTy = getOrCreateType(TA.getIntegralType(), Unit); 1256 llvm::DITemplateValueParameter TVP = 1257 DBuilder.createTemplateValueParameter( 1258 TheCU, Name, TTy, 1259 llvm::ConstantInt::get(CGM.getLLVMContext(), TA.getAsIntegral())); 1260 TemplateParams.push_back(TVP); 1261 } break; 1262 case TemplateArgument::Declaration: { 1263 const ValueDecl *D = TA.getAsDecl(); 1264 QualType T = TA.getParamTypeForDecl().getDesugaredType(CGM.getContext()); 1265 llvm::DIType TTy = getOrCreateType(T, Unit); 1266 llvm::Constant *V = nullptr; 1267 const CXXMethodDecl *MD; 1268 // Variable pointer template parameters have a value that is the address 1269 // of the variable. 1270 if (const auto *VD = dyn_cast<VarDecl>(D)) 1271 V = CGM.GetAddrOfGlobalVar(VD); 1272 // Member function pointers have special support for building them, though 1273 // this is currently unsupported in LLVM CodeGen. 1274 else if ((MD = dyn_cast<CXXMethodDecl>(D)) && MD->isInstance()) 1275 V = CGM.getCXXABI().EmitMemberPointer(MD); 1276 else if (const auto *FD = dyn_cast<FunctionDecl>(D)) 1277 V = CGM.GetAddrOfFunction(FD); 1278 // Member data pointers have special handling too to compute the fixed 1279 // offset within the object. 1280 else if (const auto *MPT = dyn_cast<MemberPointerType>(T.getTypePtr())) { 1281 // These five lines (& possibly the above member function pointer 1282 // handling) might be able to be refactored to use similar code in 1283 // CodeGenModule::getMemberPointerConstant 1284 uint64_t fieldOffset = CGM.getContext().getFieldOffset(D); 1285 CharUnits chars = 1286 CGM.getContext().toCharUnitsFromBits((int64_t)fieldOffset); 1287 V = CGM.getCXXABI().EmitMemberDataPointer(MPT, chars); 1288 } 1289 llvm::DITemplateValueParameter TVP = 1290 DBuilder.createTemplateValueParameter( 1291 TheCU, Name, TTy, 1292 cast_or_null<llvm::Constant>(V->stripPointerCasts())); 1293 TemplateParams.push_back(TVP); 1294 } break; 1295 case TemplateArgument::NullPtr: { 1296 QualType T = TA.getNullPtrType(); 1297 llvm::DIType TTy = getOrCreateType(T, Unit); 1298 llvm::Constant *V = nullptr; 1299 // Special case member data pointer null values since they're actually -1 1300 // instead of zero. 1301 if (const MemberPointerType *MPT = 1302 dyn_cast<MemberPointerType>(T.getTypePtr())) 1303 // But treat member function pointers as simple zero integers because 1304 // it's easier than having a special case in LLVM's CodeGen. If LLVM 1305 // CodeGen grows handling for values of non-null member function 1306 // pointers then perhaps we could remove this special case and rely on 1307 // EmitNullMemberPointer for member function pointers. 1308 if (MPT->isMemberDataPointer()) 1309 V = CGM.getCXXABI().EmitNullMemberPointer(MPT); 1310 if (!V) 1311 V = llvm::ConstantInt::get(CGM.Int8Ty, 0); 1312 llvm::DITemplateValueParameter TVP = 1313 DBuilder.createTemplateValueParameter(TheCU, Name, TTy, 1314 cast<llvm::Constant>(V)); 1315 TemplateParams.push_back(TVP); 1316 } break; 1317 case TemplateArgument::Template: { 1318 llvm::DITemplateValueParameter 1319 TVP = DBuilder.createTemplateTemplateParameter( 1320 TheCU, Name, llvm::DIType(), 1321 TA.getAsTemplate().getAsTemplateDecl()->getQualifiedNameAsString()); 1322 TemplateParams.push_back(TVP); 1323 } break; 1324 case TemplateArgument::Pack: { 1325 llvm::DITemplateValueParameter TVP = DBuilder.createTemplateParameterPack( 1326 TheCU, Name, llvm::DIType(), 1327 CollectTemplateParams(nullptr, TA.getPackAsArray(), Unit)); 1328 TemplateParams.push_back(TVP); 1329 } break; 1330 case TemplateArgument::Expression: { 1331 const Expr *E = TA.getAsExpr(); 1332 QualType T = E->getType(); 1333 if (E->isGLValue()) 1334 T = CGM.getContext().getLValueReferenceType(T); 1335 llvm::Constant *V = CGM.EmitConstantExpr(E, T); 1336 assert(V && "Expression in template argument isn't constant"); 1337 llvm::DIType TTy = getOrCreateType(T, Unit); 1338 llvm::DITemplateValueParameter TVP = 1339 DBuilder.createTemplateValueParameter( 1340 TheCU, Name, TTy, cast<llvm::Constant>(V->stripPointerCasts())); 1341 TemplateParams.push_back(TVP); 1342 } break; 1343 // And the following should never occur: 1344 case TemplateArgument::TemplateExpansion: 1345 case TemplateArgument::Null: 1346 llvm_unreachable( 1347 "These argument types shouldn't exist in concrete types"); 1348 } 1349 } 1350 return DBuilder.getOrCreateArray(TemplateParams); 1351 } 1352 1353 /// CollectFunctionTemplateParams - A helper function to collect debug 1354 /// info for function template parameters. 1355 llvm::DIArray CGDebugInfo::CollectFunctionTemplateParams(const FunctionDecl *FD, 1356 llvm::DIFile Unit) { 1357 if (FD->getTemplatedKind() == 1358 FunctionDecl::TK_FunctionTemplateSpecialization) { 1359 const TemplateParameterList *TList = FD->getTemplateSpecializationInfo() 1360 ->getTemplate() 1361 ->getTemplateParameters(); 1362 return CollectTemplateParams( 1363 TList, FD->getTemplateSpecializationArgs()->asArray(), Unit); 1364 } 1365 return llvm::DIArray(); 1366 } 1367 1368 /// CollectCXXTemplateParams - A helper function to collect debug info for 1369 /// template parameters. 1370 llvm::DIArray CGDebugInfo::CollectCXXTemplateParams( 1371 const ClassTemplateSpecializationDecl *TSpecial, llvm::DIFile Unit) { 1372 // Always get the full list of parameters, not just the ones from 1373 // the specialization. 1374 TemplateParameterList *TPList = 1375 TSpecial->getSpecializedTemplate()->getTemplateParameters(); 1376 const TemplateArgumentList &TAList = TSpecial->getTemplateArgs(); 1377 return CollectTemplateParams(TPList, TAList.asArray(), Unit); 1378 } 1379 1380 /// getOrCreateVTablePtrType - Return debug info descriptor for vtable. 1381 llvm::DIType CGDebugInfo::getOrCreateVTablePtrType(llvm::DIFile Unit) { 1382 if (VTablePtrType.isValid()) 1383 return VTablePtrType; 1384 1385 ASTContext &Context = CGM.getContext(); 1386 1387 /* Function type */ 1388 llvm::Metadata *STy = getOrCreateType(Context.IntTy, Unit); 1389 llvm::DITypeArray SElements = DBuilder.getOrCreateTypeArray(STy); 1390 llvm::DIType SubTy = DBuilder.createSubroutineType(Unit, SElements); 1391 unsigned Size = Context.getTypeSize(Context.VoidPtrTy); 1392 llvm::DIType vtbl_ptr_type = 1393 DBuilder.createPointerType(SubTy, Size, 0, "__vtbl_ptr_type"); 1394 VTablePtrType = DBuilder.createPointerType(vtbl_ptr_type, Size); 1395 return VTablePtrType; 1396 } 1397 1398 /// getVTableName - Get vtable name for the given Class. 1399 StringRef CGDebugInfo::getVTableName(const CXXRecordDecl *RD) { 1400 // Copy the gdb compatible name on the side and use its reference. 1401 return internString("_vptr$", RD->getNameAsString()); 1402 } 1403 1404 /// CollectVTableInfo - If the C++ class has vtable info then insert appropriate 1405 /// debug info entry in EltTys vector. 1406 void CGDebugInfo::CollectVTableInfo(const CXXRecordDecl *RD, llvm::DIFile Unit, 1407 SmallVectorImpl<llvm::Metadata *> &EltTys) { 1408 const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD); 1409 1410 // If there is a primary base then it will hold vtable info. 1411 if (RL.getPrimaryBase()) 1412 return; 1413 1414 // If this class is not dynamic then there is not any vtable info to collect. 1415 if (!RD->isDynamicClass()) 1416 return; 1417 1418 unsigned Size = CGM.getContext().getTypeSize(CGM.getContext().VoidPtrTy); 1419 llvm::DIType VPTR = DBuilder.createMemberType( 1420 Unit, getVTableName(RD), Unit, 0, Size, 0, 0, 1421 llvm::DIDescriptor::FlagArtificial, getOrCreateVTablePtrType(Unit)); 1422 EltTys.push_back(VPTR); 1423 } 1424 1425 /// getOrCreateRecordType - Emit record type's standalone debug info. 1426 llvm::DIType CGDebugInfo::getOrCreateRecordType(QualType RTy, 1427 SourceLocation Loc) { 1428 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 1429 llvm::DIType T = getOrCreateType(RTy, getOrCreateFile(Loc)); 1430 return T; 1431 } 1432 1433 /// getOrCreateInterfaceType - Emit an objective c interface type standalone 1434 /// debug info. 1435 llvm::DIType CGDebugInfo::getOrCreateInterfaceType(QualType D, 1436 SourceLocation Loc) { 1437 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 1438 llvm::DIType T = getOrCreateType(D, getOrCreateFile(Loc)); 1439 RetainedTypes.push_back(D.getAsOpaquePtr()); 1440 return T; 1441 } 1442 1443 void CGDebugInfo::completeType(const EnumDecl *ED) { 1444 if (DebugKind <= CodeGenOptions::DebugLineTablesOnly) 1445 return; 1446 QualType Ty = CGM.getContext().getEnumType(ED); 1447 void *TyPtr = Ty.getAsOpaquePtr(); 1448 auto I = TypeCache.find(TyPtr); 1449 if (I == TypeCache.end() || 1450 !llvm::DIType(cast<llvm::MDNode>(I->second)).isForwardDecl()) 1451 return; 1452 llvm::DIType Res = CreateTypeDefinition(Ty->castAs<EnumType>()); 1453 assert(!Res.isForwardDecl()); 1454 TypeCache[TyPtr].reset(Res); 1455 } 1456 1457 void CGDebugInfo::completeType(const RecordDecl *RD) { 1458 if (DebugKind > CodeGenOptions::LimitedDebugInfo || 1459 !CGM.getLangOpts().CPlusPlus) 1460 completeRequiredType(RD); 1461 } 1462 1463 void CGDebugInfo::completeRequiredType(const RecordDecl *RD) { 1464 if (DebugKind <= CodeGenOptions::DebugLineTablesOnly) 1465 return; 1466 1467 if (const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD)) 1468 if (CXXDecl->isDynamicClass()) 1469 return; 1470 1471 QualType Ty = CGM.getContext().getRecordType(RD); 1472 llvm::DIType T = getTypeOrNull(Ty); 1473 if (T && T.isForwardDecl()) 1474 completeClassData(RD); 1475 } 1476 1477 void CGDebugInfo::completeClassData(const RecordDecl *RD) { 1478 if (DebugKind <= CodeGenOptions::DebugLineTablesOnly) 1479 return; 1480 QualType Ty = CGM.getContext().getRecordType(RD); 1481 void *TyPtr = Ty.getAsOpaquePtr(); 1482 auto I = TypeCache.find(TyPtr); 1483 if (I != TypeCache.end() && 1484 !llvm::DIType(cast<llvm::MDNode>(I->second)).isForwardDecl()) 1485 return; 1486 llvm::DIType Res = CreateTypeDefinition(Ty->castAs<RecordType>()); 1487 assert(!Res.isForwardDecl()); 1488 TypeCache[TyPtr].reset(Res); 1489 } 1490 1491 static bool hasExplicitMemberDefinition(CXXRecordDecl::method_iterator I, 1492 CXXRecordDecl::method_iterator End) { 1493 for (; I != End; ++I) 1494 if (FunctionDecl *Tmpl = I->getInstantiatedFromMemberFunction()) 1495 if (!Tmpl->isImplicit() && Tmpl->isThisDeclarationADefinition() && 1496 !I->getMemberSpecializationInfo()->isExplicitSpecialization()) 1497 return true; 1498 return false; 1499 } 1500 1501 static bool shouldOmitDefinition(CodeGenOptions::DebugInfoKind DebugKind, 1502 const RecordDecl *RD, 1503 const LangOptions &LangOpts) { 1504 if (DebugKind > CodeGenOptions::LimitedDebugInfo) 1505 return false; 1506 1507 if (!LangOpts.CPlusPlus) 1508 return false; 1509 1510 if (!RD->isCompleteDefinitionRequired()) 1511 return true; 1512 1513 const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD); 1514 1515 if (!CXXDecl) 1516 return false; 1517 1518 if (CXXDecl->hasDefinition() && CXXDecl->isDynamicClass()) 1519 return true; 1520 1521 TemplateSpecializationKind Spec = TSK_Undeclared; 1522 if (const ClassTemplateSpecializationDecl *SD = 1523 dyn_cast<ClassTemplateSpecializationDecl>(RD)) 1524 Spec = SD->getSpecializationKind(); 1525 1526 if (Spec == TSK_ExplicitInstantiationDeclaration && 1527 hasExplicitMemberDefinition(CXXDecl->method_begin(), 1528 CXXDecl->method_end())) 1529 return true; 1530 1531 return false; 1532 } 1533 1534 /// CreateType - get structure or union type. 1535 llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty) { 1536 RecordDecl *RD = Ty->getDecl(); 1537 llvm::DICompositeType T(getTypeOrNull(QualType(Ty, 0))); 1538 if (T || shouldOmitDefinition(DebugKind, RD, CGM.getLangOpts())) { 1539 if (!T) 1540 T = getOrCreateRecordFwdDecl( 1541 Ty, getContextDescriptor(cast<Decl>(RD->getDeclContext()))); 1542 return T; 1543 } 1544 1545 return CreateTypeDefinition(Ty); 1546 } 1547 1548 llvm::DIType CGDebugInfo::CreateTypeDefinition(const RecordType *Ty) { 1549 RecordDecl *RD = Ty->getDecl(); 1550 1551 // Get overall information about the record type for the debug info. 1552 llvm::DIFile DefUnit = getOrCreateFile(RD->getLocation()); 1553 1554 // Records and classes and unions can all be recursive. To handle them, we 1555 // first generate a debug descriptor for the struct as a forward declaration. 1556 // Then (if it is a definition) we go through and get debug info for all of 1557 // its members. Finally, we create a descriptor for the complete type (which 1558 // may refer to the forward decl if the struct is recursive) and replace all 1559 // uses of the forward declaration with the final definition. 1560 1561 llvm::DICompositeType FwdDecl(getOrCreateLimitedType(Ty, DefUnit)); 1562 assert(FwdDecl.isCompositeType() && 1563 "The debug type of a RecordType should be a llvm::DICompositeType"); 1564 1565 if (FwdDecl.isForwardDecl()) 1566 return FwdDecl; 1567 1568 if (const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD)) 1569 CollectContainingType(CXXDecl, FwdDecl); 1570 1571 // Push the struct on region stack. 1572 LexicalBlockStack.emplace_back(&*FwdDecl); 1573 RegionMap[Ty->getDecl()].reset(FwdDecl); 1574 1575 // Convert all the elements. 1576 SmallVector<llvm::Metadata *, 16> EltTys; 1577 // what about nested types? 1578 1579 // Note: The split of CXXDecl information here is intentional, the 1580 // gdb tests will depend on a certain ordering at printout. The debug 1581 // information offsets are still correct if we merge them all together 1582 // though. 1583 const CXXRecordDecl *CXXDecl = dyn_cast<CXXRecordDecl>(RD); 1584 if (CXXDecl) { 1585 CollectCXXBases(CXXDecl, DefUnit, EltTys, FwdDecl); 1586 CollectVTableInfo(CXXDecl, DefUnit, EltTys); 1587 } 1588 1589 // Collect data fields (including static variables and any initializers). 1590 CollectRecordFields(RD, DefUnit, EltTys, FwdDecl); 1591 if (CXXDecl) 1592 CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl); 1593 1594 LexicalBlockStack.pop_back(); 1595 RegionMap.erase(Ty->getDecl()); 1596 1597 llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys); 1598 DBuilder.replaceArrays(FwdDecl, Elements); 1599 1600 RegionMap[Ty->getDecl()].reset(FwdDecl); 1601 return FwdDecl; 1602 } 1603 1604 /// CreateType - get objective-c object type. 1605 llvm::DIType CGDebugInfo::CreateType(const ObjCObjectType *Ty, 1606 llvm::DIFile Unit) { 1607 // Ignore protocols. 1608 return getOrCreateType(Ty->getBaseType(), Unit); 1609 } 1610 1611 /// \return true if Getter has the default name for the property PD. 1612 static bool hasDefaultGetterName(const ObjCPropertyDecl *PD, 1613 const ObjCMethodDecl *Getter) { 1614 assert(PD); 1615 if (!Getter) 1616 return true; 1617 1618 assert(Getter->getDeclName().isObjCZeroArgSelector()); 1619 return PD->getName() == 1620 Getter->getDeclName().getObjCSelector().getNameForSlot(0); 1621 } 1622 1623 /// \return true if Setter has the default name for the property PD. 1624 static bool hasDefaultSetterName(const ObjCPropertyDecl *PD, 1625 const ObjCMethodDecl *Setter) { 1626 assert(PD); 1627 if (!Setter) 1628 return true; 1629 1630 assert(Setter->getDeclName().isObjCOneArgSelector()); 1631 return SelectorTable::constructSetterName(PD->getName()) == 1632 Setter->getDeclName().getObjCSelector().getNameForSlot(0); 1633 } 1634 1635 /// CreateType - get objective-c interface type. 1636 llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty, 1637 llvm::DIFile Unit) { 1638 ObjCInterfaceDecl *ID = Ty->getDecl(); 1639 if (!ID) 1640 return llvm::DIType(); 1641 1642 // Get overall information about the record type for the debug info. 1643 llvm::DIFile DefUnit = getOrCreateFile(ID->getLocation()); 1644 unsigned Line = getLineNumber(ID->getLocation()); 1645 llvm::dwarf::SourceLanguage RuntimeLang = TheCU.getLanguage(); 1646 1647 // If this is just a forward declaration return a special forward-declaration 1648 // debug type since we won't be able to lay out the entire type. 1649 ObjCInterfaceDecl *Def = ID->getDefinition(); 1650 if (!Def || !Def->getImplementation()) { 1651 llvm::DIType FwdDecl = DBuilder.createReplaceableForwardDecl( 1652 llvm::dwarf::DW_TAG_structure_type, ID->getName(), TheCU, DefUnit, Line, 1653 RuntimeLang); 1654 ObjCInterfaceCache.push_back(ObjCInterfaceCacheEntry(Ty, FwdDecl, Unit)); 1655 return FwdDecl; 1656 } 1657 1658 return CreateTypeDefinition(Ty, Unit); 1659 } 1660 1661 llvm::DIType CGDebugInfo::CreateTypeDefinition(const ObjCInterfaceType *Ty, 1662 llvm::DIFile Unit) { 1663 ObjCInterfaceDecl *ID = Ty->getDecl(); 1664 llvm::DIFile DefUnit = getOrCreateFile(ID->getLocation()); 1665 unsigned Line = getLineNumber(ID->getLocation()); 1666 unsigned RuntimeLang = TheCU.getLanguage(); 1667 1668 // Bit size, align and offset of the type. 1669 uint64_t Size = CGM.getContext().getTypeSize(Ty); 1670 uint64_t Align = CGM.getContext().getTypeAlign(Ty); 1671 1672 unsigned Flags = 0; 1673 if (ID->getImplementation()) 1674 Flags |= llvm::DIDescriptor::FlagObjcClassComplete; 1675 1676 llvm::DICompositeType RealDecl = DBuilder.createStructType( 1677 Unit, ID->getName(), DefUnit, Line, Size, Align, Flags, llvm::DIType(), 1678 llvm::DIArray(), RuntimeLang); 1679 1680 QualType QTy(Ty, 0); 1681 TypeCache[QTy.getAsOpaquePtr()].reset(RealDecl); 1682 1683 // Push the struct on region stack. 1684 LexicalBlockStack.emplace_back(static_cast<llvm::MDNode *>(RealDecl)); 1685 RegionMap[Ty->getDecl()].reset(RealDecl); 1686 1687 // Convert all the elements. 1688 SmallVector<llvm::Metadata *, 16> EltTys; 1689 1690 ObjCInterfaceDecl *SClass = ID->getSuperClass(); 1691 if (SClass) { 1692 llvm::DIType SClassTy = 1693 getOrCreateType(CGM.getContext().getObjCInterfaceType(SClass), Unit); 1694 if (!SClassTy.isValid()) 1695 return llvm::DIType(); 1696 1697 llvm::DIType InhTag = DBuilder.createInheritance(RealDecl, SClassTy, 0, 0); 1698 EltTys.push_back(InhTag); 1699 } 1700 1701 // Create entries for all of the properties. 1702 for (const auto *PD : ID->properties()) { 1703 SourceLocation Loc = PD->getLocation(); 1704 llvm::DIFile PUnit = getOrCreateFile(Loc); 1705 unsigned PLine = getLineNumber(Loc); 1706 ObjCMethodDecl *Getter = PD->getGetterMethodDecl(); 1707 ObjCMethodDecl *Setter = PD->getSetterMethodDecl(); 1708 llvm::MDNode *PropertyNode = DBuilder.createObjCProperty( 1709 PD->getName(), PUnit, PLine, 1710 hasDefaultGetterName(PD, Getter) ? "" 1711 : getSelectorName(PD->getGetterName()), 1712 hasDefaultSetterName(PD, Setter) ? "" 1713 : getSelectorName(PD->getSetterName()), 1714 PD->getPropertyAttributes(), getOrCreateType(PD->getType(), PUnit)); 1715 EltTys.push_back(PropertyNode); 1716 } 1717 1718 const ASTRecordLayout &RL = CGM.getContext().getASTObjCInterfaceLayout(ID); 1719 unsigned FieldNo = 0; 1720 for (ObjCIvarDecl *Field = ID->all_declared_ivar_begin(); Field; 1721 Field = Field->getNextIvar(), ++FieldNo) { 1722 llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit); 1723 if (!FieldTy.isValid()) 1724 return llvm::DIType(); 1725 1726 StringRef FieldName = Field->getName(); 1727 1728 // Ignore unnamed fields. 1729 if (FieldName.empty()) 1730 continue; 1731 1732 // Get the location for the field. 1733 llvm::DIFile FieldDefUnit = getOrCreateFile(Field->getLocation()); 1734 unsigned FieldLine = getLineNumber(Field->getLocation()); 1735 QualType FType = Field->getType(); 1736 uint64_t FieldSize = 0; 1737 unsigned FieldAlign = 0; 1738 1739 if (!FType->isIncompleteArrayType()) { 1740 1741 // Bit size, align and offset of the type. 1742 FieldSize = Field->isBitField() 1743 ? Field->getBitWidthValue(CGM.getContext()) 1744 : CGM.getContext().getTypeSize(FType); 1745 FieldAlign = CGM.getContext().getTypeAlign(FType); 1746 } 1747 1748 uint64_t FieldOffset; 1749 if (CGM.getLangOpts().ObjCRuntime.isNonFragile()) { 1750 // We don't know the runtime offset of an ivar if we're using the 1751 // non-fragile ABI. For bitfields, use the bit offset into the first 1752 // byte of storage of the bitfield. For other fields, use zero. 1753 if (Field->isBitField()) { 1754 FieldOffset = 1755 CGM.getObjCRuntime().ComputeBitfieldBitOffset(CGM, ID, Field); 1756 FieldOffset %= CGM.getContext().getCharWidth(); 1757 } else { 1758 FieldOffset = 0; 1759 } 1760 } else { 1761 FieldOffset = RL.getFieldOffset(FieldNo); 1762 } 1763 1764 unsigned Flags = 0; 1765 if (Field->getAccessControl() == ObjCIvarDecl::Protected) 1766 Flags = llvm::DIDescriptor::FlagProtected; 1767 else if (Field->getAccessControl() == ObjCIvarDecl::Private) 1768 Flags = llvm::DIDescriptor::FlagPrivate; 1769 else if (Field->getAccessControl() == ObjCIvarDecl::Public) 1770 Flags = llvm::DIDescriptor::FlagPublic; 1771 1772 llvm::MDNode *PropertyNode = nullptr; 1773 if (ObjCImplementationDecl *ImpD = ID->getImplementation()) { 1774 if (ObjCPropertyImplDecl *PImpD = 1775 ImpD->FindPropertyImplIvarDecl(Field->getIdentifier())) { 1776 if (ObjCPropertyDecl *PD = PImpD->getPropertyDecl()) { 1777 SourceLocation Loc = PD->getLocation(); 1778 llvm::DIFile PUnit = getOrCreateFile(Loc); 1779 unsigned PLine = getLineNumber(Loc); 1780 ObjCMethodDecl *Getter = PD->getGetterMethodDecl(); 1781 ObjCMethodDecl *Setter = PD->getSetterMethodDecl(); 1782 PropertyNode = DBuilder.createObjCProperty( 1783 PD->getName(), PUnit, PLine, 1784 hasDefaultGetterName(PD, Getter) ? "" : getSelectorName( 1785 PD->getGetterName()), 1786 hasDefaultSetterName(PD, Setter) ? "" : getSelectorName( 1787 PD->getSetterName()), 1788 PD->getPropertyAttributes(), 1789 getOrCreateType(PD->getType(), PUnit)); 1790 } 1791 } 1792 } 1793 FieldTy = DBuilder.createObjCIVar(FieldName, FieldDefUnit, FieldLine, 1794 FieldSize, FieldAlign, FieldOffset, Flags, 1795 FieldTy, PropertyNode); 1796 EltTys.push_back(FieldTy); 1797 } 1798 1799 llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys); 1800 DBuilder.replaceArrays(RealDecl, Elements); 1801 1802 LexicalBlockStack.pop_back(); 1803 return RealDecl; 1804 } 1805 1806 llvm::DIType CGDebugInfo::CreateType(const VectorType *Ty, llvm::DIFile Unit) { 1807 llvm::DIType ElementTy = getOrCreateType(Ty->getElementType(), Unit); 1808 int64_t Count = Ty->getNumElements(); 1809 if (Count == 0) 1810 // If number of elements are not known then this is an unbounded array. 1811 // Use Count == -1 to express such arrays. 1812 Count = -1; 1813 1814 llvm::Metadata *Subscript = DBuilder.getOrCreateSubrange(0, Count); 1815 llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscript); 1816 1817 uint64_t Size = CGM.getContext().getTypeSize(Ty); 1818 uint64_t Align = CGM.getContext().getTypeAlign(Ty); 1819 1820 return DBuilder.createVectorType(Size, Align, ElementTy, SubscriptArray); 1821 } 1822 1823 llvm::DIType CGDebugInfo::CreateType(const ArrayType *Ty, llvm::DIFile Unit) { 1824 uint64_t Size; 1825 uint64_t Align; 1826 1827 // FIXME: make getTypeAlign() aware of VLAs and incomplete array types 1828 if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(Ty)) { 1829 Size = 0; 1830 Align = 1831 CGM.getContext().getTypeAlign(CGM.getContext().getBaseElementType(VAT)); 1832 } else if (Ty->isIncompleteArrayType()) { 1833 Size = 0; 1834 if (Ty->getElementType()->isIncompleteType()) 1835 Align = 0; 1836 else 1837 Align = CGM.getContext().getTypeAlign(Ty->getElementType()); 1838 } else if (Ty->isIncompleteType()) { 1839 Size = 0; 1840 Align = 0; 1841 } else { 1842 // Size and align of the whole array, not the element type. 1843 Size = CGM.getContext().getTypeSize(Ty); 1844 Align = CGM.getContext().getTypeAlign(Ty); 1845 } 1846 1847 // Add the dimensions of the array. FIXME: This loses CV qualifiers from 1848 // interior arrays, do we care? Why aren't nested arrays represented the 1849 // obvious/recursive way? 1850 SmallVector<llvm::Metadata *, 8> Subscripts; 1851 QualType EltTy(Ty, 0); 1852 while ((Ty = dyn_cast<ArrayType>(EltTy))) { 1853 // If the number of elements is known, then count is that number. Otherwise, 1854 // it's -1. This allows us to represent a subrange with an array of 0 1855 // elements, like this: 1856 // 1857 // struct foo { 1858 // int x[0]; 1859 // }; 1860 int64_t Count = -1; // Count == -1 is an unbounded array. 1861 if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(Ty)) 1862 Count = CAT->getSize().getZExtValue(); 1863 1864 // FIXME: Verify this is right for VLAs. 1865 Subscripts.push_back(DBuilder.getOrCreateSubrange(0, Count)); 1866 EltTy = Ty->getElementType(); 1867 } 1868 1869 llvm::DIArray SubscriptArray = DBuilder.getOrCreateArray(Subscripts); 1870 1871 llvm::DIType DbgTy = DBuilder.createArrayType( 1872 Size, Align, getOrCreateType(EltTy, Unit), SubscriptArray); 1873 return DbgTy; 1874 } 1875 1876 llvm::DIType CGDebugInfo::CreateType(const LValueReferenceType *Ty, 1877 llvm::DIFile Unit) { 1878 return CreatePointerLikeType(llvm::dwarf::DW_TAG_reference_type, Ty, 1879 Ty->getPointeeType(), Unit); 1880 } 1881 1882 llvm::DIType CGDebugInfo::CreateType(const RValueReferenceType *Ty, 1883 llvm::DIFile Unit) { 1884 return CreatePointerLikeType(llvm::dwarf::DW_TAG_rvalue_reference_type, Ty, 1885 Ty->getPointeeType(), Unit); 1886 } 1887 1888 llvm::DIType CGDebugInfo::CreateType(const MemberPointerType *Ty, 1889 llvm::DIFile U) { 1890 llvm::DIType ClassType = getOrCreateType(QualType(Ty->getClass(), 0), U); 1891 if (!Ty->getPointeeType()->isFunctionType()) 1892 return DBuilder.createMemberPointerType( 1893 getOrCreateType(Ty->getPointeeType(), U), ClassType, 1894 CGM.getContext().getTypeSize(Ty)); 1895 1896 const FunctionProtoType *FPT = 1897 Ty->getPointeeType()->getAs<FunctionProtoType>(); 1898 return DBuilder.createMemberPointerType( 1899 getOrCreateInstanceMethodType(CGM.getContext().getPointerType(QualType( 1900 Ty->getClass(), FPT->getTypeQuals())), 1901 FPT, U), 1902 ClassType, CGM.getContext().getTypeSize(Ty)); 1903 } 1904 1905 llvm::DIType CGDebugInfo::CreateType(const AtomicType *Ty, llvm::DIFile U) { 1906 // Ignore the atomic wrapping 1907 // FIXME: What is the correct representation? 1908 return getOrCreateType(Ty->getValueType(), U); 1909 } 1910 1911 /// CreateEnumType - get enumeration type. 1912 llvm::DIType CGDebugInfo::CreateEnumType(const EnumType *Ty) { 1913 const EnumDecl *ED = Ty->getDecl(); 1914 uint64_t Size = 0; 1915 uint64_t Align = 0; 1916 if (!ED->getTypeForDecl()->isIncompleteType()) { 1917 Size = CGM.getContext().getTypeSize(ED->getTypeForDecl()); 1918 Align = CGM.getContext().getTypeAlign(ED->getTypeForDecl()); 1919 } 1920 1921 SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU); 1922 1923 // If this is just a forward declaration, construct an appropriately 1924 // marked node and just return it. 1925 if (!ED->getDefinition()) { 1926 llvm::DIDescriptor EDContext; 1927 EDContext = getContextDescriptor(cast<Decl>(ED->getDeclContext())); 1928 llvm::DIFile DefUnit = getOrCreateFile(ED->getLocation()); 1929 unsigned Line = getLineNumber(ED->getLocation()); 1930 StringRef EDName = ED->getName(); 1931 llvm::DIType RetTy = DBuilder.createReplaceableForwardDecl( 1932 llvm::dwarf::DW_TAG_enumeration_type, EDName, EDContext, DefUnit, Line, 1933 0, Size, Align, FullName); 1934 ReplaceMap.emplace_back( 1935 std::piecewise_construct, std::make_tuple(Ty), 1936 std::make_tuple(static_cast<llvm::Metadata *>(RetTy))); 1937 return RetTy; 1938 } 1939 1940 return CreateTypeDefinition(Ty); 1941 } 1942 1943 llvm::DIType CGDebugInfo::CreateTypeDefinition(const EnumType *Ty) { 1944 const EnumDecl *ED = Ty->getDecl(); 1945 uint64_t Size = 0; 1946 uint64_t Align = 0; 1947 if (!ED->getTypeForDecl()->isIncompleteType()) { 1948 Size = CGM.getContext().getTypeSize(ED->getTypeForDecl()); 1949 Align = CGM.getContext().getTypeAlign(ED->getTypeForDecl()); 1950 } 1951 1952 SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU); 1953 1954 // Create DIEnumerator elements for each enumerator. 1955 SmallVector<llvm::Metadata *, 16> Enumerators; 1956 ED = ED->getDefinition(); 1957 for (const auto *Enum : ED->enumerators()) { 1958 Enumerators.push_back(DBuilder.createEnumerator( 1959 Enum->getName(), Enum->getInitVal().getSExtValue())); 1960 } 1961 1962 // Return a CompositeType for the enum itself. 1963 llvm::DIArray EltArray = DBuilder.getOrCreateArray(Enumerators); 1964 1965 llvm::DIFile DefUnit = getOrCreateFile(ED->getLocation()); 1966 unsigned Line = getLineNumber(ED->getLocation()); 1967 llvm::DIDescriptor EnumContext = 1968 getContextDescriptor(cast<Decl>(ED->getDeclContext())); 1969 llvm::DIType ClassTy = ED->isFixed() 1970 ? getOrCreateType(ED->getIntegerType(), DefUnit) 1971 : llvm::DIType(); 1972 llvm::DIType DbgTy = 1973 DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit, Line, 1974 Size, Align, EltArray, ClassTy, FullName); 1975 return DbgTy; 1976 } 1977 1978 static QualType UnwrapTypeForDebugInfo(QualType T, const ASTContext &C) { 1979 Qualifiers Quals; 1980 do { 1981 Qualifiers InnerQuals = T.getLocalQualifiers(); 1982 // Qualifiers::operator+() doesn't like it if you add a Qualifier 1983 // that is already there. 1984 Quals += Qualifiers::removeCommonQualifiers(Quals, InnerQuals); 1985 Quals += InnerQuals; 1986 QualType LastT = T; 1987 switch (T->getTypeClass()) { 1988 default: 1989 return C.getQualifiedType(T.getTypePtr(), Quals); 1990 case Type::TemplateSpecialization: { 1991 const auto *Spec = cast<TemplateSpecializationType>(T); 1992 if (Spec->isTypeAlias()) 1993 return C.getQualifiedType(T.getTypePtr(), Quals); 1994 T = Spec->desugar(); 1995 break; 1996 } 1997 case Type::TypeOfExpr: 1998 T = cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType(); 1999 break; 2000 case Type::TypeOf: 2001 T = cast<TypeOfType>(T)->getUnderlyingType(); 2002 break; 2003 case Type::Decltype: 2004 T = cast<DecltypeType>(T)->getUnderlyingType(); 2005 break; 2006 case Type::UnaryTransform: 2007 T = cast<UnaryTransformType>(T)->getUnderlyingType(); 2008 break; 2009 case Type::Attributed: 2010 T = cast<AttributedType>(T)->getEquivalentType(); 2011 break; 2012 case Type::Elaborated: 2013 T = cast<ElaboratedType>(T)->getNamedType(); 2014 break; 2015 case Type::Paren: 2016 T = cast<ParenType>(T)->getInnerType(); 2017 break; 2018 case Type::SubstTemplateTypeParm: 2019 T = cast<SubstTemplateTypeParmType>(T)->getReplacementType(); 2020 break; 2021 case Type::Auto: 2022 QualType DT = cast<AutoType>(T)->getDeducedType(); 2023 assert(!DT.isNull() && "Undeduced types shouldn't reach here."); 2024 T = DT; 2025 break; 2026 } 2027 2028 assert(T != LastT && "Type unwrapping failed to unwrap!"); 2029 (void)LastT; 2030 } while (true); 2031 } 2032 2033 /// getType - Get the type from the cache or return null type if it doesn't 2034 /// exist. 2035 llvm::DIType CGDebugInfo::getTypeOrNull(QualType Ty) { 2036 2037 // Unwrap the type as needed for debug information. 2038 Ty = UnwrapTypeForDebugInfo(Ty, CGM.getContext()); 2039 2040 auto it = TypeCache.find(Ty.getAsOpaquePtr()); 2041 if (it != TypeCache.end()) { 2042 // Verify that the debug info still exists. 2043 if (llvm::Metadata *V = it->second) 2044 return llvm::DIType(cast<llvm::MDNode>(V)); 2045 } 2046 2047 return llvm::DIType(); 2048 } 2049 2050 void CGDebugInfo::completeTemplateDefinition( 2051 const ClassTemplateSpecializationDecl &SD) { 2052 if (DebugKind <= CodeGenOptions::DebugLineTablesOnly) 2053 return; 2054 2055 completeClassData(&SD); 2056 // In case this type has no member function definitions being emitted, ensure 2057 // it is retained 2058 RetainedTypes.push_back(CGM.getContext().getRecordType(&SD).getAsOpaquePtr()); 2059 } 2060 2061 /// getOrCreateType - Get the type from the cache or create a new 2062 /// one if necessary. 2063 llvm::DIType CGDebugInfo::getOrCreateType(QualType Ty, llvm::DIFile Unit) { 2064 if (Ty.isNull()) 2065 return llvm::DIType(); 2066 2067 // Unwrap the type as needed for debug information. 2068 Ty = UnwrapTypeForDebugInfo(Ty, CGM.getContext()); 2069 2070 if (llvm::DIType T = getTypeOrNull(Ty)) 2071 return T; 2072 2073 // Otherwise create the type. 2074 llvm::DIType Res = CreateTypeNode(Ty, Unit); 2075 void *TyPtr = Ty.getAsOpaquePtr(); 2076 2077 // And update the type cache. 2078 TypeCache[TyPtr].reset(Res); 2079 2080 return Res; 2081 } 2082 2083 /// Currently the checksum of an interface includes the number of 2084 /// ivars and property accessors. 2085 unsigned CGDebugInfo::Checksum(const ObjCInterfaceDecl *ID) { 2086 // The assumption is that the number of ivars can only increase 2087 // monotonically, so it is safe to just use their current number as 2088 // a checksum. 2089 unsigned Sum = 0; 2090 for (const ObjCIvarDecl *Ivar = ID->all_declared_ivar_begin(); 2091 Ivar != nullptr; Ivar = Ivar->getNextIvar()) 2092 ++Sum; 2093 2094 return Sum; 2095 } 2096 2097 ObjCInterfaceDecl *CGDebugInfo::getObjCInterfaceDecl(QualType Ty) { 2098 switch (Ty->getTypeClass()) { 2099 case Type::ObjCObjectPointer: 2100 return getObjCInterfaceDecl( 2101 cast<ObjCObjectPointerType>(Ty)->getPointeeType()); 2102 case Type::ObjCInterface: 2103 return cast<ObjCInterfaceType>(Ty)->getDecl(); 2104 default: 2105 return nullptr; 2106 } 2107 } 2108 2109 /// CreateTypeNode - Create a new debug type node. 2110 llvm::DIType CGDebugInfo::CreateTypeNode(QualType Ty, llvm::DIFile Unit) { 2111 // Handle qualifiers, which recursively handles what they refer to. 2112 if (Ty.hasLocalQualifiers()) 2113 return CreateQualifiedType(Ty, Unit); 2114 2115 // Work out details of type. 2116 switch (Ty->getTypeClass()) { 2117 #define TYPE(Class, Base) 2118 #define ABSTRACT_TYPE(Class, Base) 2119 #define NON_CANONICAL_TYPE(Class, Base) 2120 #define DEPENDENT_TYPE(Class, Base) case Type::Class: 2121 #include "clang/AST/TypeNodes.def" 2122 llvm_unreachable("Dependent types cannot show up in debug information"); 2123 2124 case Type::ExtVector: 2125 case Type::Vector: 2126 return CreateType(cast<VectorType>(Ty), Unit); 2127 case Type::ObjCObjectPointer: 2128 return CreateType(cast<ObjCObjectPointerType>(Ty), Unit); 2129 case Type::ObjCObject: 2130 return CreateType(cast<ObjCObjectType>(Ty), Unit); 2131 case Type::ObjCInterface: 2132 return CreateType(cast<ObjCInterfaceType>(Ty), Unit); 2133 case Type::Builtin: 2134 return CreateType(cast<BuiltinType>(Ty)); 2135 case Type::Complex: 2136 return CreateType(cast<ComplexType>(Ty)); 2137 case Type::Pointer: 2138 return CreateType(cast<PointerType>(Ty), Unit); 2139 case Type::Adjusted: 2140 case Type::Decayed: 2141 // Decayed and adjusted types use the adjusted type in LLVM and DWARF. 2142 return CreateType( 2143 cast<PointerType>(cast<AdjustedType>(Ty)->getAdjustedType()), Unit); 2144 case Type::BlockPointer: 2145 return CreateType(cast<BlockPointerType>(Ty), Unit); 2146 case Type::Typedef: 2147 return CreateType(cast<TypedefType>(Ty), Unit); 2148 case Type::Record: 2149 return CreateType(cast<RecordType>(Ty)); 2150 case Type::Enum: 2151 return CreateEnumType(cast<EnumType>(Ty)); 2152 case Type::FunctionProto: 2153 case Type::FunctionNoProto: 2154 return CreateType(cast<FunctionType>(Ty), Unit); 2155 case Type::ConstantArray: 2156 case Type::VariableArray: 2157 case Type::IncompleteArray: 2158 return CreateType(cast<ArrayType>(Ty), Unit); 2159 2160 case Type::LValueReference: 2161 return CreateType(cast<LValueReferenceType>(Ty), Unit); 2162 case Type::RValueReference: 2163 return CreateType(cast<RValueReferenceType>(Ty), Unit); 2164 2165 case Type::MemberPointer: 2166 return CreateType(cast<MemberPointerType>(Ty), Unit); 2167 2168 case Type::Atomic: 2169 return CreateType(cast<AtomicType>(Ty), Unit); 2170 2171 case Type::TemplateSpecialization: 2172 return CreateType(cast<TemplateSpecializationType>(Ty), Unit); 2173 2174 case Type::Auto: 2175 case Type::Attributed: 2176 case Type::Elaborated: 2177 case Type::Paren: 2178 case Type::SubstTemplateTypeParm: 2179 case Type::TypeOfExpr: 2180 case Type::TypeOf: 2181 case Type::Decltype: 2182 case Type::UnaryTransform: 2183 case Type::PackExpansion: 2184 break; 2185 } 2186 2187 llvm_unreachable("type should have been unwrapped!"); 2188 } 2189 2190 /// getOrCreateLimitedType - Get the type from the cache or create a new 2191 /// limited type if necessary. 2192 llvm::DIType CGDebugInfo::getOrCreateLimitedType(const RecordType *Ty, 2193 llvm::DIFile Unit) { 2194 QualType QTy(Ty, 0); 2195 2196 llvm::DICompositeType T(getTypeOrNull(QTy)); 2197 2198 // We may have cached a forward decl when we could have created 2199 // a non-forward decl. Go ahead and create a non-forward decl 2200 // now. 2201 if (T && !T.isForwardDecl()) 2202 return T; 2203 2204 // Otherwise create the type. 2205 llvm::DICompositeType Res = CreateLimitedType(Ty); 2206 2207 // Propagate members from the declaration to the definition 2208 // CreateType(const RecordType*) will overwrite this with the members in the 2209 // correct order if the full type is needed. 2210 DBuilder.replaceArrays(Res, T.getElements()); 2211 2212 // And update the type cache. 2213 TypeCache[QTy.getAsOpaquePtr()].reset(Res); 2214 return Res; 2215 } 2216 2217 // TODO: Currently used for context chains when limiting debug info. 2218 llvm::DICompositeType CGDebugInfo::CreateLimitedType(const RecordType *Ty) { 2219 RecordDecl *RD = Ty->getDecl(); 2220 2221 // Get overall information about the record type for the debug info. 2222 llvm::DIFile DefUnit = getOrCreateFile(RD->getLocation()); 2223 unsigned Line = getLineNumber(RD->getLocation()); 2224 StringRef RDName = getClassName(RD); 2225 2226 llvm::DIDescriptor RDContext = 2227 getContextDescriptor(cast<Decl>(RD->getDeclContext())); 2228 2229 // If we ended up creating the type during the context chain construction, 2230 // just return that. 2231 llvm::DICompositeType T(getTypeOrNull(CGM.getContext().getRecordType(RD))); 2232 if (T && (!T.isForwardDecl() || !RD->getDefinition())) 2233 return T; 2234 2235 // If this is just a forward or incomplete declaration, construct an 2236 // appropriately marked node and just return it. 2237 const RecordDecl *D = RD->getDefinition(); 2238 if (!D || !D->isCompleteDefinition()) 2239 return getOrCreateRecordFwdDecl(Ty, RDContext); 2240 2241 uint64_t Size = CGM.getContext().getTypeSize(Ty); 2242 uint64_t Align = CGM.getContext().getTypeAlign(Ty); 2243 llvm::DICompositeType RealDecl; 2244 2245 SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU); 2246 2247 if (RD->isUnion()) 2248 RealDecl = DBuilder.createUnionType(RDContext, RDName, DefUnit, Line, Size, 2249 Align, 0, llvm::DIArray(), 0, FullName); 2250 else if (RD->isClass()) { 2251 // FIXME: This could be a struct type giving a default visibility different 2252 // than C++ class type, but needs llvm metadata changes first. 2253 RealDecl = DBuilder.createClassType( 2254 RDContext, RDName, DefUnit, Line, Size, Align, 0, 0, llvm::DIType(), 2255 llvm::DIArray(), llvm::DIType(), llvm::DIArray(), FullName); 2256 } else 2257 RealDecl = DBuilder.createStructType( 2258 RDContext, RDName, DefUnit, Line, Size, Align, 0, llvm::DIType(), 2259 llvm::DIArray(), 0, llvm::DIType(), FullName); 2260 2261 RegionMap[Ty->getDecl()].reset(RealDecl); 2262 TypeCache[QualType(Ty, 0).getAsOpaquePtr()].reset(RealDecl); 2263 2264 if (const ClassTemplateSpecializationDecl *TSpecial = 2265 dyn_cast<ClassTemplateSpecializationDecl>(RD)) 2266 DBuilder.replaceArrays(RealDecl, llvm::DIArray(), 2267 CollectCXXTemplateParams(TSpecial, DefUnit)); 2268 return RealDecl; 2269 } 2270 2271 void CGDebugInfo::CollectContainingType(const CXXRecordDecl *RD, 2272 llvm::DICompositeType RealDecl) { 2273 // A class's primary base or the class itself contains the vtable. 2274 llvm::DICompositeType ContainingType; 2275 const ASTRecordLayout &RL = CGM.getContext().getASTRecordLayout(RD); 2276 if (const CXXRecordDecl *PBase = RL.getPrimaryBase()) { 2277 // Seek non-virtual primary base root. 2278 while (1) { 2279 const ASTRecordLayout &BRL = CGM.getContext().getASTRecordLayout(PBase); 2280 const CXXRecordDecl *PBT = BRL.getPrimaryBase(); 2281 if (PBT && !BRL.isPrimaryBaseVirtual()) 2282 PBase = PBT; 2283 else 2284 break; 2285 } 2286 ContainingType = llvm::DICompositeType( 2287 getOrCreateType(QualType(PBase->getTypeForDecl(), 0), 2288 getOrCreateFile(RD->getLocation()))); 2289 } else if (RD->isDynamicClass()) 2290 ContainingType = RealDecl; 2291 2292 DBuilder.replaceVTableHolder(RealDecl, ContainingType); 2293 } 2294 2295 /// CreateMemberType - Create new member and increase Offset by FType's size. 2296 llvm::DIType CGDebugInfo::CreateMemberType(llvm::DIFile Unit, QualType FType, 2297 StringRef Name, uint64_t *Offset) { 2298 llvm::DIType FieldTy = CGDebugInfo::getOrCreateType(FType, Unit); 2299 uint64_t FieldSize = CGM.getContext().getTypeSize(FType); 2300 unsigned FieldAlign = CGM.getContext().getTypeAlign(FType); 2301 llvm::DIType Ty = DBuilder.createMemberType(Unit, Name, Unit, 0, FieldSize, 2302 FieldAlign, *Offset, 0, FieldTy); 2303 *Offset += FieldSize; 2304 return Ty; 2305 } 2306 2307 void CGDebugInfo::collectFunctionDeclProps(GlobalDecl GD, 2308 llvm::DIFile Unit, 2309 StringRef &Name, StringRef &LinkageName, 2310 llvm::DIDescriptor &FDContext, 2311 llvm::DIArray &TParamsArray, 2312 unsigned &Flags) { 2313 const FunctionDecl *FD = cast<FunctionDecl>(GD.getDecl()); 2314 Name = getFunctionName(FD); 2315 // Use mangled name as linkage name for C/C++ functions. 2316 if (FD->hasPrototype()) { 2317 LinkageName = CGM.getMangledName(GD); 2318 Flags |= llvm::DIDescriptor::FlagPrototyped; 2319 } 2320 // No need to replicate the linkage name if it isn't different from the 2321 // subprogram name, no need to have it at all unless coverage is enabled or 2322 // debug is set to more than just line tables. 2323 if (LinkageName == Name || 2324 (!CGM.getCodeGenOpts().EmitGcovArcs && 2325 !CGM.getCodeGenOpts().EmitGcovNotes && 2326 DebugKind <= CodeGenOptions::DebugLineTablesOnly)) 2327 LinkageName = StringRef(); 2328 2329 if (DebugKind >= CodeGenOptions::LimitedDebugInfo) { 2330 if (const NamespaceDecl *NSDecl = 2331 dyn_cast_or_null<NamespaceDecl>(FD->getDeclContext())) 2332 FDContext = getOrCreateNameSpace(NSDecl); 2333 else if (const RecordDecl *RDecl = 2334 dyn_cast_or_null<RecordDecl>(FD->getDeclContext())) 2335 FDContext = getContextDescriptor(cast<Decl>(RDecl)); 2336 // Collect template parameters. 2337 TParamsArray = CollectFunctionTemplateParams(FD, Unit); 2338 } 2339 } 2340 2341 void CGDebugInfo::collectVarDeclProps(const VarDecl *VD, llvm::DIFile &Unit, 2342 unsigned &LineNo, QualType &T, 2343 StringRef &Name, StringRef &LinkageName, 2344 llvm::DIDescriptor &VDContext) { 2345 Unit = getOrCreateFile(VD->getLocation()); 2346 LineNo = getLineNumber(VD->getLocation()); 2347 2348 setLocation(VD->getLocation()); 2349 2350 T = VD->getType(); 2351 if (T->isIncompleteArrayType()) { 2352 // CodeGen turns int[] into int[1] so we'll do the same here. 2353 llvm::APInt ConstVal(32, 1); 2354 QualType ET = CGM.getContext().getAsArrayType(T)->getElementType(); 2355 2356 T = CGM.getContext().getConstantArrayType(ET, ConstVal, 2357 ArrayType::Normal, 0); 2358 } 2359 2360 Name = VD->getName(); 2361 if (VD->getDeclContext() && !isa<FunctionDecl>(VD->getDeclContext()) && 2362 !isa<ObjCMethodDecl>(VD->getDeclContext())) 2363 LinkageName = CGM.getMangledName(VD); 2364 if (LinkageName == Name) 2365 LinkageName = StringRef(); 2366 2367 // Since we emit declarations (DW_AT_members) for static members, place the 2368 // definition of those static members in the namespace they were declared in 2369 // in the source code (the lexical decl context). 2370 // FIXME: Generalize this for even non-member global variables where the 2371 // declaration and definition may have different lexical decl contexts, once 2372 // we have support for emitting declarations of (non-member) global variables. 2373 VDContext = getContextDescriptor( 2374 dyn_cast<Decl>(VD->isStaticDataMember() ? VD->getLexicalDeclContext() 2375 : VD->getDeclContext())); 2376 } 2377 2378 llvm::DISubprogram 2379 CGDebugInfo::getFunctionForwardDeclaration(const FunctionDecl *FD) { 2380 llvm::DIArray TParamsArray; 2381 StringRef Name, LinkageName; 2382 unsigned Flags = 0; 2383 SourceLocation Loc = FD->getLocation(); 2384 llvm::DIFile Unit = getOrCreateFile(Loc); 2385 llvm::DIDescriptor DContext(Unit); 2386 unsigned Line = getLineNumber(Loc); 2387 2388 collectFunctionDeclProps(FD, Unit, Name, LinkageName, DContext, 2389 TParamsArray, Flags); 2390 // Build function type. 2391 SmallVector<QualType, 16> ArgTypes; 2392 for (const ParmVarDecl *Parm: FD->parameters()) 2393 ArgTypes.push_back(Parm->getType()); 2394 QualType FnType = 2395 CGM.getContext().getFunctionType(FD->getReturnType(), ArgTypes, 2396 FunctionProtoType::ExtProtoInfo()); 2397 llvm::DISubprogram SP = 2398 DBuilder.createTempFunctionFwdDecl(DContext, Name, LinkageName, Unit, Line, 2399 getOrCreateFunctionType(FD, FnType, Unit), 2400 !FD->isExternallyVisible(), 2401 false /*declaration*/, 0, Flags, 2402 CGM.getLangOpts().Optimize, nullptr, 2403 TParamsArray, getFunctionDeclaration(FD)); 2404 const FunctionDecl *CanonDecl = cast<FunctionDecl>(FD->getCanonicalDecl()); 2405 FwdDeclReplaceMap.emplace_back( 2406 std::piecewise_construct, std::make_tuple(CanonDecl), 2407 std::make_tuple(static_cast<llvm::Metadata *>(SP))); 2408 return SP; 2409 } 2410 2411 llvm::DIGlobalVariable 2412 CGDebugInfo::getGlobalVariableForwardDeclaration(const VarDecl *VD) { 2413 QualType T; 2414 StringRef Name, LinkageName; 2415 SourceLocation Loc = VD->getLocation(); 2416 llvm::DIFile Unit = getOrCreateFile(Loc); 2417 llvm::DIDescriptor DContext(Unit); 2418 unsigned Line = getLineNumber(Loc); 2419 2420 collectVarDeclProps(VD, Unit, Line, T, Name, LinkageName, DContext); 2421 llvm::DIGlobalVariable GV = 2422 DBuilder.createTempGlobalVariableFwdDecl(DContext, Name, LinkageName, Unit, 2423 Line, getOrCreateType(T, Unit), 2424 !VD->isExternallyVisible(), 2425 nullptr, nullptr); 2426 FwdDeclReplaceMap.emplace_back( 2427 std::piecewise_construct, 2428 std::make_tuple(cast<VarDecl>(VD->getCanonicalDecl())), 2429 std::make_tuple(static_cast<llvm::Metadata *>(GV))); 2430 return GV; 2431 } 2432 2433 llvm::DIDescriptor CGDebugInfo::getDeclarationOrDefinition(const Decl *D) { 2434 // We only need a declaration (not a definition) of the type - so use whatever 2435 // we would otherwise do to get a type for a pointee. (forward declarations in 2436 // limited debug info, full definitions (if the type definition is available) 2437 // in unlimited debug info) 2438 if (const TypeDecl *TD = dyn_cast<TypeDecl>(D)) 2439 return getOrCreateType(CGM.getContext().getTypeDeclType(TD), 2440 getOrCreateFile(TD->getLocation())); 2441 auto I = DeclCache.find(D->getCanonicalDecl()); 2442 2443 if (I != DeclCache.end()) 2444 return llvm::DIDescriptor(dyn_cast_or_null<llvm::MDNode>(I->second)); 2445 2446 // No definition for now. Emit a forward definition that might be 2447 // merged with a potential upcoming definition. 2448 if (const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D)) 2449 return getFunctionForwardDeclaration(FD); 2450 else if (const auto *VD = dyn_cast<VarDecl>(D)) 2451 return getGlobalVariableForwardDeclaration(VD); 2452 2453 return llvm::DIDescriptor(); 2454 } 2455 2456 /// getFunctionDeclaration - Return debug info descriptor to describe method 2457 /// declaration for the given method definition. 2458 llvm::DISubprogram CGDebugInfo::getFunctionDeclaration(const Decl *D) { 2459 if (!D || DebugKind <= CodeGenOptions::DebugLineTablesOnly) 2460 return llvm::DISubprogram(); 2461 2462 const FunctionDecl *FD = dyn_cast<FunctionDecl>(D); 2463 if (!FD) 2464 return llvm::DISubprogram(); 2465 2466 // Setup context. 2467 llvm::DIScope S = getContextDescriptor(cast<Decl>(D->getDeclContext())); 2468 2469 auto MI = SPCache.find(FD->getCanonicalDecl()); 2470 if (MI == SPCache.end()) { 2471 if (const CXXMethodDecl *MD = 2472 dyn_cast<CXXMethodDecl>(FD->getCanonicalDecl())) { 2473 llvm::DICompositeType T(S); 2474 llvm::DISubprogram SP = 2475 CreateCXXMemberFunction(MD, getOrCreateFile(MD->getLocation()), T); 2476 return SP; 2477 } 2478 } 2479 if (MI != SPCache.end()) { 2480 llvm::DISubprogram SP(dyn_cast_or_null<llvm::MDNode>(MI->second)); 2481 if (SP.isSubprogram() && !SP.isDefinition()) 2482 return SP; 2483 } 2484 2485 for (auto NextFD : FD->redecls()) { 2486 auto MI = SPCache.find(NextFD->getCanonicalDecl()); 2487 if (MI != SPCache.end()) { 2488 llvm::DISubprogram SP(dyn_cast_or_null<llvm::MDNode>(MI->second)); 2489 if (SP.isSubprogram() && !SP.isDefinition()) 2490 return SP; 2491 } 2492 } 2493 return llvm::DISubprogram(); 2494 } 2495 2496 // getOrCreateFunctionType - Construct DIType. If it is a c++ method, include 2497 // implicit parameter "this". 2498 llvm::DICompositeType CGDebugInfo::getOrCreateFunctionType(const Decl *D, 2499 QualType FnType, 2500 llvm::DIFile F) { 2501 if (!D || DebugKind <= CodeGenOptions::DebugLineTablesOnly) 2502 // Create fake but valid subroutine type. Otherwise 2503 // llvm::DISubprogram::Verify() would return false, and 2504 // subprogram DIE will miss DW_AT_decl_file and 2505 // DW_AT_decl_line fields. 2506 return DBuilder.createSubroutineType(F, 2507 DBuilder.getOrCreateTypeArray(None)); 2508 2509 if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) 2510 return getOrCreateMethodType(Method, F); 2511 if (const ObjCMethodDecl *OMethod = dyn_cast<ObjCMethodDecl>(D)) { 2512 // Add "self" and "_cmd" 2513 SmallVector<llvm::Metadata *, 16> Elts; 2514 2515 // First element is always return type. For 'void' functions it is NULL. 2516 QualType ResultTy = OMethod->getReturnType(); 2517 2518 // Replace the instancetype keyword with the actual type. 2519 if (ResultTy == CGM.getContext().getObjCInstanceType()) 2520 ResultTy = CGM.getContext().getPointerType( 2521 QualType(OMethod->getClassInterface()->getTypeForDecl(), 0)); 2522 2523 Elts.push_back(getOrCreateType(ResultTy, F)); 2524 // "self" pointer is always first argument. 2525 QualType SelfDeclTy = OMethod->getSelfDecl()->getType(); 2526 llvm::DIType SelfTy = getOrCreateType(SelfDeclTy, F); 2527 Elts.push_back(CreateSelfType(SelfDeclTy, SelfTy)); 2528 // "_cmd" pointer is always second argument. 2529 llvm::DIType CmdTy = getOrCreateType(OMethod->getCmdDecl()->getType(), F); 2530 Elts.push_back(DBuilder.createArtificialType(CmdTy)); 2531 // Get rest of the arguments. 2532 for (const auto *PI : OMethod->params()) 2533 Elts.push_back(getOrCreateType(PI->getType(), F)); 2534 // Variadic methods need a special marker at the end of the type list. 2535 if (OMethod->isVariadic()) 2536 Elts.push_back(DBuilder.createUnspecifiedParameter()); 2537 2538 llvm::DITypeArray EltTypeArray = DBuilder.getOrCreateTypeArray(Elts); 2539 return DBuilder.createSubroutineType(F, EltTypeArray); 2540 } 2541 2542 // Handle variadic function types; they need an additional 2543 // unspecified parameter. 2544 if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) 2545 if (FD->isVariadic()) { 2546 SmallVector<llvm::Metadata *, 16> EltTys; 2547 EltTys.push_back(getOrCreateType(FD->getReturnType(), F)); 2548 if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(FnType)) 2549 for (unsigned i = 0, e = FPT->getNumParams(); i != e; ++i) 2550 EltTys.push_back(getOrCreateType(FPT->getParamType(i), F)); 2551 EltTys.push_back(DBuilder.createUnspecifiedParameter()); 2552 llvm::DITypeArray EltTypeArray = DBuilder.getOrCreateTypeArray(EltTys); 2553 return DBuilder.createSubroutineType(F, EltTypeArray); 2554 } 2555 2556 return llvm::DICompositeType(getOrCreateType(FnType, F)); 2557 } 2558 2559 /// EmitFunctionStart - Constructs the debug code for entering a function. 2560 void CGDebugInfo::EmitFunctionStart(GlobalDecl GD, SourceLocation Loc, 2561 SourceLocation ScopeLoc, QualType FnType, 2562 llvm::Function *Fn, CGBuilderTy &Builder) { 2563 2564 StringRef Name; 2565 StringRef LinkageName; 2566 2567 FnBeginRegionCount.push_back(LexicalBlockStack.size()); 2568 2569 const Decl *D = GD.getDecl(); 2570 bool HasDecl = (D != nullptr); 2571 2572 unsigned Flags = 0; 2573 llvm::DIFile Unit = getOrCreateFile(Loc); 2574 llvm::DIDescriptor FDContext(Unit); 2575 llvm::DIArray TParamsArray; 2576 if (!HasDecl) { 2577 // Use llvm function name. 2578 LinkageName = Fn->getName(); 2579 } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 2580 // If there is a DISubprogram for this function available then use it. 2581 auto FI = SPCache.find(FD->getCanonicalDecl()); 2582 if (FI != SPCache.end()) { 2583 llvm::DIDescriptor SP(dyn_cast_or_null<llvm::MDNode>(FI->second)); 2584 if (SP.isSubprogram() && llvm::DISubprogram(SP).isDefinition()) { 2585 llvm::MDNode *SPN = SP; 2586 LexicalBlockStack.emplace_back(SPN); 2587 RegionMap[D].reset(SP); 2588 return; 2589 } 2590 } 2591 collectFunctionDeclProps(GD, Unit, Name, LinkageName, FDContext, 2592 TParamsArray, Flags); 2593 } else if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)) { 2594 Name = getObjCMethodName(OMD); 2595 Flags |= llvm::DIDescriptor::FlagPrototyped; 2596 } else { 2597 // Use llvm function name. 2598 Name = Fn->getName(); 2599 Flags |= llvm::DIDescriptor::FlagPrototyped; 2600 } 2601 if (!Name.empty() && Name[0] == '\01') 2602 Name = Name.substr(1); 2603 2604 if (!HasDecl || D->isImplicit()) { 2605 Flags |= llvm::DIDescriptor::FlagArtificial; 2606 // Artificial functions without a location should not silently reuse CurLoc. 2607 if (Loc.isInvalid()) 2608 CurLoc = SourceLocation(); 2609 } 2610 unsigned LineNo = getLineNumber(Loc); 2611 unsigned ScopeLine = getLineNumber(ScopeLoc); 2612 2613 // FIXME: The function declaration we're constructing here is mostly reusing 2614 // declarations from CXXMethodDecl and not constructing new ones for arbitrary 2615 // FunctionDecls. When/if we fix this we can have FDContext be TheCU/null for 2616 // all subprograms instead of the actual context since subprogram definitions 2617 // are emitted as CU level entities by the backend. 2618 llvm::DISubprogram SP = DBuilder.createFunction( 2619 FDContext, Name, LinkageName, Unit, LineNo, 2620 getOrCreateFunctionType(D, FnType, Unit), Fn->hasInternalLinkage(), 2621 true /*definition*/, ScopeLine, Flags, CGM.getLangOpts().Optimize, Fn, 2622 TParamsArray, getFunctionDeclaration(D)); 2623 // We might get here with a VarDecl in the case we're generating 2624 // code for the initialization of globals. Do not record these decls 2625 // as they will overwrite the actual VarDecl Decl in the cache. 2626 if (HasDecl && isa<FunctionDecl>(D)) 2627 DeclCache[D->getCanonicalDecl()].reset(static_cast<llvm::Metadata *>(SP)); 2628 2629 // Push the function onto the lexical block stack. 2630 llvm::MDNode *SPN = SP; 2631 LexicalBlockStack.emplace_back(SPN); 2632 2633 if (HasDecl) 2634 RegionMap[D].reset(SP); 2635 } 2636 2637 /// EmitLocation - Emit metadata to indicate a change in line/column 2638 /// information in the source file. If the location is invalid, the 2639 /// previous location will be reused. 2640 void CGDebugInfo::EmitLocation(CGBuilderTy &Builder, SourceLocation Loc) { 2641 // Update our current location 2642 setLocation(Loc); 2643 2644 if (CurLoc.isInvalid() || CurLoc.isMacroID()) 2645 return; 2646 2647 llvm::MDNode *Scope = LexicalBlockStack.back(); 2648 Builder.SetCurrentDebugLocation(llvm::DebugLoc::get( 2649 getLineNumber(CurLoc), getColumnNumber(CurLoc), Scope)); 2650 } 2651 2652 /// CreateLexicalBlock - Creates a new lexical block node and pushes it on 2653 /// the stack. 2654 void CGDebugInfo::CreateLexicalBlock(SourceLocation Loc) { 2655 llvm::MDNode *Back = nullptr; 2656 if (!LexicalBlockStack.empty()) 2657 Back = LexicalBlockStack.back().get(); 2658 llvm::DIDescriptor D = DBuilder.createLexicalBlock( 2659 llvm::DIDescriptor(Back), getOrCreateFile(CurLoc), getLineNumber(CurLoc), 2660 getColumnNumber(CurLoc)); 2661 llvm::MDNode *DN = D; 2662 LexicalBlockStack.emplace_back(DN); 2663 } 2664 2665 /// EmitLexicalBlockStart - Constructs the debug code for entering a declarative 2666 /// region - beginning of a DW_TAG_lexical_block. 2667 void CGDebugInfo::EmitLexicalBlockStart(CGBuilderTy &Builder, 2668 SourceLocation Loc) { 2669 // Set our current location. 2670 setLocation(Loc); 2671 2672 // Emit a line table change for the current location inside the new scope. 2673 Builder.SetCurrentDebugLocation(llvm::DebugLoc::get( 2674 getLineNumber(Loc), getColumnNumber(Loc), LexicalBlockStack.back())); 2675 2676 if (DebugKind <= CodeGenOptions::DebugLineTablesOnly) 2677 return; 2678 2679 // Create a new lexical block and push it on the stack. 2680 CreateLexicalBlock(Loc); 2681 } 2682 2683 /// EmitLexicalBlockEnd - Constructs the debug code for exiting a declarative 2684 /// region - end of a DW_TAG_lexical_block. 2685 void CGDebugInfo::EmitLexicalBlockEnd(CGBuilderTy &Builder, 2686 SourceLocation Loc) { 2687 assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!"); 2688 2689 // Provide an entry in the line table for the end of the block. 2690 EmitLocation(Builder, Loc); 2691 2692 if (DebugKind <= CodeGenOptions::DebugLineTablesOnly) 2693 return; 2694 2695 LexicalBlockStack.pop_back(); 2696 } 2697 2698 /// EmitFunctionEnd - Constructs the debug code for exiting a function. 2699 void CGDebugInfo::EmitFunctionEnd(CGBuilderTy &Builder) { 2700 assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!"); 2701 unsigned RCount = FnBeginRegionCount.back(); 2702 assert(RCount <= LexicalBlockStack.size() && "Region stack mismatch"); 2703 2704 // Pop all regions for this function. 2705 while (LexicalBlockStack.size() != RCount) { 2706 // Provide an entry in the line table for the end of the block. 2707 EmitLocation(Builder, CurLoc); 2708 LexicalBlockStack.pop_back(); 2709 } 2710 FnBeginRegionCount.pop_back(); 2711 } 2712 2713 // EmitTypeForVarWithBlocksAttr - Build up structure info for the byref. 2714 // See BuildByRefType. 2715 llvm::DIType CGDebugInfo::EmitTypeForVarWithBlocksAttr(const VarDecl *VD, 2716 uint64_t *XOffset) { 2717 2718 SmallVector<llvm::Metadata *, 5> EltTys; 2719 QualType FType; 2720 uint64_t FieldSize, FieldOffset; 2721 unsigned FieldAlign; 2722 2723 llvm::DIFile Unit = getOrCreateFile(VD->getLocation()); 2724 QualType Type = VD->getType(); 2725 2726 FieldOffset = 0; 2727 FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); 2728 EltTys.push_back(CreateMemberType(Unit, FType, "__isa", &FieldOffset)); 2729 EltTys.push_back(CreateMemberType(Unit, FType, "__forwarding", &FieldOffset)); 2730 FType = CGM.getContext().IntTy; 2731 EltTys.push_back(CreateMemberType(Unit, FType, "__flags", &FieldOffset)); 2732 EltTys.push_back(CreateMemberType(Unit, FType, "__size", &FieldOffset)); 2733 2734 bool HasCopyAndDispose = CGM.getContext().BlockRequiresCopying(Type, VD); 2735 if (HasCopyAndDispose) { 2736 FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); 2737 EltTys.push_back( 2738 CreateMemberType(Unit, FType, "__copy_helper", &FieldOffset)); 2739 EltTys.push_back( 2740 CreateMemberType(Unit, FType, "__destroy_helper", &FieldOffset)); 2741 } 2742 bool HasByrefExtendedLayout; 2743 Qualifiers::ObjCLifetime Lifetime; 2744 if (CGM.getContext().getByrefLifetime(Type, Lifetime, 2745 HasByrefExtendedLayout) && 2746 HasByrefExtendedLayout) { 2747 FType = CGM.getContext().getPointerType(CGM.getContext().VoidTy); 2748 EltTys.push_back( 2749 CreateMemberType(Unit, FType, "__byref_variable_layout", &FieldOffset)); 2750 } 2751 2752 CharUnits Align = CGM.getContext().getDeclAlign(VD); 2753 if (Align > CGM.getContext().toCharUnitsFromBits( 2754 CGM.getTarget().getPointerAlign(0))) { 2755 CharUnits FieldOffsetInBytes = 2756 CGM.getContext().toCharUnitsFromBits(FieldOffset); 2757 CharUnits AlignedOffsetInBytes = 2758 FieldOffsetInBytes.RoundUpToAlignment(Align); 2759 CharUnits NumPaddingBytes = AlignedOffsetInBytes - FieldOffsetInBytes; 2760 2761 if (NumPaddingBytes.isPositive()) { 2762 llvm::APInt pad(32, NumPaddingBytes.getQuantity()); 2763 FType = CGM.getContext().getConstantArrayType(CGM.getContext().CharTy, 2764 pad, ArrayType::Normal, 0); 2765 EltTys.push_back(CreateMemberType(Unit, FType, "", &FieldOffset)); 2766 } 2767 } 2768 2769 FType = Type; 2770 llvm::DIType FieldTy = getOrCreateType(FType, Unit); 2771 FieldSize = CGM.getContext().getTypeSize(FType); 2772 FieldAlign = CGM.getContext().toBits(Align); 2773 2774 *XOffset = FieldOffset; 2775 FieldTy = DBuilder.createMemberType(Unit, VD->getName(), Unit, 0, FieldSize, 2776 FieldAlign, FieldOffset, 0, FieldTy); 2777 EltTys.push_back(FieldTy); 2778 FieldOffset += FieldSize; 2779 2780 llvm::DIArray Elements = DBuilder.getOrCreateArray(EltTys); 2781 2782 unsigned Flags = llvm::DIDescriptor::FlagBlockByrefStruct; 2783 2784 return DBuilder.createStructType(Unit, "", Unit, 0, FieldOffset, 0, Flags, 2785 llvm::DIType(), Elements); 2786 } 2787 2788 /// EmitDeclare - Emit local variable declaration debug info. 2789 void CGDebugInfo::EmitDeclare(const VarDecl *VD, llvm::dwarf::LLVMConstants Tag, 2790 llvm::Value *Storage, unsigned ArgNo, 2791 CGBuilderTy &Builder) { 2792 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 2793 assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!"); 2794 2795 bool Unwritten = 2796 VD->isImplicit() || (isa<Decl>(VD->getDeclContext()) && 2797 cast<Decl>(VD->getDeclContext())->isImplicit()); 2798 llvm::DIFile Unit; 2799 if (!Unwritten) 2800 Unit = getOrCreateFile(VD->getLocation()); 2801 llvm::DIType Ty; 2802 uint64_t XOffset = 0; 2803 if (VD->hasAttr<BlocksAttr>()) 2804 Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset); 2805 else 2806 Ty = getOrCreateType(VD->getType(), Unit); 2807 2808 // If there is no debug info for this type then do not emit debug info 2809 // for this variable. 2810 if (!Ty) 2811 return; 2812 2813 // Get location information. 2814 unsigned Line = 0; 2815 unsigned Column = 0; 2816 if (!Unwritten) { 2817 Line = getLineNumber(VD->getLocation()); 2818 Column = getColumnNumber(VD->getLocation()); 2819 } 2820 SmallVector<int64_t, 9> Expr; 2821 unsigned Flags = 0; 2822 if (VD->isImplicit()) 2823 Flags |= llvm::DIDescriptor::FlagArtificial; 2824 // If this is the first argument and it is implicit then 2825 // give it an object pointer flag. 2826 // FIXME: There has to be a better way to do this, but for static 2827 // functions there won't be an implicit param at arg1 and 2828 // otherwise it is 'self' or 'this'. 2829 if (isa<ImplicitParamDecl>(VD) && ArgNo == 1) 2830 Flags |= llvm::DIDescriptor::FlagObjectPointer; 2831 if (llvm::Argument *Arg = dyn_cast<llvm::Argument>(Storage)) 2832 if (Arg->getType()->isPointerTy() && !Arg->hasByValAttr() && 2833 !VD->getType()->isPointerType()) 2834 Expr.push_back(llvm::dwarf::DW_OP_deref); 2835 2836 llvm::MDNode *Scope = LexicalBlockStack.back(); 2837 2838 StringRef Name = VD->getName(); 2839 if (!Name.empty()) { 2840 if (VD->hasAttr<BlocksAttr>()) { 2841 CharUnits offset = CharUnits::fromQuantity(32); 2842 Expr.push_back(llvm::dwarf::DW_OP_plus); 2843 // offset of __forwarding field 2844 offset = CGM.getContext().toCharUnitsFromBits( 2845 CGM.getTarget().getPointerWidth(0)); 2846 Expr.push_back(offset.getQuantity()); 2847 Expr.push_back(llvm::dwarf::DW_OP_deref); 2848 Expr.push_back(llvm::dwarf::DW_OP_plus); 2849 // offset of x field 2850 offset = CGM.getContext().toCharUnitsFromBits(XOffset); 2851 Expr.push_back(offset.getQuantity()); 2852 2853 // Create the descriptor for the variable. 2854 llvm::DIVariable D = DBuilder.createLocalVariable( 2855 Tag, llvm::DIDescriptor(Scope), VD->getName(), Unit, Line, Ty, ArgNo); 2856 2857 // Insert an llvm.dbg.declare into the current block. 2858 llvm::Instruction *Call = 2859 DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr), 2860 Builder.GetInsertBlock()); 2861 Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope)); 2862 return; 2863 } else if (isa<VariableArrayType>(VD->getType())) 2864 Expr.push_back(llvm::dwarf::DW_OP_deref); 2865 } else if (const RecordType *RT = dyn_cast<RecordType>(VD->getType())) { 2866 // If VD is an anonymous union then Storage represents value for 2867 // all union fields. 2868 const RecordDecl *RD = cast<RecordDecl>(RT->getDecl()); 2869 if (RD->isUnion() && RD->isAnonymousStructOrUnion()) { 2870 for (const auto *Field : RD->fields()) { 2871 llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit); 2872 StringRef FieldName = Field->getName(); 2873 2874 // Ignore unnamed fields. Do not ignore unnamed records. 2875 if (FieldName.empty() && !isa<RecordType>(Field->getType())) 2876 continue; 2877 2878 // Use VarDecl's Tag, Scope and Line number. 2879 llvm::DIVariable D = DBuilder.createLocalVariable( 2880 Tag, llvm::DIDescriptor(Scope), FieldName, Unit, Line, FieldTy, 2881 CGM.getLangOpts().Optimize, Flags, ArgNo); 2882 2883 // Insert an llvm.dbg.declare into the current block. 2884 llvm::Instruction *Call = DBuilder.insertDeclare( 2885 Storage, D, DBuilder.createExpression(Expr), 2886 Builder.GetInsertBlock()); 2887 Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope)); 2888 } 2889 return; 2890 } 2891 } 2892 2893 // Create the descriptor for the variable. 2894 llvm::DIVariable D = DBuilder.createLocalVariable( 2895 Tag, llvm::DIDescriptor(Scope), Name, Unit, Line, Ty, 2896 CGM.getLangOpts().Optimize, Flags, ArgNo); 2897 2898 // Insert an llvm.dbg.declare into the current block. 2899 llvm::Instruction *Call = DBuilder.insertDeclare( 2900 Storage, D, DBuilder.createExpression(Expr), Builder.GetInsertBlock()); 2901 Call->setDebugLoc(llvm::DebugLoc::get(Line, Column, Scope)); 2902 } 2903 2904 void CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD, 2905 llvm::Value *Storage, 2906 CGBuilderTy &Builder) { 2907 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 2908 EmitDeclare(VD, llvm::dwarf::DW_TAG_auto_variable, Storage, 0, Builder); 2909 } 2910 2911 /// Look up the completed type for a self pointer in the TypeCache and 2912 /// create a copy of it with the ObjectPointer and Artificial flags 2913 /// set. If the type is not cached, a new one is created. This should 2914 /// never happen though, since creating a type for the implicit self 2915 /// argument implies that we already parsed the interface definition 2916 /// and the ivar declarations in the implementation. 2917 llvm::DIType CGDebugInfo::CreateSelfType(const QualType &QualTy, 2918 llvm::DIType Ty) { 2919 llvm::DIType CachedTy = getTypeOrNull(QualTy); 2920 if (CachedTy) 2921 Ty = CachedTy; 2922 return DBuilder.createObjectPointerType(Ty); 2923 } 2924 2925 void CGDebugInfo::EmitDeclareOfBlockDeclRefVariable( 2926 const VarDecl *VD, llvm::Value *Storage, CGBuilderTy &Builder, 2927 const CGBlockInfo &blockInfo, llvm::Instruction *InsertPoint) { 2928 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 2929 assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!"); 2930 2931 if (Builder.GetInsertBlock() == nullptr) 2932 return; 2933 2934 bool isByRef = VD->hasAttr<BlocksAttr>(); 2935 2936 uint64_t XOffset = 0; 2937 llvm::DIFile Unit = getOrCreateFile(VD->getLocation()); 2938 llvm::DIType Ty; 2939 if (isByRef) 2940 Ty = EmitTypeForVarWithBlocksAttr(VD, &XOffset); 2941 else 2942 Ty = getOrCreateType(VD->getType(), Unit); 2943 2944 // Self is passed along as an implicit non-arg variable in a 2945 // block. Mark it as the object pointer. 2946 if (isa<ImplicitParamDecl>(VD) && VD->getName() == "self") 2947 Ty = CreateSelfType(VD->getType(), Ty); 2948 2949 // Get location information. 2950 unsigned Line = getLineNumber(VD->getLocation()); 2951 unsigned Column = getColumnNumber(VD->getLocation()); 2952 2953 const llvm::DataLayout &target = CGM.getDataLayout(); 2954 2955 CharUnits offset = CharUnits::fromQuantity( 2956 target.getStructLayout(blockInfo.StructureType) 2957 ->getElementOffset(blockInfo.getCapture(VD).getIndex())); 2958 2959 SmallVector<int64_t, 9> addr; 2960 if (isa<llvm::AllocaInst>(Storage)) 2961 addr.push_back(llvm::dwarf::DW_OP_deref); 2962 addr.push_back(llvm::dwarf::DW_OP_plus); 2963 addr.push_back(offset.getQuantity()); 2964 if (isByRef) { 2965 addr.push_back(llvm::dwarf::DW_OP_deref); 2966 addr.push_back(llvm::dwarf::DW_OP_plus); 2967 // offset of __forwarding field 2968 offset = 2969 CGM.getContext().toCharUnitsFromBits(target.getPointerSizeInBits(0)); 2970 addr.push_back(offset.getQuantity()); 2971 addr.push_back(llvm::dwarf::DW_OP_deref); 2972 addr.push_back(llvm::dwarf::DW_OP_plus); 2973 // offset of x field 2974 offset = CGM.getContext().toCharUnitsFromBits(XOffset); 2975 addr.push_back(offset.getQuantity()); 2976 } 2977 2978 // Create the descriptor for the variable. 2979 llvm::DIVariable D = 2980 DBuilder.createLocalVariable(llvm::dwarf::DW_TAG_auto_variable, 2981 llvm::DIDescriptor(LexicalBlockStack.back()), 2982 VD->getName(), Unit, Line, Ty); 2983 2984 // Insert an llvm.dbg.declare into the current block. 2985 llvm::Instruction *Call = InsertPoint ? 2986 DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(addr), 2987 InsertPoint) 2988 : DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(addr), 2989 Builder.GetInsertBlock()); 2990 Call->setDebugLoc( 2991 llvm::DebugLoc::get(Line, Column, LexicalBlockStack.back())); 2992 } 2993 2994 /// EmitDeclareOfArgVariable - Emit call to llvm.dbg.declare for an argument 2995 /// variable declaration. 2996 void CGDebugInfo::EmitDeclareOfArgVariable(const VarDecl *VD, llvm::Value *AI, 2997 unsigned ArgNo, 2998 CGBuilderTy &Builder) { 2999 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 3000 EmitDeclare(VD, llvm::dwarf::DW_TAG_arg_variable, AI, ArgNo, Builder); 3001 } 3002 3003 namespace { 3004 struct BlockLayoutChunk { 3005 uint64_t OffsetInBits; 3006 const BlockDecl::Capture *Capture; 3007 }; 3008 bool operator<(const BlockLayoutChunk &l, const BlockLayoutChunk &r) { 3009 return l.OffsetInBits < r.OffsetInBits; 3010 } 3011 } 3012 3013 void CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block, 3014 llvm::Value *Arg, 3015 unsigned ArgNo, 3016 llvm::Value *LocalAddr, 3017 CGBuilderTy &Builder) { 3018 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 3019 ASTContext &C = CGM.getContext(); 3020 const BlockDecl *blockDecl = block.getBlockDecl(); 3021 3022 // Collect some general information about the block's location. 3023 SourceLocation loc = blockDecl->getCaretLocation(); 3024 llvm::DIFile tunit = getOrCreateFile(loc); 3025 unsigned line = getLineNumber(loc); 3026 unsigned column = getColumnNumber(loc); 3027 3028 // Build the debug-info type for the block literal. 3029 getContextDescriptor(cast<Decl>(blockDecl->getDeclContext())); 3030 3031 const llvm::StructLayout *blockLayout = 3032 CGM.getDataLayout().getStructLayout(block.StructureType); 3033 3034 SmallVector<llvm::Metadata *, 16> fields; 3035 fields.push_back(createFieldType("__isa", C.VoidPtrTy, 0, loc, AS_public, 3036 blockLayout->getElementOffsetInBits(0), 3037 tunit, tunit)); 3038 fields.push_back(createFieldType("__flags", C.IntTy, 0, loc, AS_public, 3039 blockLayout->getElementOffsetInBits(1), 3040 tunit, tunit)); 3041 fields.push_back(createFieldType("__reserved", C.IntTy, 0, loc, AS_public, 3042 blockLayout->getElementOffsetInBits(2), 3043 tunit, tunit)); 3044 auto *FnTy = block.getBlockExpr()->getFunctionType(); 3045 auto FnPtrType = CGM.getContext().getPointerType(FnTy->desugar()); 3046 fields.push_back(createFieldType("__FuncPtr", FnPtrType, 0, loc, AS_public, 3047 blockLayout->getElementOffsetInBits(3), 3048 tunit, tunit)); 3049 fields.push_back(createFieldType( 3050 "__descriptor", C.getPointerType(block.NeedsCopyDispose 3051 ? C.getBlockDescriptorExtendedType() 3052 : C.getBlockDescriptorType()), 3053 0, loc, AS_public, blockLayout->getElementOffsetInBits(4), tunit, tunit)); 3054 3055 // We want to sort the captures by offset, not because DWARF 3056 // requires this, but because we're paranoid about debuggers. 3057 SmallVector<BlockLayoutChunk, 8> chunks; 3058 3059 // 'this' capture. 3060 if (blockDecl->capturesCXXThis()) { 3061 BlockLayoutChunk chunk; 3062 chunk.OffsetInBits = 3063 blockLayout->getElementOffsetInBits(block.CXXThisIndex); 3064 chunk.Capture = nullptr; 3065 chunks.push_back(chunk); 3066 } 3067 3068 // Variable captures. 3069 for (const auto &capture : blockDecl->captures()) { 3070 const VarDecl *variable = capture.getVariable(); 3071 const CGBlockInfo::Capture &captureInfo = block.getCapture(variable); 3072 3073 // Ignore constant captures. 3074 if (captureInfo.isConstant()) 3075 continue; 3076 3077 BlockLayoutChunk chunk; 3078 chunk.OffsetInBits = 3079 blockLayout->getElementOffsetInBits(captureInfo.getIndex()); 3080 chunk.Capture = &capture; 3081 chunks.push_back(chunk); 3082 } 3083 3084 // Sort by offset. 3085 llvm::array_pod_sort(chunks.begin(), chunks.end()); 3086 3087 for (SmallVectorImpl<BlockLayoutChunk>::iterator i = chunks.begin(), 3088 e = chunks.end(); 3089 i != e; ++i) { 3090 uint64_t offsetInBits = i->OffsetInBits; 3091 const BlockDecl::Capture *capture = i->Capture; 3092 3093 // If we have a null capture, this must be the C++ 'this' capture. 3094 if (!capture) { 3095 const CXXMethodDecl *method = 3096 cast<CXXMethodDecl>(blockDecl->getNonClosureContext()); 3097 QualType type = method->getThisType(C); 3098 3099 fields.push_back(createFieldType("this", type, 0, loc, AS_public, 3100 offsetInBits, tunit, tunit)); 3101 continue; 3102 } 3103 3104 const VarDecl *variable = capture->getVariable(); 3105 StringRef name = variable->getName(); 3106 3107 llvm::DIType fieldType; 3108 if (capture->isByRef()) { 3109 TypeInfo PtrInfo = C.getTypeInfo(C.VoidPtrTy); 3110 3111 // FIXME: this creates a second copy of this type! 3112 uint64_t xoffset; 3113 fieldType = EmitTypeForVarWithBlocksAttr(variable, &xoffset); 3114 fieldType = DBuilder.createPointerType(fieldType, PtrInfo.Width); 3115 fieldType = 3116 DBuilder.createMemberType(tunit, name, tunit, line, PtrInfo.Width, 3117 PtrInfo.Align, offsetInBits, 0, fieldType); 3118 } else { 3119 fieldType = createFieldType(name, variable->getType(), 0, loc, AS_public, 3120 offsetInBits, tunit, tunit); 3121 } 3122 fields.push_back(fieldType); 3123 } 3124 3125 SmallString<36> typeName; 3126 llvm::raw_svector_ostream(typeName) << "__block_literal_" 3127 << CGM.getUniqueBlockCount(); 3128 3129 llvm::DIArray fieldsArray = DBuilder.getOrCreateArray(fields); 3130 3131 llvm::DIType type = 3132 DBuilder.createStructType(tunit, typeName.str(), tunit, line, 3133 CGM.getContext().toBits(block.BlockSize), 3134 CGM.getContext().toBits(block.BlockAlign), 0, 3135 llvm::DIType(), fieldsArray); 3136 type = DBuilder.createPointerType(type, CGM.PointerWidthInBits); 3137 3138 // Get overall information about the block. 3139 unsigned flags = llvm::DIDescriptor::FlagArtificial; 3140 llvm::MDNode *scope = LexicalBlockStack.back(); 3141 3142 // Create the descriptor for the parameter. 3143 llvm::DIVariable debugVar = DBuilder.createLocalVariable( 3144 llvm::dwarf::DW_TAG_arg_variable, llvm::DIDescriptor(scope), 3145 Arg->getName(), tunit, line, type, CGM.getLangOpts().Optimize, flags, 3146 ArgNo); 3147 3148 if (LocalAddr) { 3149 // Insert an llvm.dbg.value into the current block. 3150 llvm::Instruction *DbgVal = DBuilder.insertDbgValueIntrinsic( 3151 LocalAddr, 0, debugVar, DBuilder.createExpression(), 3152 Builder.GetInsertBlock()); 3153 DbgVal->setDebugLoc(llvm::DebugLoc::get(line, column, scope)); 3154 } 3155 3156 // Insert an llvm.dbg.declare into the current block. 3157 llvm::Instruction *DbgDecl = DBuilder.insertDeclare( 3158 Arg, debugVar, DBuilder.createExpression(), Builder.GetInsertBlock()); 3159 DbgDecl->setDebugLoc(llvm::DebugLoc::get(line, column, scope)); 3160 } 3161 3162 /// If D is an out-of-class definition of a static data member of a class, find 3163 /// its corresponding in-class declaration. 3164 llvm::DIDerivedType 3165 CGDebugInfo::getOrCreateStaticDataMemberDeclarationOrNull(const VarDecl *D) { 3166 if (!D->isStaticDataMember()) 3167 return llvm::DIDerivedType(); 3168 auto MI = StaticDataMemberCache.find(D->getCanonicalDecl()); 3169 if (MI != StaticDataMemberCache.end()) { 3170 assert(MI->second && "Static data member declaration should still exist"); 3171 return llvm::DIDerivedType(cast<llvm::MDNode>(MI->second)); 3172 } 3173 3174 // If the member wasn't found in the cache, lazily construct and add it to the 3175 // type (used when a limited form of the type is emitted). 3176 auto DC = D->getDeclContext(); 3177 llvm::DICompositeType Ctxt(getContextDescriptor(cast<Decl>(DC))); 3178 return CreateRecordStaticField(D, Ctxt, cast<RecordDecl>(DC)); 3179 } 3180 3181 /// Recursively collect all of the member fields of a global anonymous decl and 3182 /// create static variables for them. The first time this is called it needs 3183 /// to be on a union and then from there we can have additional unnamed fields. 3184 llvm::DIGlobalVariable 3185 CGDebugInfo::CollectAnonRecordDecls(const RecordDecl *RD, llvm::DIFile Unit, 3186 unsigned LineNo, StringRef LinkageName, 3187 llvm::GlobalVariable *Var, 3188 llvm::DIDescriptor DContext) { 3189 llvm::DIGlobalVariable GV; 3190 3191 for (const auto *Field : RD->fields()) { 3192 llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit); 3193 StringRef FieldName = Field->getName(); 3194 3195 // Ignore unnamed fields, but recurse into anonymous records. 3196 if (FieldName.empty()) { 3197 const RecordType *RT = dyn_cast<RecordType>(Field->getType()); 3198 if (RT) 3199 GV = CollectAnonRecordDecls(RT->getDecl(), Unit, LineNo, LinkageName, 3200 Var, DContext); 3201 continue; 3202 } 3203 // Use VarDecl's Tag, Scope and Line number. 3204 GV = DBuilder.createGlobalVariable( 3205 DContext, FieldName, LinkageName, Unit, LineNo, FieldTy, 3206 Var->hasInternalLinkage(), Var, llvm::DIDerivedType()); 3207 } 3208 return GV; 3209 } 3210 3211 /// EmitGlobalVariable - Emit information about a global variable. 3212 void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var, 3213 const VarDecl *D) { 3214 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 3215 // Create global variable debug descriptor. 3216 llvm::DIFile Unit; 3217 llvm::DIDescriptor DContext; 3218 unsigned LineNo; 3219 StringRef DeclName, LinkageName; 3220 QualType T; 3221 collectVarDeclProps(D, Unit, LineNo, T, DeclName, LinkageName, DContext); 3222 3223 // Attempt to store one global variable for the declaration - even if we 3224 // emit a lot of fields. 3225 llvm::DIGlobalVariable GV; 3226 3227 // If this is an anonymous union then we'll want to emit a global 3228 // variable for each member of the anonymous union so that it's possible 3229 // to find the name of any field in the union. 3230 if (T->isUnionType() && DeclName.empty()) { 3231 const RecordDecl *RD = cast<RecordType>(T)->getDecl(); 3232 assert(RD->isAnonymousStructOrUnion() && 3233 "unnamed non-anonymous struct or union?"); 3234 GV = CollectAnonRecordDecls(RD, Unit, LineNo, LinkageName, Var, DContext); 3235 } else { 3236 GV = DBuilder.createGlobalVariable( 3237 DContext, DeclName, LinkageName, Unit, LineNo, getOrCreateType(T, Unit), 3238 Var->hasInternalLinkage(), Var, 3239 getOrCreateStaticDataMemberDeclarationOrNull(D)); 3240 } 3241 DeclCache[D->getCanonicalDecl()].reset(static_cast<llvm::Metadata *>(GV)); 3242 } 3243 3244 /// EmitGlobalVariable - Emit global variable's debug info. 3245 void CGDebugInfo::EmitGlobalVariable(const ValueDecl *VD, 3246 llvm::Constant *Init) { 3247 assert(DebugKind >= CodeGenOptions::LimitedDebugInfo); 3248 // Create the descriptor for the variable. 3249 llvm::DIFile Unit = getOrCreateFile(VD->getLocation()); 3250 StringRef Name = VD->getName(); 3251 llvm::DIType Ty = getOrCreateType(VD->getType(), Unit); 3252 if (const EnumConstantDecl *ECD = dyn_cast<EnumConstantDecl>(VD)) { 3253 const EnumDecl *ED = cast<EnumDecl>(ECD->getDeclContext()); 3254 assert(isa<EnumType>(ED->getTypeForDecl()) && "Enum without EnumType?"); 3255 Ty = getOrCreateType(QualType(ED->getTypeForDecl(), 0), Unit); 3256 } 3257 // Do not use DIGlobalVariable for enums. 3258 if (Ty.getTag() == llvm::dwarf::DW_TAG_enumeration_type) 3259 return; 3260 // Do not emit separate definitions for function local const/statics. 3261 if (isa<FunctionDecl>(VD->getDeclContext())) 3262 return; 3263 VD = cast<ValueDecl>(VD->getCanonicalDecl()); 3264 auto *VarD = cast<VarDecl>(VD); 3265 if (VarD->isStaticDataMember()) { 3266 auto *RD = cast<RecordDecl>(VarD->getDeclContext()); 3267 getContextDescriptor(RD); 3268 // Ensure that the type is retained even though it's otherwise unreferenced. 3269 RetainedTypes.push_back( 3270 CGM.getContext().getRecordType(RD).getAsOpaquePtr()); 3271 return; 3272 } 3273 3274 llvm::DIDescriptor DContext = 3275 getContextDescriptor(dyn_cast<Decl>(VD->getDeclContext())); 3276 3277 auto &GV = DeclCache[VD]; 3278 if (GV) 3279 return; 3280 GV.reset(DBuilder.createGlobalVariable( 3281 DContext, Name, StringRef(), Unit, getLineNumber(VD->getLocation()), Ty, 3282 true, Init, getOrCreateStaticDataMemberDeclarationOrNull(VarD))); 3283 } 3284 3285 llvm::DIScope CGDebugInfo::getCurrentContextDescriptor(const Decl *D) { 3286 if (!LexicalBlockStack.empty()) 3287 return llvm::DIScope(LexicalBlockStack.back()); 3288 return getContextDescriptor(D); 3289 } 3290 3291 void CGDebugInfo::EmitUsingDirective(const UsingDirectiveDecl &UD) { 3292 if (CGM.getCodeGenOpts().getDebugInfo() < CodeGenOptions::LimitedDebugInfo) 3293 return; 3294 DBuilder.createImportedModule( 3295 getCurrentContextDescriptor(cast<Decl>(UD.getDeclContext())), 3296 getOrCreateNameSpace(UD.getNominatedNamespace()), 3297 getLineNumber(UD.getLocation())); 3298 } 3299 3300 void CGDebugInfo::EmitUsingDecl(const UsingDecl &UD) { 3301 if (CGM.getCodeGenOpts().getDebugInfo() < CodeGenOptions::LimitedDebugInfo) 3302 return; 3303 assert(UD.shadow_size() && 3304 "We shouldn't be codegening an invalid UsingDecl containing no decls"); 3305 // Emitting one decl is sufficient - debuggers can detect that this is an 3306 // overloaded name & provide lookup for all the overloads. 3307 const UsingShadowDecl &USD = **UD.shadow_begin(); 3308 if (llvm::DIDescriptor Target = 3309 getDeclarationOrDefinition(USD.getUnderlyingDecl())) 3310 DBuilder.createImportedDeclaration( 3311 getCurrentContextDescriptor(cast<Decl>(USD.getDeclContext())), Target, 3312 getLineNumber(USD.getLocation())); 3313 } 3314 3315 llvm::DIImportedEntity 3316 CGDebugInfo::EmitNamespaceAlias(const NamespaceAliasDecl &NA) { 3317 if (CGM.getCodeGenOpts().getDebugInfo() < CodeGenOptions::LimitedDebugInfo) 3318 return llvm::DIImportedEntity(nullptr); 3319 auto &VH = NamespaceAliasCache[&NA]; 3320 if (VH) 3321 return llvm::DIImportedEntity(cast<llvm::MDNode>(VH)); 3322 llvm::DIImportedEntity R(nullptr); 3323 if (const NamespaceAliasDecl *Underlying = 3324 dyn_cast<NamespaceAliasDecl>(NA.getAliasedNamespace())) 3325 // This could cache & dedup here rather than relying on metadata deduping. 3326 R = DBuilder.createImportedDeclaration( 3327 getCurrentContextDescriptor(cast<Decl>(NA.getDeclContext())), 3328 EmitNamespaceAlias(*Underlying), getLineNumber(NA.getLocation()), 3329 NA.getName()); 3330 else 3331 R = DBuilder.createImportedDeclaration( 3332 getCurrentContextDescriptor(cast<Decl>(NA.getDeclContext())), 3333 getOrCreateNameSpace(cast<NamespaceDecl>(NA.getAliasedNamespace())), 3334 getLineNumber(NA.getLocation()), NA.getName()); 3335 VH.reset(R); 3336 return R; 3337 } 3338 3339 /// getOrCreateNamesSpace - Return namespace descriptor for the given 3340 /// namespace decl. 3341 llvm::DINameSpace 3342 CGDebugInfo::getOrCreateNameSpace(const NamespaceDecl *NSDecl) { 3343 NSDecl = NSDecl->getCanonicalDecl(); 3344 auto I = NameSpaceCache.find(NSDecl); 3345 if (I != NameSpaceCache.end()) 3346 return llvm::DINameSpace(cast<llvm::MDNode>(I->second)); 3347 3348 unsigned LineNo = getLineNumber(NSDecl->getLocation()); 3349 llvm::DIFile FileD = getOrCreateFile(NSDecl->getLocation()); 3350 llvm::DIDescriptor Context = 3351 getContextDescriptor(dyn_cast<Decl>(NSDecl->getDeclContext())); 3352 llvm::DINameSpace NS = 3353 DBuilder.createNameSpace(Context, NSDecl->getName(), FileD, LineNo); 3354 NameSpaceCache[NSDecl].reset(NS); 3355 return NS; 3356 } 3357 3358 void CGDebugInfo::finalize() { 3359 // Creating types might create further types - invalidating the current 3360 // element and the size(), so don't cache/reference them. 3361 for (size_t i = 0; i != ObjCInterfaceCache.size(); ++i) { 3362 ObjCInterfaceCacheEntry E = ObjCInterfaceCache[i]; 3363 E.Decl.replaceAllUsesWith(CGM.getLLVMContext(), 3364 E.Type->getDecl()->getDefinition() 3365 ? CreateTypeDefinition(E.Type, E.Unit) 3366 : E.Decl); 3367 } 3368 3369 for (auto p : ReplaceMap) { 3370 assert(p.second); 3371 llvm::DIType Ty(cast<llvm::MDNode>(p.second)); 3372 assert(Ty.isForwardDecl()); 3373 3374 auto it = TypeCache.find(p.first); 3375 assert(it != TypeCache.end()); 3376 assert(it->second); 3377 3378 llvm::DIType RepTy(cast<llvm::MDNode>(it->second)); 3379 Ty.replaceAllUsesWith(CGM.getLLVMContext(), RepTy); 3380 } 3381 3382 for (const auto &p : FwdDeclReplaceMap) { 3383 assert(p.second); 3384 llvm::DIDescriptor FwdDecl(cast<llvm::MDNode>(p.second)); 3385 llvm::Metadata *Repl; 3386 3387 auto it = DeclCache.find(p.first); 3388 // If there has been no definition for the declaration, call RAUW 3389 // with ourselves, that will destroy the temporary MDNode and 3390 // replace it with a standard one, avoiding leaking memory. 3391 if (it == DeclCache.end()) 3392 Repl = p.second; 3393 else 3394 Repl = it->second; 3395 3396 FwdDecl.replaceAllUsesWith(CGM.getLLVMContext(), 3397 llvm::DIDescriptor(cast<llvm::MDNode>(Repl))); 3398 } 3399 3400 // We keep our own list of retained types, because we need to look 3401 // up the final type in the type cache. 3402 for (std::vector<void *>::const_iterator RI = RetainedTypes.begin(), 3403 RE = RetainedTypes.end(); RI != RE; ++RI) 3404 DBuilder.retainType(llvm::DIType(cast<llvm::MDNode>(TypeCache[*RI]))); 3405 3406 DBuilder.finalize(); 3407 } 3408 3409 void CGDebugInfo::EmitExplicitCastType(QualType Ty) { 3410 if (CGM.getCodeGenOpts().getDebugInfo() < CodeGenOptions::LimitedDebugInfo) 3411 return; 3412 llvm::DIType DieTy = getOrCreateType(Ty, getOrCreateMainFile()); 3413 // Don't ignore in case of explicit cast where it is referenced indirectly. 3414 DBuilder.retainType(DieTy); 3415 } 3416