DebugLocs without a scope should fail the verification.
[opencl/llvm.git] / lib / IR / DebugInfo.cpp
1 //===--- DebugInfo.cpp - Debug Information Helper Classes -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the helper classes used to build and interpret debug
11 // information in LLVM IR form.
12 //
13 //===----------------------------------------------------------------------===//
15 #include "llvm/IR/DebugInfo.h"
16 #include "LLVMContextImpl.h"
17 #include "llvm/ADT/STLExtras.h"
18 #include "llvm/ADT/SmallPtrSet.h"
19 #include "llvm/ADT/SmallString.h"
20 #include "llvm/Analysis/ValueTracking.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/DIBuilder.h"
23 #include "llvm/IR/DerivedTypes.h"
24 #include "llvm/IR/Instructions.h"
25 #include "llvm/IR/IntrinsicInst.h"
26 #include "llvm/IR/Intrinsics.h"
27 #include "llvm/IR/Module.h"
28 #include "llvm/IR/ValueHandle.h"
29 #include "llvm/Support/Debug.h"
30 #include "llvm/Support/Dwarf.h"
31 #include "llvm/Support/raw_ostream.h"
32 using namespace llvm;
33 using namespace llvm::dwarf;
35 //===----------------------------------------------------------------------===//
36 // DIDescriptor
37 //===----------------------------------------------------------------------===//
39 bool DIDescriptor::Verify() const {
40   return DbgNode &&
41          (DIDerivedType(DbgNode).Verify() ||
42           DICompositeType(DbgNode).Verify() || DIBasicType(DbgNode).Verify() ||
43           DIVariable(DbgNode).Verify() || DISubprogram(DbgNode).Verify() ||
44           DIGlobalVariable(DbgNode).Verify() || DIFile(DbgNode).Verify() ||
45           DICompileUnit(DbgNode).Verify() || DINameSpace(DbgNode).Verify() ||
46           DILexicalBlock(DbgNode).Verify() ||
47           DILexicalBlockFile(DbgNode).Verify() ||
48           DISubrange(DbgNode).Verify() || DIEnumerator(DbgNode).Verify() ||
49           DIObjCProperty(DbgNode).Verify() ||
50           DITemplateTypeParameter(DbgNode).Verify() ||
51           DITemplateValueParameter(DbgNode).Verify() ||
52           DIImportedEntity(DbgNode).Verify() || DIExpression(DbgNode).Verify());
53 }
55 static Metadata *getField(const MDNode *DbgNode, unsigned Elt) {
56   if (!DbgNode || Elt >= DbgNode->getNumOperands())
57     return nullptr;
58   return DbgNode->getOperand(Elt);
59 }
61 static MDNode *getNodeField(const MDNode *DbgNode, unsigned Elt) {
62   return dyn_cast_or_null<MDNode>(getField(DbgNode, Elt));
63 }
65 static StringRef getStringField(const MDNode *DbgNode, unsigned Elt) {
66   if (MDString *MDS = dyn_cast_or_null<MDString>(getField(DbgNode, Elt)))
67     return MDS->getString();
68   return StringRef();
69 }
71 StringRef DIDescriptor::getStringField(unsigned Elt) const {
72   return ::getStringField(DbgNode, Elt);
73 }
75 uint64_t DIDescriptor::getUInt64Field(unsigned Elt) const {
76   if (auto *C = getConstantField(Elt))
77     if (ConstantInt *CI = dyn_cast<ConstantInt>(C))
78       return CI->getZExtValue();
80   return 0;
81 }
83 int64_t DIDescriptor::getInt64Field(unsigned Elt) const {
84   if (auto *C = getConstantField(Elt))
85     if (ConstantInt *CI = dyn_cast<ConstantInt>(C))
86       return CI->getZExtValue();
88   return 0;
89 }
91 DIDescriptor DIDescriptor::getDescriptorField(unsigned Elt) const {
92   MDNode *Field = getNodeField(DbgNode, Elt);
93   return DIDescriptor(Field);
94 }
96 GlobalVariable *DIDescriptor::getGlobalVariableField(unsigned Elt) const {
97   return dyn_cast_or_null<GlobalVariable>(getConstantField(Elt));
98 }
100 Constant *DIDescriptor::getConstantField(unsigned Elt) const {
101   if (!DbgNode)
102     return nullptr;
104   if (Elt < DbgNode->getNumOperands())
105     if (auto *C =
106             dyn_cast_or_null<ConstantAsMetadata>(DbgNode->getOperand(Elt)))
107       return C->getValue();
108   return nullptr;
111 Function *DIDescriptor::getFunctionField(unsigned Elt) const {
112   return dyn_cast_or_null<Function>(getConstantField(Elt));
115 void DIDescriptor::replaceFunctionField(unsigned Elt, Function *F) {
116   if (!DbgNode)
117     return;
119   if (Elt < DbgNode->getNumOperands()) {
120     MDNode *Node = const_cast<MDNode *>(DbgNode);
121     Node->replaceOperandWith(Elt, F ? ConstantAsMetadata::get(F) : nullptr);
122   }
125 static unsigned DIVariableInlinedAtIndex = 4;
126 MDNode *DIVariable::getInlinedAt() const {
127   return getNodeField(DbgNode, DIVariableInlinedAtIndex);
130 /// \brief Return the size reported by the variable's type.
131 unsigned DIVariable::getSizeInBits(const DITypeIdentifierMap &Map) {
132   DIType Ty = getType().resolve(Map);
133   // Follow derived types until we reach a type that
134   // reports back a size.
135   while (Ty.isDerivedType() && !Ty.getSizeInBits()) {
136     DIDerivedType DT(&*Ty);
137     Ty = DT.getTypeDerivedFrom().resolve(Map);
138   }
139   assert(Ty.getSizeInBits() && "type with size 0");
140   return Ty.getSizeInBits();
143 uint64_t DIExpression::getElement(unsigned Idx) const {
144   unsigned I = Idx + 1;
145   assert(I < getNumHeaderFields() &&
146          "non-existing complex address element requested");
147   return getHeaderFieldAs<int64_t>(I);
150 bool DIExpression::isVariablePiece() const {
151   return getNumElements() && getElement(0) == dwarf::DW_OP_piece;
154 uint64_t DIExpression::getPieceOffset() const {
155   assert(isVariablePiece());
156   return getElement(1);
159 uint64_t DIExpression::getPieceSize() const {
160   assert(isVariablePiece());
161   return getElement(2);
164 //===----------------------------------------------------------------------===//
165 // Predicates
166 //===----------------------------------------------------------------------===//
168 bool DIDescriptor::isSubroutineType() const {
169   return DbgNode && getTag() == dwarf::DW_TAG_subroutine_type;
172 bool DIDescriptor::isBasicType() const {
173   if (!DbgNode)
174     return false;
175   switch (getTag()) {
176   case dwarf::DW_TAG_base_type:
177   case dwarf::DW_TAG_unspecified_type:
178     return true;
179   default:
180     return false;
181   }
184 bool DIDescriptor::isDerivedType() const {
185   if (!DbgNode)
186     return false;
187   switch (getTag()) {
188   case dwarf::DW_TAG_typedef:
189   case dwarf::DW_TAG_pointer_type:
190   case dwarf::DW_TAG_ptr_to_member_type:
191   case dwarf::DW_TAG_reference_type:
192   case dwarf::DW_TAG_rvalue_reference_type:
193   case dwarf::DW_TAG_const_type:
194   case dwarf::DW_TAG_volatile_type:
195   case dwarf::DW_TAG_restrict_type:
196   case dwarf::DW_TAG_member:
197   case dwarf::DW_TAG_inheritance:
198   case dwarf::DW_TAG_friend:
199     return true;
200   default:
201     // CompositeTypes are currently modelled as DerivedTypes.
202     return isCompositeType();
203   }
206 bool DIDescriptor::isCompositeType() const {
207   if (!DbgNode)
208     return false;
209   switch (getTag()) {
210   case dwarf::DW_TAG_array_type:
211   case dwarf::DW_TAG_structure_type:
212   case dwarf::DW_TAG_union_type:
213   case dwarf::DW_TAG_enumeration_type:
214   case dwarf::DW_TAG_subroutine_type:
215   case dwarf::DW_TAG_class_type:
216     return true;
217   default:
218     return false;
219   }
222 bool DIDescriptor::isVariable() const {
223   if (!DbgNode)
224     return false;
225   switch (getTag()) {
226   case dwarf::DW_TAG_auto_variable:
227   case dwarf::DW_TAG_arg_variable:
228     return true;
229   default:
230     return false;
231   }
234 bool DIDescriptor::isType() const {
235   return isBasicType() || isCompositeType() || isDerivedType();
238 bool DIDescriptor::isSubprogram() const {
239   return DbgNode && getTag() == dwarf::DW_TAG_subprogram;
242 bool DIDescriptor::isGlobalVariable() const {
243   return DbgNode && (getTag() == dwarf::DW_TAG_variable ||
244                      getTag() == dwarf::DW_TAG_constant);
247 bool DIDescriptor::isScope() const {
248   if (!DbgNode)
249     return false;
250   switch (getTag()) {
251   case dwarf::DW_TAG_compile_unit:
252   case dwarf::DW_TAG_lexical_block:
253   case dwarf::DW_TAG_subprogram:
254   case dwarf::DW_TAG_namespace:
255   case dwarf::DW_TAG_file_type:
256     return true;
257   default:
258     break;
259   }
260   return isType();
263 bool DIDescriptor::isTemplateTypeParameter() const {
264   return DbgNode && getTag() == dwarf::DW_TAG_template_type_parameter;
267 bool DIDescriptor::isTemplateValueParameter() const {
268   return DbgNode && (getTag() == dwarf::DW_TAG_template_value_parameter ||
269                      getTag() == dwarf::DW_TAG_GNU_template_template_param ||
270                      getTag() == dwarf::DW_TAG_GNU_template_parameter_pack);
273 bool DIDescriptor::isCompileUnit() const {
274   return DbgNode && getTag() == dwarf::DW_TAG_compile_unit;
277 bool DIDescriptor::isFile() const {
278   return DbgNode && getTag() == dwarf::DW_TAG_file_type;
281 bool DIDescriptor::isNameSpace() const {
282   return DbgNode && getTag() == dwarf::DW_TAG_namespace;
285 bool DIDescriptor::isLexicalBlockFile() const {
286   return DbgNode && getTag() == dwarf::DW_TAG_lexical_block &&
287          DbgNode->getNumOperands() == 3 && getNumHeaderFields() == 2;
290 bool DIDescriptor::isLexicalBlock() const {
291   // FIXME: There are always exactly 4 header fields in DILexicalBlock, but
292   // something relies on this returning true for DILexicalBlockFile.
293   return DbgNode && getTag() == dwarf::DW_TAG_lexical_block &&
294          DbgNode->getNumOperands() == 3 &&
295          (getNumHeaderFields() == 2 || getNumHeaderFields() == 4);
298 bool DIDescriptor::isSubrange() const {
299   return DbgNode && getTag() == dwarf::DW_TAG_subrange_type;
302 bool DIDescriptor::isEnumerator() const {
303   return DbgNode && getTag() == dwarf::DW_TAG_enumerator;
306 bool DIDescriptor::isObjCProperty() const {
307   return DbgNode && getTag() == dwarf::DW_TAG_APPLE_property;
310 bool DIDescriptor::isImportedEntity() const {
311   return DbgNode && (getTag() == dwarf::DW_TAG_imported_module ||
312                      getTag() == dwarf::DW_TAG_imported_declaration);
315 bool DIDescriptor::isExpression() const {
316   return DbgNode && (getTag() == dwarf::DW_TAG_expression);
319 //===----------------------------------------------------------------------===//
320 // Simple Descriptor Constructors and other Methods
321 //===----------------------------------------------------------------------===//
323 void DIDescriptor::replaceAllUsesWith(LLVMContext &VMContext, DIDescriptor D) {
325   assert(DbgNode && "Trying to replace an unverified type!");
327   // Since we use a TrackingVH for the node, its easy for clients to manufacture
328   // legitimate situations where they want to replaceAllUsesWith() on something
329   // which, due to uniquing, has merged with the source. We shield clients from
330   // this detail by allowing a value to be replaced with replaceAllUsesWith()
331   // itself.
332   const MDNode *DN = D;
333   if (DbgNode == DN) {
334     SmallVector<Metadata *, 10> Ops(DbgNode->getNumOperands());
335     for (size_t i = 0; i != Ops.size(); ++i)
336       Ops[i] = DbgNode->getOperand(i);
337     DN = MDNode::get(VMContext, Ops);
338   }
340   assert(DbgNode->isTemporary() && "Expected temporary node");
341   auto *Node = const_cast<MDNode *>(DbgNode);
342   Node->replaceAllUsesWith(const_cast<MDNode *>(DN));
343   MDNode::deleteTemporary(Node);
344   DbgNode = DN;
347 void DIDescriptor::replaceAllUsesWith(MDNode *D) {
348   assert(DbgNode && "Trying to replace an unverified type!");
349   assert(DbgNode != D && "This replacement should always happen");
350   assert(DbgNode->isTemporary() && "Expected temporary node");
351   auto *Node = const_cast<MDNode *>(DbgNode);
352   Node->replaceAllUsesWith(D);
353   MDNode::deleteTemporary(Node);
356 bool DICompileUnit::Verify() const {
357   if (!isCompileUnit())
358     return false;
360   // Don't bother verifying the compilation directory or producer string
361   // as those could be empty.
362   if (getFilename().empty())
363     return false;
365   return DbgNode->getNumOperands() == 7 && getNumHeaderFields() == 8;
368 bool DIObjCProperty::Verify() const {
369   if (!isObjCProperty())
370     return false;
372   // Don't worry about the rest of the strings for now.
373   return DbgNode->getNumOperands() == 3 && getNumHeaderFields() == 6;
376 /// \brief Check if a field at position Elt of a MDNode is a MDNode.
377 ///
378 /// We currently allow an empty string and an integer.
379 /// But we don't allow a non-empty string in a MDNode field.
380 static bool fieldIsMDNode(const MDNode *DbgNode, unsigned Elt) {
381   // FIXME: This function should return true, if the field is null or the field
382   // is indeed a MDNode: return !Fld || isa<MDNode>(Fld).
383   Metadata *Fld = getField(DbgNode, Elt);
384   if (Fld && isa<MDString>(Fld) && !cast<MDString>(Fld)->getString().empty())
385     return false;
386   return true;
389 /// \brief Check if a field at position Elt of a MDNode is a MDString.
390 static bool fieldIsMDString(const MDNode *DbgNode, unsigned Elt) {
391   Metadata *Fld = getField(DbgNode, Elt);
392   return !Fld || isa<MDString>(Fld);
395 /// \brief Check if a value can be a reference to a type.
396 static bool isTypeRef(const Metadata *MD) {
397   if (!MD)
398     return true;
399   if (auto *S = dyn_cast<MDString>(MD))
400     return !S->getString().empty();
401   if (auto *N = dyn_cast<MDNode>(MD))
402     return DIType(N).isType();
403   return false;
406 /// \brief Check if referenced field might be a type.
407 static bool fieldIsTypeRef(const MDNode *DbgNode, unsigned Elt) {
408   return isTypeRef(dyn_cast_or_null<Metadata>(getField(DbgNode, Elt)));
411 /// \brief Check if a value can be a ScopeRef.
412 static bool isScopeRef(const Metadata *MD) {
413   if (!MD)
414     return true;
415   if (auto *S = dyn_cast<MDString>(MD))
416     return !S->getString().empty();
417   return isa<MDNode>(MD);
420 /// \brief Check if a field at position Elt of a MDNode can be a ScopeRef.
421 static bool fieldIsScopeRef(const MDNode *DbgNode, unsigned Elt) {
422   return isScopeRef(dyn_cast_or_null<Metadata>(getField(DbgNode, Elt)));
425 bool DIType::Verify() const {
426   if (!isType())
427     return false;
428   // Make sure Context @ field 2 is MDNode.
429   if (!fieldIsScopeRef(DbgNode, 2))
430     return false;
432   // FIXME: Sink this into the various subclass verifies.
433   uint16_t Tag = getTag();
434   if (!isBasicType() && Tag != dwarf::DW_TAG_const_type &&
435       Tag != dwarf::DW_TAG_volatile_type && Tag != dwarf::DW_TAG_pointer_type &&
436       Tag != dwarf::DW_TAG_ptr_to_member_type &&
437       Tag != dwarf::DW_TAG_reference_type &&
438       Tag != dwarf::DW_TAG_rvalue_reference_type &&
439       Tag != dwarf::DW_TAG_restrict_type && Tag != dwarf::DW_TAG_array_type &&
440       Tag != dwarf::DW_TAG_enumeration_type &&
441       Tag != dwarf::DW_TAG_subroutine_type &&
442       Tag != dwarf::DW_TAG_inheritance && Tag != dwarf::DW_TAG_friend &&
443       getFilename().empty())
444     return false;
446   // DIType is abstract, it should be a BasicType, a DerivedType or
447   // a CompositeType.
448   if (isBasicType())
449     return DIBasicType(DbgNode).Verify();
450   else if (isCompositeType())
451     return DICompositeType(DbgNode).Verify();
452   else if (isDerivedType())
453     return DIDerivedType(DbgNode).Verify();
454   else
455     return false;
458 bool DIBasicType::Verify() const {
459   return isBasicType() && DbgNode->getNumOperands() == 3 &&
460          getNumHeaderFields() == 8;
463 bool DIDerivedType::Verify() const {
464   // Make sure DerivedFrom @ field 3 is TypeRef.
465   if (!fieldIsTypeRef(DbgNode, 3))
466     return false;
467   if (getTag() == dwarf::DW_TAG_ptr_to_member_type)
468     // Make sure ClassType @ field 4 is a TypeRef.
469     if (!fieldIsTypeRef(DbgNode, 4))
470       return false;
472   return isDerivedType() && DbgNode->getNumOperands() >= 4 &&
473          DbgNode->getNumOperands() <= 8 && getNumHeaderFields() >= 7 &&
474          getNumHeaderFields() <= 8;
477 bool DICompositeType::Verify() const {
478   if (!isCompositeType())
479     return false;
481   // Make sure DerivedFrom @ field 3 and ContainingType @ field 5 are TypeRef.
482   if (!fieldIsTypeRef(DbgNode, 3))
483     return false;
484   if (!fieldIsTypeRef(DbgNode, 5))
485     return false;
487   // Make sure the type identifier at field 7 is MDString, it can be null.
488   if (!fieldIsMDString(DbgNode, 7))
489     return false;
491   // A subroutine type can't be both & and &&.
492   if (isLValueReference() && isRValueReference())
493     return false;
495   return DbgNode->getNumOperands() == 8 && getNumHeaderFields() == 8;
498 bool DISubprogram::Verify() const {
499   if (!isSubprogram())
500     return false;
502   // Make sure context @ field 2 is a ScopeRef and type @ field 3 is a MDNode.
503   if (!fieldIsScopeRef(DbgNode, 2))
504     return false;
505   if (!fieldIsMDNode(DbgNode, 3))
506     return false;
507   // Containing type @ field 4.
508   if (!fieldIsTypeRef(DbgNode, 4))
509     return false;
511   // A subprogram can't be both & and &&.
512   if (isLValueReference() && isRValueReference())
513     return false;
515   // If a DISubprogram has an llvm::Function*, then scope chains from all
516   // instructions within the function should lead to this DISubprogram.
517   if (auto *F = getFunction()) {
518     for (auto &BB : *F) {
519       for (auto &I : BB) {
520         DebugLoc DL = I.getDebugLoc();
521         if (DL.isUnknown())
522           continue;
524         MDNode *Scope = nullptr;
525         MDNode *IA = nullptr;
526         // walk the inlined-at scopes
527         while ((IA = DL.getInlinedAt()))
528           DL = DebugLoc::getFromDILocation(IA);
529         DL.getScopeAndInlinedAt(Scope, IA);
530         if (!Scope)
531           return false;
532         assert(!IA);
533         while (!DIDescriptor(Scope).isSubprogram()) {
534           DILexicalBlockFile D(Scope);
535           Scope = D.isLexicalBlockFile()
536                       ? D.getScope()
537                       : DebugLoc::getFromDILexicalBlock(Scope).getScope();
538           assert(Scope && "lexical block file has no scope");
539         }
540         if (!DISubprogram(Scope).describes(F))
541           return false;
542       }
543     }
544   }
545   return DbgNode->getNumOperands() == 9 && getNumHeaderFields() == 12;
548 bool DIGlobalVariable::Verify() const {
549   if (!isGlobalVariable())
550     return false;
552   if (getDisplayName().empty())
553     return false;
554   // Make sure context @ field 1 is an MDNode.
555   if (!fieldIsMDNode(DbgNode, 1))
556     return false;
557   // Make sure that type @ field 3 is a DITypeRef.
558   if (!fieldIsTypeRef(DbgNode, 3))
559     return false;
560   // Make sure StaticDataMemberDeclaration @ field 5 is MDNode.
561   if (!fieldIsMDNode(DbgNode, 5))
562     return false;
564   return DbgNode->getNumOperands() == 6 && getNumHeaderFields() == 7;
567 bool DIVariable::Verify() const {
568   if (!isVariable())
569     return false;
571   // Make sure context @ field 1 is an MDNode.
572   if (!fieldIsMDNode(DbgNode, 1))
573     return false;
574   // Make sure that type @ field 3 is a DITypeRef.
575   if (!fieldIsTypeRef(DbgNode, 3))
576     return false;
578   // Check the number of header fields, which is common between complex and
579   // simple variables.
580   if (getNumHeaderFields() != 4)
581     return false;
583   // Variable without an inline location.
584   if (DbgNode->getNumOperands() == 4)
585     return true;
587   // Variable with an inline location.
588   return getInlinedAt() != nullptr && DbgNode->getNumOperands() == 5;
591 bool DIExpression::Verify() const {
592   // Empty DIExpressions may be represented as a nullptr.
593   if (!DbgNode)
594     return true;
596   return isExpression() && DbgNode->getNumOperands() == 1;
599 bool DILocation::Verify() const {
600   return DbgNode && isa<MDLocation>(DbgNode);
603 bool DINameSpace::Verify() const {
604   if (!isNameSpace())
605     return false;
606   return DbgNode->getNumOperands() == 3 && getNumHeaderFields() == 3;
609 MDNode *DIFile::getFileNode() const { return getNodeField(DbgNode, 1); }
611 bool DIFile::Verify() const {
612   return isFile() && DbgNode->getNumOperands() == 2;
615 bool DIEnumerator::Verify() const {
616   return isEnumerator() && DbgNode->getNumOperands() == 1 &&
617          getNumHeaderFields() == 3;
620 bool DISubrange::Verify() const {
621   return isSubrange() && DbgNode->getNumOperands() == 1 &&
622          getNumHeaderFields() == 3;
625 bool DILexicalBlock::Verify() const {
626   return isLexicalBlock() && DbgNode->getNumOperands() == 3 &&
627          getNumHeaderFields() == 4;
630 bool DILexicalBlockFile::Verify() const {
631   return isLexicalBlockFile() && DbgNode->getNumOperands() == 3 &&
632          getNumHeaderFields() == 2;
635 bool DITemplateTypeParameter::Verify() const {
636   return isTemplateTypeParameter() && DbgNode->getNumOperands() == 4 &&
637          getNumHeaderFields() == 4;
640 bool DITemplateValueParameter::Verify() const {
641   return isTemplateValueParameter() && DbgNode->getNumOperands() == 5 &&
642          getNumHeaderFields() == 4;
645 bool DIImportedEntity::Verify() const {
646   return isImportedEntity() && DbgNode->getNumOperands() == 3 &&
647          getNumHeaderFields() == 3;
650 MDNode *DIDerivedType::getObjCProperty() const {
651   return getNodeField(DbgNode, 4);
654 MDString *DICompositeType::getIdentifier() const {
655   return cast_or_null<MDString>(getField(DbgNode, 7));
658 #ifndef NDEBUG
659 static void VerifySubsetOf(const MDNode *LHS, const MDNode *RHS) {
660   for (unsigned i = 0; i != LHS->getNumOperands(); ++i) {
661     // Skip the 'empty' list (that's a single i32 0, rather than truly empty).
662     if (i == 0 && mdconst::hasa<ConstantInt>(LHS->getOperand(i)))
663       continue;
664     const MDNode *E = cast<MDNode>(LHS->getOperand(i));
665     bool found = false;
666     for (unsigned j = 0; !found && j != RHS->getNumOperands(); ++j)
667       found = (E == cast<MDNode>(RHS->getOperand(j)));
668     assert(found && "Losing a member during member list replacement");
669   }
671 #endif
673 void DICompositeType::setArraysHelper(MDNode *Elements, MDNode *TParams) {
674   TrackingMDNodeRef N(*this);
675   if (Elements) {
676 #ifndef NDEBUG
677     // Check that the new list of members contains all the old members as well.
678     if (const MDNode *El = cast_or_null<MDNode>(N->getOperand(4)))
679       VerifySubsetOf(El, Elements);
680 #endif
681     N->replaceOperandWith(4, Elements);
682   }
683   if (TParams)
684     N->replaceOperandWith(6, TParams);
685   DbgNode = N;
688 DIScopeRef DIScope::getRef() const {
689   if (!isCompositeType())
690     return DIScopeRef(*this);
691   DICompositeType DTy(DbgNode);
692   if (!DTy.getIdentifier())
693     return DIScopeRef(*this);
694   return DIScopeRef(DTy.getIdentifier());
697 void DICompositeType::setContainingType(DICompositeType ContainingType) {
698   TrackingMDNodeRef N(*this);
699   N->replaceOperandWith(5, ContainingType.getRef());
700   DbgNode = N;
703 bool DIVariable::isInlinedFnArgument(const Function *CurFn) {
704   assert(CurFn && "Invalid function");
705   if (!getContext().isSubprogram())
706     return false;
707   // This variable is not inlined function argument if its scope
708   // does not describe current function.
709   return !DISubprogram(getContext()).describes(CurFn);
712 bool DISubprogram::describes(const Function *F) {
713   assert(F && "Invalid function");
714   if (F == getFunction())
715     return true;
716   StringRef Name = getLinkageName();
717   if (Name.empty())
718     Name = getName();
719   if (F->getName() == Name)
720     return true;
721   return false;
724 MDNode *DISubprogram::getVariablesNodes() const {
725   return getNodeField(DbgNode, 8);
728 DIArray DISubprogram::getVariables() const {
729   return DIArray(getNodeField(DbgNode, 8));
732 Metadata *DITemplateValueParameter::getValue() const {
733   return DbgNode->getOperand(3);
736 DIScopeRef DIScope::getContext() const {
738   if (isType())
739     return DIType(DbgNode).getContext();
741   if (isSubprogram())
742     return DIScopeRef(DISubprogram(DbgNode).getContext());
744   if (isLexicalBlock())
745     return DIScopeRef(DILexicalBlock(DbgNode).getContext());
747   if (isLexicalBlockFile())
748     return DIScopeRef(DILexicalBlockFile(DbgNode).getContext());
750   if (isNameSpace())
751     return DIScopeRef(DINameSpace(DbgNode).getContext());
753   assert((isFile() || isCompileUnit()) && "Unhandled type of scope.");
754   return DIScopeRef(nullptr);
757 StringRef DIScope::getName() const {
758   if (isType())
759     return DIType(DbgNode).getName();
760   if (isSubprogram())
761     return DISubprogram(DbgNode).getName();
762   if (isNameSpace())
763     return DINameSpace(DbgNode).getName();
764   assert((isLexicalBlock() || isLexicalBlockFile() || isFile() ||
765           isCompileUnit()) &&
766          "Unhandled type of scope.");
767   return StringRef();
770 StringRef DIScope::getFilename() const {
771   if (!DbgNode)
772     return StringRef();
773   return ::getStringField(getNodeField(DbgNode, 1), 0);
776 StringRef DIScope::getDirectory() const {
777   if (!DbgNode)
778     return StringRef();
779   return ::getStringField(getNodeField(DbgNode, 1), 1);
782 DIArray DICompileUnit::getEnumTypes() const {
783   if (!DbgNode || DbgNode->getNumOperands() < 7)
784     return DIArray();
786   return DIArray(getNodeField(DbgNode, 2));
789 DIArray DICompileUnit::getRetainedTypes() const {
790   if (!DbgNode || DbgNode->getNumOperands() < 7)
791     return DIArray();
793   return DIArray(getNodeField(DbgNode, 3));
796 DIArray DICompileUnit::getSubprograms() const {
797   if (!DbgNode || DbgNode->getNumOperands() < 7)
798     return DIArray();
800   return DIArray(getNodeField(DbgNode, 4));
803 DIArray DICompileUnit::getGlobalVariables() const {
804   if (!DbgNode || DbgNode->getNumOperands() < 7)
805     return DIArray();
807   return DIArray(getNodeField(DbgNode, 5));
810 DIArray DICompileUnit::getImportedEntities() const {
811   if (!DbgNode || DbgNode->getNumOperands() < 7)
812     return DIArray();
814   return DIArray(getNodeField(DbgNode, 6));
817 void DICompileUnit::replaceSubprograms(DIArray Subprograms) {
818   assert(Verify() && "Expected compile unit");
819   if (Subprograms == getSubprograms())
820     return;
822   const_cast<MDNode *>(DbgNode)->replaceOperandWith(4, Subprograms);
825 void DICompileUnit::replaceGlobalVariables(DIArray GlobalVariables) {
826   assert(Verify() && "Expected compile unit");
827   if (GlobalVariables == getGlobalVariables())
828     return;
830   const_cast<MDNode *>(DbgNode)->replaceOperandWith(5, GlobalVariables);
833 DILocation DILocation::copyWithNewScope(LLVMContext &Ctx,
834                                         DILexicalBlockFile NewScope) {
835   assert(Verify());
836   assert(NewScope && "Expected valid scope");
838   const auto *Old = cast<MDLocation>(DbgNode);
839   return DILocation(MDLocation::get(Ctx, Old->getLine(), Old->getColumn(),
840                                     NewScope, Old->getInlinedAt()));
843 unsigned DILocation::computeNewDiscriminator(LLVMContext &Ctx) {
844   std::pair<const char *, unsigned> Key(getFilename().data(), getLineNumber());
845   return ++Ctx.pImpl->DiscriminatorTable[Key];
848 DIVariable llvm::createInlinedVariable(MDNode *DV, MDNode *InlinedScope,
849                                        LLVMContext &VMContext) {
850   assert(DIVariable(DV).Verify() && "Expected a DIVariable");
851   if (!InlinedScope)
852     return cleanseInlinedVariable(DV, VMContext);
854   // Insert inlined scope.
855   SmallVector<Metadata *, 8> Elts;
856   for (unsigned I = 0, E = DIVariableInlinedAtIndex; I != E; ++I)
857     Elts.push_back(DV->getOperand(I));
858   Elts.push_back(InlinedScope);
860   DIVariable Inlined(MDNode::get(VMContext, Elts));
861   assert(Inlined.Verify() && "Expected to create a DIVariable");
862   return Inlined;
865 DIVariable llvm::cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext) {
866   assert(DIVariable(DV).Verify() && "Expected a DIVariable");
867   if (!DIVariable(DV).getInlinedAt())
868     return DIVariable(DV);
870   // Remove inlined scope.
871   SmallVector<Metadata *, 8> Elts;
872   for (unsigned I = 0, E = DIVariableInlinedAtIndex; I != E; ++I)
873     Elts.push_back(DV->getOperand(I));
875   DIVariable Cleansed(MDNode::get(VMContext, Elts));
876   assert(Cleansed.Verify() && "Expected to create a DIVariable");
877   return Cleansed;
880 DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
881   DIDescriptor D(Scope);
882   if (D.isSubprogram())
883     return DISubprogram(Scope);
885   if (D.isLexicalBlockFile())
886     return getDISubprogram(DILexicalBlockFile(Scope).getContext());
888   if (D.isLexicalBlock())
889     return getDISubprogram(DILexicalBlock(Scope).getContext());
891   return DISubprogram();
894 DISubprogram llvm::getDISubprogram(const Function *F) {
895   // We look for the first instr that has a debug annotation leading back to F.
896   for (auto &BB : *F) {
897     auto Inst = std::find_if(BB.begin(), BB.end(), [](const Instruction &Inst) {
898       return !Inst.getDebugLoc().isUnknown();
899     });
900     if (Inst == BB.end())
901       continue;
902     DebugLoc DLoc = Inst->getDebugLoc();
903     const MDNode *Scope = DLoc.getScopeNode();
904     DISubprogram Subprogram = getDISubprogram(Scope);
905     return Subprogram.describes(F) ? Subprogram : DISubprogram();
906   }
908   return DISubprogram();
911 DICompositeType llvm::getDICompositeType(DIType T) {
912   if (T.isCompositeType())
913     return DICompositeType(T);
915   if (T.isDerivedType()) {
916     // This function is currently used by dragonegg and dragonegg does
917     // not generate identifier for types, so using an empty map to resolve
918     // DerivedFrom should be fine.
919     DITypeIdentifierMap EmptyMap;
920     return getDICompositeType(
921         DIDerivedType(T).getTypeDerivedFrom().resolve(EmptyMap));
922   }
924   return DICompositeType();
927 DITypeIdentifierMap
928 llvm::generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes) {
929   DITypeIdentifierMap Map;
930   for (unsigned CUi = 0, CUe = CU_Nodes->getNumOperands(); CUi != CUe; ++CUi) {
931     DICompileUnit CU(CU_Nodes->getOperand(CUi));
932     DIArray Retain = CU.getRetainedTypes();
933     for (unsigned Ti = 0, Te = Retain.getNumElements(); Ti != Te; ++Ti) {
934       if (!Retain.getElement(Ti).isCompositeType())
935         continue;
936       DICompositeType Ty(Retain.getElement(Ti));
937       if (MDString *TypeId = Ty.getIdentifier()) {
938         // Definition has priority over declaration.
939         // Try to insert (TypeId, Ty) to Map.
940         std::pair<DITypeIdentifierMap::iterator, bool> P =
941             Map.insert(std::make_pair(TypeId, Ty));
942         // If TypeId already exists in Map and this is a definition, replace
943         // whatever we had (declaration or definition) with the definition.
944         if (!P.second && !Ty.isForwardDecl())
945           P.first->second = Ty;
946       }
947     }
948   }
949   return Map;
952 //===----------------------------------------------------------------------===//
953 // DebugInfoFinder implementations.
954 //===----------------------------------------------------------------------===//
956 void DebugInfoFinder::reset() {
957   CUs.clear();
958   SPs.clear();
959   GVs.clear();
960   TYs.clear();
961   Scopes.clear();
962   NodesSeen.clear();
963   TypeIdentifierMap.clear();
964   TypeMapInitialized = false;
967 void DebugInfoFinder::InitializeTypeMap(const Module &M) {
968   if (!TypeMapInitialized)
969     if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
970       TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
971       TypeMapInitialized = true;
972     }
975 void DebugInfoFinder::processModule(const Module &M) {
976   InitializeTypeMap(M);
977   if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
978     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
979       DICompileUnit CU(CU_Nodes->getOperand(i));
980       addCompileUnit(CU);
981       DIArray GVs = CU.getGlobalVariables();
982       for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
983         DIGlobalVariable DIG(GVs.getElement(i));
984         if (addGlobalVariable(DIG)) {
985           processScope(DIG.getContext());
986           processType(DIG.getType().resolve(TypeIdentifierMap));
987         }
988       }
989       DIArray SPs = CU.getSubprograms();
990       for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
991         processSubprogram(DISubprogram(SPs.getElement(i)));
992       DIArray EnumTypes = CU.getEnumTypes();
993       for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
994         processType(DIType(EnumTypes.getElement(i)));
995       DIArray RetainedTypes = CU.getRetainedTypes();
996       for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
997         processType(DIType(RetainedTypes.getElement(i)));
998       DIArray Imports = CU.getImportedEntities();
999       for (unsigned i = 0, e = Imports.getNumElements(); i != e; ++i) {
1000         DIImportedEntity Import = DIImportedEntity(Imports.getElement(i));
1001         DIDescriptor Entity = Import.getEntity().resolve(TypeIdentifierMap);
1002         if (Entity.isType())
1003           processType(DIType(Entity));
1004         else if (Entity.isSubprogram())
1005           processSubprogram(DISubprogram(Entity));
1006         else if (Entity.isNameSpace())
1007           processScope(DINameSpace(Entity).getContext());
1008       }
1009     }
1010   }
1013 void DebugInfoFinder::processLocation(const Module &M, DILocation Loc) {
1014   if (!Loc)
1015     return;
1016   InitializeTypeMap(M);
1017   processScope(Loc.getScope());
1018   processLocation(M, Loc.getOrigLocation());
1021 void DebugInfoFinder::processType(DIType DT) {
1022   if (!addType(DT))
1023     return;
1024   processScope(DT.getContext().resolve(TypeIdentifierMap));
1025   if (DT.isCompositeType()) {
1026     DICompositeType DCT(DT);
1027     processType(DCT.getTypeDerivedFrom().resolve(TypeIdentifierMap));
1028     if (DT.isSubroutineType()) {
1029       DITypeArray DTA = DISubroutineType(DT).getTypeArray();
1030       for (unsigned i = 0, e = DTA.getNumElements(); i != e; ++i)
1031         processType(DTA.getElement(i).resolve(TypeIdentifierMap));
1032       return;
1033     }
1034     DIArray DA = DCT.getElements();
1035     for (unsigned i = 0, e = DA.getNumElements(); i != e; ++i) {
1036       DIDescriptor D = DA.getElement(i);
1037       if (D.isType())
1038         processType(DIType(D));
1039       else if (D.isSubprogram())
1040         processSubprogram(DISubprogram(D));
1041     }
1042   } else if (DT.isDerivedType()) {
1043     DIDerivedType DDT(DT);
1044     processType(DDT.getTypeDerivedFrom().resolve(TypeIdentifierMap));
1045   }
1048 void DebugInfoFinder::processScope(DIScope Scope) {
1049   if (Scope.isType()) {
1050     DIType Ty(Scope);
1051     processType(Ty);
1052     return;
1053   }
1054   if (Scope.isCompileUnit()) {
1055     addCompileUnit(DICompileUnit(Scope));
1056     return;
1057   }
1058   if (Scope.isSubprogram()) {
1059     processSubprogram(DISubprogram(Scope));
1060     return;
1061   }
1062   if (!addScope(Scope))
1063     return;
1064   if (Scope.isLexicalBlock()) {
1065     DILexicalBlock LB(Scope);
1066     processScope(LB.getContext());
1067   } else if (Scope.isLexicalBlockFile()) {
1068     DILexicalBlockFile LBF = DILexicalBlockFile(Scope);
1069     processScope(LBF.getScope());
1070   } else if (Scope.isNameSpace()) {
1071     DINameSpace NS(Scope);
1072     processScope(NS.getContext());
1073   }
1076 void DebugInfoFinder::processSubprogram(DISubprogram SP) {
1077   if (!addSubprogram(SP))
1078     return;
1079   processScope(SP.getContext().resolve(TypeIdentifierMap));
1080   processType(SP.getType());
1081   DIArray TParams = SP.getTemplateParams();
1082   for (unsigned I = 0, E = TParams.getNumElements(); I != E; ++I) {
1083     DIDescriptor Element = TParams.getElement(I);
1084     if (Element.isTemplateTypeParameter()) {
1085       DITemplateTypeParameter TType(Element);
1086       processScope(TType.getContext().resolve(TypeIdentifierMap));
1087       processType(TType.getType().resolve(TypeIdentifierMap));
1088     } else if (Element.isTemplateValueParameter()) {
1089       DITemplateValueParameter TVal(Element);
1090       processScope(TVal.getContext().resolve(TypeIdentifierMap));
1091       processType(TVal.getType().resolve(TypeIdentifierMap));
1092     }
1093   }
1096 void DebugInfoFinder::processDeclare(const Module &M,
1097                                      const DbgDeclareInst *DDI) {
1098   MDNode *N = dyn_cast<MDNode>(DDI->getVariable());
1099   if (!N)
1100     return;
1101   InitializeTypeMap(M);
1103   DIDescriptor DV(N);
1104   if (!DV.isVariable())
1105     return;
1107   if (!NodesSeen.insert(DV).second)
1108     return;
1109   processScope(DIVariable(N).getContext());
1110   processType(DIVariable(N).getType().resolve(TypeIdentifierMap));
1113 void DebugInfoFinder::processValue(const Module &M, const DbgValueInst *DVI) {
1114   MDNode *N = dyn_cast<MDNode>(DVI->getVariable());
1115   if (!N)
1116     return;
1117   InitializeTypeMap(M);
1119   DIDescriptor DV(N);
1120   if (!DV.isVariable())
1121     return;
1123   if (!NodesSeen.insert(DV).second)
1124     return;
1125   processScope(DIVariable(N).getContext());
1126   processType(DIVariable(N).getType().resolve(TypeIdentifierMap));
1129 bool DebugInfoFinder::addType(DIType DT) {
1130   if (!DT)
1131     return false;
1133   if (!NodesSeen.insert(DT).second)
1134     return false;
1136   TYs.push_back(DT);
1137   return true;
1140 bool DebugInfoFinder::addCompileUnit(DICompileUnit CU) {
1141   if (!CU)
1142     return false;
1143   if (!NodesSeen.insert(CU).second)
1144     return false;
1146   CUs.push_back(CU);
1147   return true;
1150 bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable DIG) {
1151   if (!DIG)
1152     return false;
1154   if (!NodesSeen.insert(DIG).second)
1155     return false;
1157   GVs.push_back(DIG);
1158   return true;
1161 bool DebugInfoFinder::addSubprogram(DISubprogram SP) {
1162   if (!SP)
1163     return false;
1165   if (!NodesSeen.insert(SP).second)
1166     return false;
1168   SPs.push_back(SP);
1169   return true;
1172 bool DebugInfoFinder::addScope(DIScope Scope) {
1173   if (!Scope)
1174     return false;
1175   // FIXME: Ocaml binding generates a scope with no content, we treat it
1176   // as null for now.
1177   if (Scope->getNumOperands() == 0)
1178     return false;
1179   if (!NodesSeen.insert(Scope).second)
1180     return false;
1181   Scopes.push_back(Scope);
1182   return true;
1185 //===----------------------------------------------------------------------===//
1186 // DIDescriptor: dump routines for all descriptors.
1187 //===----------------------------------------------------------------------===//
1189 void DIDescriptor::dump() const {
1190   print(dbgs());
1191   dbgs() << '\n';
1194 void DIDescriptor::print(raw_ostream &OS) const {
1195   if (!DbgNode)
1196     return;
1198   if (const char *Tag = dwarf::TagString(getTag()))
1199     OS << "[ " << Tag << " ]";
1201   if (this->isSubrange()) {
1202     DISubrange(DbgNode).printInternal(OS);
1203   } else if (this->isCompileUnit()) {
1204     DICompileUnit(DbgNode).printInternal(OS);
1205   } else if (this->isFile()) {
1206     DIFile(DbgNode).printInternal(OS);
1207   } else if (this->isEnumerator()) {
1208     DIEnumerator(DbgNode).printInternal(OS);
1209   } else if (this->isBasicType()) {
1210     DIType(DbgNode).printInternal(OS);
1211   } else if (this->isDerivedType()) {
1212     DIDerivedType(DbgNode).printInternal(OS);
1213   } else if (this->isCompositeType()) {
1214     DICompositeType(DbgNode).printInternal(OS);
1215   } else if (this->isSubprogram()) {
1216     DISubprogram(DbgNode).printInternal(OS);
1217   } else if (this->isGlobalVariable()) {
1218     DIGlobalVariable(DbgNode).printInternal(OS);
1219   } else if (this->isVariable()) {
1220     DIVariable(DbgNode).printInternal(OS);
1221   } else if (this->isObjCProperty()) {
1222     DIObjCProperty(DbgNode).printInternal(OS);
1223   } else if (this->isNameSpace()) {
1224     DINameSpace(DbgNode).printInternal(OS);
1225   } else if (this->isScope()) {
1226     DIScope(DbgNode).printInternal(OS);
1227   } else if (this->isExpression()) {
1228     DIExpression(DbgNode).printInternal(OS);
1229   }
1232 void DISubrange::printInternal(raw_ostream &OS) const {
1233   int64_t Count = getCount();
1234   if (Count != -1)
1235     OS << " [" << getLo() << ", " << Count - 1 << ']';
1236   else
1237     OS << " [unbounded]";
1240 void DIScope::printInternal(raw_ostream &OS) const {
1241   OS << " [" << getDirectory() << "/" << getFilename() << ']';
1244 void DICompileUnit::printInternal(raw_ostream &OS) const {
1245   DIScope::printInternal(OS);
1246   OS << " [";
1247   unsigned Lang = getLanguage();
1248   if (const char *LangStr = dwarf::LanguageString(Lang))
1249     OS << LangStr;
1250   else
1251     (OS << "lang 0x").write_hex(Lang);
1252   OS << ']';
1255 void DIEnumerator::printInternal(raw_ostream &OS) const {
1256   OS << " [" << getName() << " :: " << getEnumValue() << ']';
1259 void DIType::printInternal(raw_ostream &OS) const {
1260   if (!DbgNode)
1261     return;
1263   StringRef Res = getName();
1264   if (!Res.empty())
1265     OS << " [" << Res << "]";
1267   // TODO: Print context?
1269   OS << " [line " << getLineNumber() << ", size " << getSizeInBits()
1270      << ", align " << getAlignInBits() << ", offset " << getOffsetInBits();
1271   if (isBasicType())
1272     if (const char *Enc =
1273             dwarf::AttributeEncodingString(DIBasicType(DbgNode).getEncoding()))
1274       OS << ", enc " << Enc;
1275   OS << "]";
1277   if (isPrivate())
1278     OS << " [private]";
1279   else if (isProtected())
1280     OS << " [protected]";
1281   else if (isPublic())
1282     OS << " [public]";
1284   if (isArtificial())
1285     OS << " [artificial]";
1287   if (isForwardDecl())
1288     OS << " [decl]";
1289   else if (getTag() == dwarf::DW_TAG_structure_type ||
1290            getTag() == dwarf::DW_TAG_union_type ||
1291            getTag() == dwarf::DW_TAG_enumeration_type ||
1292            getTag() == dwarf::DW_TAG_class_type)
1293     OS << " [def]";
1294   if (isVector())
1295     OS << " [vector]";
1296   if (isStaticMember())
1297     OS << " [static]";
1299   if (isLValueReference())
1300     OS << " [reference]";
1302   if (isRValueReference())
1303     OS << " [rvalue reference]";
1306 void DIDerivedType::printInternal(raw_ostream &OS) const {
1307   DIType::printInternal(OS);
1308   OS << " [from " << getTypeDerivedFrom().getName() << ']';
1311 void DICompositeType::printInternal(raw_ostream &OS) const {
1312   DIType::printInternal(OS);
1313   DIArray A = getElements();
1314   OS << " [" << A.getNumElements() << " elements]";
1317 void DINameSpace::printInternal(raw_ostream &OS) const {
1318   StringRef Name = getName();
1319   if (!Name.empty())
1320     OS << " [" << Name << ']';
1322   OS << " [line " << getLineNumber() << ']';
1325 void DISubprogram::printInternal(raw_ostream &OS) const {
1326   // TODO : Print context
1327   OS << " [line " << getLineNumber() << ']';
1329   if (isLocalToUnit())
1330     OS << " [local]";
1332   if (isDefinition())
1333     OS << " [def]";
1335   if (getScopeLineNumber() != getLineNumber())
1336     OS << " [scope " << getScopeLineNumber() << "]";
1338   if (isPrivate())
1339     OS << " [private]";
1340   else if (isProtected())
1341     OS << " [protected]";
1342   else if (isPublic())
1343     OS << " [public]";
1345   if (isLValueReference())
1346     OS << " [reference]";
1348   if (isRValueReference())
1349     OS << " [rvalue reference]";
1351   StringRef Res = getName();
1352   if (!Res.empty())
1353     OS << " [" << Res << ']';
1356 void DIGlobalVariable::printInternal(raw_ostream &OS) const {
1357   StringRef Res = getName();
1358   if (!Res.empty())
1359     OS << " [" << Res << ']';
1361   OS << " [line " << getLineNumber() << ']';
1363   // TODO : Print context
1365   if (isLocalToUnit())
1366     OS << " [local]";
1368   if (isDefinition())
1369     OS << " [def]";
1372 void DIVariable::printInternal(raw_ostream &OS) const {
1373   StringRef Res = getName();
1374   if (!Res.empty())
1375     OS << " [" << Res << ']';
1377   OS << " [line " << getLineNumber() << ']';
1380 void DIExpression::printInternal(raw_ostream &OS) const {
1381   for (unsigned I = 0; I < getNumElements(); ++I) {
1382     uint64_t OpCode = getElement(I);
1383     OS << " [" << OperationEncodingString(OpCode);
1384     switch (OpCode) {
1385     case DW_OP_plus: {
1386       OS << " " << getElement(++I);
1387       break;
1388     }
1389     case DW_OP_piece: {
1390       unsigned Offset = getElement(++I);
1391       unsigned Size = getElement(++I);
1392       OS << " offset=" << Offset << ", size=" << Size;
1393       break;
1394     }
1395     case DW_OP_deref:
1396       // No arguments.
1397       break;
1398     default:
1399       // Else bail out early. This may be a line table entry.
1400       OS << "Unknown]";
1401       return;
1402     }
1403     OS << "]";
1404   }
1407 void DIObjCProperty::printInternal(raw_ostream &OS) const {
1408   StringRef Name = getObjCPropertyName();
1409   if (!Name.empty())
1410     OS << " [" << Name << ']';
1412   OS << " [line " << getLineNumber() << ", properties " << getUnsignedField(6)
1413      << ']';
1416 static void printDebugLoc(DebugLoc DL, raw_ostream &CommentOS,
1417                           const LLVMContext &Ctx) {
1418   if (!DL.isUnknown()) { // Print source line info.
1419     DIScope Scope(DL.getScope(Ctx));
1420     assert(Scope.isScope() && "Scope of a DebugLoc should be a DIScope.");
1421     // Omit the directory, because it's likely to be long and uninteresting.
1422     CommentOS << Scope.getFilename();
1423     CommentOS << ':' << DL.getLine();
1424     if (DL.getCol() != 0)
1425       CommentOS << ':' << DL.getCol();
1426     DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(DL.getInlinedAt(Ctx));
1427     if (!InlinedAtDL.isUnknown()) {
1428       CommentOS << " @[ ";
1429       printDebugLoc(InlinedAtDL, CommentOS, Ctx);
1430       CommentOS << " ]";
1431     }
1432   }
1435 void DIVariable::printExtendedName(raw_ostream &OS) const {
1436   const LLVMContext &Ctx = DbgNode->getContext();
1437   StringRef Res = getName();
1438   if (!Res.empty())
1439     OS << Res << "," << getLineNumber();
1440   if (MDNode *InlinedAt = getInlinedAt()) {
1441     DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(InlinedAt);
1442     if (!InlinedAtDL.isUnknown()) {
1443       OS << " @[";
1444       printDebugLoc(InlinedAtDL, OS, Ctx);
1445       OS << "]";
1446     }
1447   }
1450 template <> DIRef<DIScope>::DIRef(const Metadata *V) : Val(V) {
1451   assert(isScopeRef(V) && "DIScopeRef should be a MDString or MDNode");
1453 template <> DIRef<DIType>::DIRef(const Metadata *V) : Val(V) {
1454   assert(isTypeRef(V) && "DITypeRef should be a MDString or MDNode");
1457 template <>
1458 DIScopeRef DIDescriptor::getFieldAs<DIScopeRef>(unsigned Elt) const {
1459   return DIScopeRef(cast_or_null<Metadata>(getField(DbgNode, Elt)));
1461 template <> DITypeRef DIDescriptor::getFieldAs<DITypeRef>(unsigned Elt) const {
1462   return DITypeRef(cast_or_null<Metadata>(getField(DbgNode, Elt)));
1465 bool llvm::StripDebugInfo(Module &M) {
1466   bool Changed = false;
1468   // Remove all of the calls to the debugger intrinsics, and remove them from
1469   // the module.
1470   if (Function *Declare = M.getFunction("llvm.dbg.declare")) {
1471     while (!Declare->use_empty()) {
1472       CallInst *CI = cast<CallInst>(Declare->user_back());
1473       CI->eraseFromParent();
1474     }
1475     Declare->eraseFromParent();
1476     Changed = true;
1477   }
1479   if (Function *DbgVal = M.getFunction("llvm.dbg.value")) {
1480     while (!DbgVal->use_empty()) {
1481       CallInst *CI = cast<CallInst>(DbgVal->user_back());
1482       CI->eraseFromParent();
1483     }
1484     DbgVal->eraseFromParent();
1485     Changed = true;
1486   }
1488   for (Module::named_metadata_iterator NMI = M.named_metadata_begin(),
1489          NME = M.named_metadata_end(); NMI != NME;) {
1490     NamedMDNode *NMD = NMI;
1491     ++NMI;
1492     if (NMD->getName().startswith("llvm.dbg.")) {
1493       NMD->eraseFromParent();
1494       Changed = true;
1495     }
1496   }
1498   for (Module::iterator MI = M.begin(), ME = M.end(); MI != ME; ++MI)
1499     for (Function::iterator FI = MI->begin(), FE = MI->end(); FI != FE;
1500          ++FI)
1501       for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE;
1502            ++BI) {
1503         if (!BI->getDebugLoc().isUnknown()) {
1504           Changed = true;
1505           BI->setDebugLoc(DebugLoc());
1506         }
1507       }
1509   return Changed;
1512 unsigned llvm::getDebugMetadataVersionFromModule(const Module &M) {
1513   if (auto *Val = mdconst::extract_or_null<ConstantInt>(
1514           M.getModuleFlag("Debug Info Version")))
1515     return Val->getZExtValue();
1516   return 0;
1519 llvm::DenseMap<const llvm::Function *, llvm::DISubprogram>
1520 llvm::makeSubprogramMap(const Module &M) {
1521   DenseMap<const Function *, DISubprogram> R;
1523   NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu");
1524   if (!CU_Nodes)
1525     return R;
1527   for (MDNode *N : CU_Nodes->operands()) {
1528     DICompileUnit CUNode(N);
1529     DIArray SPs = CUNode.getSubprograms();
1530     for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) {
1531       DISubprogram SP(SPs.getElement(i));
1532       if (Function *F = SP.getFunction())
1533         R.insert(std::make_pair(F, SP));
1534     }
1535   }
1536   return R;