IR: Remove MDNodeFwdDecl
[oota-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 //===----------------------------------------------------------------------===//
14
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;
34
35 //===----------------------------------------------------------------------===//
36 // DIDescriptor
37 //===----------------------------------------------------------------------===//
38
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 }
54
55 static Metadata *getField(const MDNode *DbgNode, unsigned Elt) {
56   if (!DbgNode || Elt >= DbgNode->getNumOperands())
57     return nullptr;
58   return DbgNode->getOperand(Elt);
59 }
60
61 static MDNode *getNodeField(const MDNode *DbgNode, unsigned Elt) {
62   return dyn_cast_or_null<MDNode>(getField(DbgNode, Elt));
63 }
64
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 }
70
71 StringRef DIDescriptor::getStringField(unsigned Elt) const {
72   return ::getStringField(DbgNode, Elt);
73 }
74
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();
79
80   return 0;
81 }
82
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();
87
88   return 0;
89 }
90
91 DIDescriptor DIDescriptor::getDescriptorField(unsigned Elt) const {
92   MDNode *Field = getNodeField(DbgNode, Elt);
93   return DIDescriptor(Field);
94 }
95
96 GlobalVariable *DIDescriptor::getGlobalVariableField(unsigned Elt) const {
97   return dyn_cast_or_null<GlobalVariable>(getConstantField(Elt));
98 }
99
100 Constant *DIDescriptor::getConstantField(unsigned Elt) const {
101   if (!DbgNode)
102     return nullptr;
103
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;
109 }
110
111 Function *DIDescriptor::getFunctionField(unsigned Elt) const {
112   return dyn_cast_or_null<Function>(getConstantField(Elt));
113 }
114
115 void DIDescriptor::replaceFunctionField(unsigned Elt, Function *F) {
116   if (!DbgNode)
117     return;
118
119   if (Elt < DbgNode->getNumOperands()) {
120     MDNode *Node = const_cast<MDNode *>(DbgNode);
121     Node->replaceOperandWith(Elt, F ? ConstantAsMetadata::get(F) : nullptr);
122   }
123 }
124
125 static unsigned DIVariableInlinedAtIndex = 4;
126 MDNode *DIVariable::getInlinedAt() const {
127   return getNodeField(DbgNode, DIVariableInlinedAtIndex);
128 }
129
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();
141 }
142
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);
148 }
149
150 bool DIExpression::isVariablePiece() const {
151   return getNumElements() && getElement(0) == dwarf::DW_OP_piece;
152 }
153
154 uint64_t DIExpression::getPieceOffset() const {
155   assert(isVariablePiece());
156   return getElement(1);
157 }
158
159 uint64_t DIExpression::getPieceSize() const {
160   assert(isVariablePiece());
161   return getElement(2);
162 }
163
164 //===----------------------------------------------------------------------===//
165 // Predicates
166 //===----------------------------------------------------------------------===//
167
168 bool DIDescriptor::isSubroutineType() const {
169   return DbgNode && getTag() == dwarf::DW_TAG_subroutine_type;
170 }
171
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   }
182 }
183
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   }
204 }
205
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   }
220 }
221
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   }
232 }
233
234 bool DIDescriptor::isType() const {
235   return isBasicType() || isCompositeType() || isDerivedType();
236 }
237
238 bool DIDescriptor::isSubprogram() const {
239   return DbgNode && getTag() == dwarf::DW_TAG_subprogram;
240 }
241
242 bool DIDescriptor::isGlobalVariable() const {
243   return DbgNode && (getTag() == dwarf::DW_TAG_variable ||
244                      getTag() == dwarf::DW_TAG_constant);
245 }
246
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();
261 }
262
263 bool DIDescriptor::isTemplateTypeParameter() const {
264   return DbgNode && getTag() == dwarf::DW_TAG_template_type_parameter;
265 }
266
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);
271 }
272
273 bool DIDescriptor::isCompileUnit() const {
274   return DbgNode && getTag() == dwarf::DW_TAG_compile_unit;
275 }
276
277 bool DIDescriptor::isFile() const {
278   return DbgNode && getTag() == dwarf::DW_TAG_file_type;
279 }
280
281 bool DIDescriptor::isNameSpace() const {
282   return DbgNode && getTag() == dwarf::DW_TAG_namespace;
283 }
284
285 bool DIDescriptor::isLexicalBlockFile() const {
286   return DbgNode && getTag() == dwarf::DW_TAG_lexical_block &&
287          DbgNode->getNumOperands() == 3 && getNumHeaderFields() == 2;
288 }
289
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);
296 }
297
298 bool DIDescriptor::isSubrange() const {
299   return DbgNode && getTag() == dwarf::DW_TAG_subrange_type;
300 }
301
302 bool DIDescriptor::isEnumerator() const {
303   return DbgNode && getTag() == dwarf::DW_TAG_enumerator;
304 }
305
306 bool DIDescriptor::isObjCProperty() const {
307   return DbgNode && getTag() == dwarf::DW_TAG_APPLE_property;
308 }
309
310 bool DIDescriptor::isImportedEntity() const {
311   return DbgNode && (getTag() == dwarf::DW_TAG_imported_module ||
312                      getTag() == dwarf::DW_TAG_imported_declaration);
313 }
314
315 bool DIDescriptor::isExpression() const {
316   return DbgNode && (getTag() == dwarf::DW_TAG_expression);
317 }
318
319 //===----------------------------------------------------------------------===//
320 // Simple Descriptor Constructors and other Methods
321 //===----------------------------------------------------------------------===//
322
323 void DIDescriptor::replaceAllUsesWith(LLVMContext &VMContext, DIDescriptor D) {
324
325   assert(DbgNode && "Trying to replace an unverified type!");
326
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   }
339
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;
345 }
346
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);
354 }
355
356 bool DICompileUnit::Verify() const {
357   if (!isCompileUnit())
358     return false;
359
360   // Don't bother verifying the compilation directory or producer string
361   // as those could be empty.
362   if (getFilename().empty())
363     return false;
364
365   return DbgNode->getNumOperands() == 7 && getNumHeaderFields() == 8;
366 }
367
368 bool DIObjCProperty::Verify() const {
369   if (!isObjCProperty())
370     return false;
371
372   // Don't worry about the rest of the strings for now.
373   return DbgNode->getNumOperands() == 3 && getNumHeaderFields() == 6;
374 }
375
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;
387 }
388
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);
393 }
394
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;
404 }
405
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)));
409 }
410
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);
418 }
419
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)));
423 }
424
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;
431
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;
445
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;
456 }
457
458 bool DIBasicType::Verify() const {
459   return isBasicType() && DbgNode->getNumOperands() == 3 &&
460          getNumHeaderFields() == 8;
461 }
462
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;
471
472   return isDerivedType() && DbgNode->getNumOperands() >= 4 &&
473          DbgNode->getNumOperands() <= 8 && getNumHeaderFields() >= 7 &&
474          getNumHeaderFields() <= 8;
475 }
476
477 bool DICompositeType::Verify() const {
478   if (!isCompositeType())
479     return false;
480
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;
486
487   // Make sure the type identifier at field 7 is MDString, it can be null.
488   if (!fieldIsMDString(DbgNode, 7))
489     return false;
490
491   // A subroutine type can't be both & and &&.
492   if (isLValueReference() && isRValueReference())
493     return false;
494
495   return DbgNode->getNumOperands() == 8 && getNumHeaderFields() == 8;
496 }
497
498 bool DISubprogram::Verify() const {
499   if (!isSubprogram())
500     return false;
501
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;
510
511   // A subprogram can't be both & and &&.
512   if (isLValueReference() && isRValueReference())
513     return false;
514
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;
523
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         assert(!IA);
531         while (!DIDescriptor(Scope).isSubprogram()) {
532           DILexicalBlockFile D(Scope);
533           Scope = D.isLexicalBlockFile()
534                       ? D.getScope()
535                       : DebugLoc::getFromDILexicalBlock(Scope).getScope();
536         }
537         if (!DISubprogram(Scope).describes(F))
538           return false;
539       }
540     }
541   }
542   return DbgNode->getNumOperands() == 9 && getNumHeaderFields() == 12;
543 }
544
545 bool DIGlobalVariable::Verify() const {
546   if (!isGlobalVariable())
547     return false;
548
549   if (getDisplayName().empty())
550     return false;
551   // Make sure context @ field 1 is an MDNode.
552   if (!fieldIsMDNode(DbgNode, 1))
553     return false;
554   // Make sure that type @ field 3 is a DITypeRef.
555   if (!fieldIsTypeRef(DbgNode, 3))
556     return false;
557   // Make sure StaticDataMemberDeclaration @ field 5 is MDNode.
558   if (!fieldIsMDNode(DbgNode, 5))
559     return false;
560
561   return DbgNode->getNumOperands() == 6 && getNumHeaderFields() == 7;
562 }
563
564 bool DIVariable::Verify() const {
565   if (!isVariable())
566     return false;
567
568   // Make sure context @ field 1 is an MDNode.
569   if (!fieldIsMDNode(DbgNode, 1))
570     return false;
571   // Make sure that type @ field 3 is a DITypeRef.
572   if (!fieldIsTypeRef(DbgNode, 3))
573     return false;
574
575   // Check the number of header fields, which is common between complex and
576   // simple variables.
577   if (getNumHeaderFields() != 4)
578     return false;
579
580   // Variable without an inline location.
581   if (DbgNode->getNumOperands() == 4)
582     return true;
583
584   // Variable with an inline location.
585   return getInlinedAt() != nullptr && DbgNode->getNumOperands() == 5;
586 }
587
588 bool DIExpression::Verify() const {
589   // Empty DIExpressions may be represented as a nullptr.
590   if (!DbgNode)
591     return true;
592
593   return isExpression() && DbgNode->getNumOperands() == 1;
594 }
595
596 bool DILocation::Verify() const {
597   return DbgNode && isa<MDLocation>(DbgNode);
598 }
599
600 bool DINameSpace::Verify() const {
601   if (!isNameSpace())
602     return false;
603   return DbgNode->getNumOperands() == 3 && getNumHeaderFields() == 3;
604 }
605
606 MDNode *DIFile::getFileNode() const { return getNodeField(DbgNode, 1); }
607
608 bool DIFile::Verify() const {
609   return isFile() && DbgNode->getNumOperands() == 2;
610 }
611
612 bool DIEnumerator::Verify() const {
613   return isEnumerator() && DbgNode->getNumOperands() == 1 &&
614          getNumHeaderFields() == 3;
615 }
616
617 bool DISubrange::Verify() const {
618   return isSubrange() && DbgNode->getNumOperands() == 1 &&
619          getNumHeaderFields() == 3;
620 }
621
622 bool DILexicalBlock::Verify() const {
623   return isLexicalBlock() && DbgNode->getNumOperands() == 3 &&
624          getNumHeaderFields() == 4;
625 }
626
627 bool DILexicalBlockFile::Verify() const {
628   return isLexicalBlockFile() && DbgNode->getNumOperands() == 3 &&
629          getNumHeaderFields() == 2;
630 }
631
632 bool DITemplateTypeParameter::Verify() const {
633   return isTemplateTypeParameter() && DbgNode->getNumOperands() == 4 &&
634          getNumHeaderFields() == 4;
635 }
636
637 bool DITemplateValueParameter::Verify() const {
638   return isTemplateValueParameter() && DbgNode->getNumOperands() == 5 &&
639          getNumHeaderFields() == 4;
640 }
641
642 bool DIImportedEntity::Verify() const {
643   return isImportedEntity() && DbgNode->getNumOperands() == 3 &&
644          getNumHeaderFields() == 3;
645 }
646
647 MDNode *DIDerivedType::getObjCProperty() const {
648   return getNodeField(DbgNode, 4);
649 }
650
651 MDString *DICompositeType::getIdentifier() const {
652   return cast_or_null<MDString>(getField(DbgNode, 7));
653 }
654
655 #ifndef NDEBUG
656 static void VerifySubsetOf(const MDNode *LHS, const MDNode *RHS) {
657   for (unsigned i = 0; i != LHS->getNumOperands(); ++i) {
658     // Skip the 'empty' list (that's a single i32 0, rather than truly empty).
659     if (i == 0 && mdconst::hasa<ConstantInt>(LHS->getOperand(i)))
660       continue;
661     const MDNode *E = cast<MDNode>(LHS->getOperand(i));
662     bool found = false;
663     for (unsigned j = 0; !found && j != RHS->getNumOperands(); ++j)
664       found = (E == cast<MDNode>(RHS->getOperand(j)));
665     assert(found && "Losing a member during member list replacement");
666   }
667 }
668 #endif
669
670 void DICompositeType::setArraysHelper(MDNode *Elements, MDNode *TParams) {
671   TrackingMDNodeRef N(*this);
672   if (Elements) {
673 #ifndef NDEBUG
674     // Check that the new list of members contains all the old members as well.
675     if (const MDNode *El = cast_or_null<MDNode>(N->getOperand(4)))
676       VerifySubsetOf(El, Elements);
677 #endif
678     N->replaceOperandWith(4, Elements);
679   }
680   if (TParams)
681     N->replaceOperandWith(6, TParams);
682   DbgNode = N;
683 }
684
685 DIScopeRef DIScope::getRef() const {
686   if (!isCompositeType())
687     return DIScopeRef(*this);
688   DICompositeType DTy(DbgNode);
689   if (!DTy.getIdentifier())
690     return DIScopeRef(*this);
691   return DIScopeRef(DTy.getIdentifier());
692 }
693
694 void DICompositeType::setContainingType(DICompositeType ContainingType) {
695   TrackingMDNodeRef N(*this);
696   N->replaceOperandWith(5, ContainingType.getRef());
697   DbgNode = N;
698 }
699
700 bool DIVariable::isInlinedFnArgument(const Function *CurFn) {
701   assert(CurFn && "Invalid function");
702   if (!getContext().isSubprogram())
703     return false;
704   // This variable is not inlined function argument if its scope
705   // does not describe current function.
706   return !DISubprogram(getContext()).describes(CurFn);
707 }
708
709 bool DISubprogram::describes(const Function *F) {
710   assert(F && "Invalid function");
711   if (F == getFunction())
712     return true;
713   StringRef Name = getLinkageName();
714   if (Name.empty())
715     Name = getName();
716   if (F->getName() == Name)
717     return true;
718   return false;
719 }
720
721 MDNode *DISubprogram::getVariablesNodes() const {
722   return getNodeField(DbgNode, 8);
723 }
724
725 DIArray DISubprogram::getVariables() const {
726   return DIArray(getNodeField(DbgNode, 8));
727 }
728
729 Metadata *DITemplateValueParameter::getValue() const {
730   return DbgNode->getOperand(3);
731 }
732
733 DIScopeRef DIScope::getContext() const {
734
735   if (isType())
736     return DIType(DbgNode).getContext();
737
738   if (isSubprogram())
739     return DIScopeRef(DISubprogram(DbgNode).getContext());
740
741   if (isLexicalBlock())
742     return DIScopeRef(DILexicalBlock(DbgNode).getContext());
743
744   if (isLexicalBlockFile())
745     return DIScopeRef(DILexicalBlockFile(DbgNode).getContext());
746
747   if (isNameSpace())
748     return DIScopeRef(DINameSpace(DbgNode).getContext());
749
750   assert((isFile() || isCompileUnit()) && "Unhandled type of scope.");
751   return DIScopeRef(nullptr);
752 }
753
754 StringRef DIScope::getName() const {
755   if (isType())
756     return DIType(DbgNode).getName();
757   if (isSubprogram())
758     return DISubprogram(DbgNode).getName();
759   if (isNameSpace())
760     return DINameSpace(DbgNode).getName();
761   assert((isLexicalBlock() || isLexicalBlockFile() || isFile() ||
762           isCompileUnit()) &&
763          "Unhandled type of scope.");
764   return StringRef();
765 }
766
767 StringRef DIScope::getFilename() const {
768   if (!DbgNode)
769     return StringRef();
770   return ::getStringField(getNodeField(DbgNode, 1), 0);
771 }
772
773 StringRef DIScope::getDirectory() const {
774   if (!DbgNode)
775     return StringRef();
776   return ::getStringField(getNodeField(DbgNode, 1), 1);
777 }
778
779 DIArray DICompileUnit::getEnumTypes() const {
780   if (!DbgNode || DbgNode->getNumOperands() < 7)
781     return DIArray();
782
783   return DIArray(getNodeField(DbgNode, 2));
784 }
785
786 DIArray DICompileUnit::getRetainedTypes() const {
787   if (!DbgNode || DbgNode->getNumOperands() < 7)
788     return DIArray();
789
790   return DIArray(getNodeField(DbgNode, 3));
791 }
792
793 DIArray DICompileUnit::getSubprograms() const {
794   if (!DbgNode || DbgNode->getNumOperands() < 7)
795     return DIArray();
796
797   return DIArray(getNodeField(DbgNode, 4));
798 }
799
800 DIArray DICompileUnit::getGlobalVariables() const {
801   if (!DbgNode || DbgNode->getNumOperands() < 7)
802     return DIArray();
803
804   return DIArray(getNodeField(DbgNode, 5));
805 }
806
807 DIArray DICompileUnit::getImportedEntities() const {
808   if (!DbgNode || DbgNode->getNumOperands() < 7)
809     return DIArray();
810
811   return DIArray(getNodeField(DbgNode, 6));
812 }
813
814 void DICompileUnit::replaceSubprograms(DIArray Subprograms) {
815   assert(Verify() && "Expected compile unit");
816   if (Subprograms == getSubprograms())
817     return;
818
819   const_cast<MDNode *>(DbgNode)->replaceOperandWith(4, Subprograms);
820 }
821
822 void DICompileUnit::replaceGlobalVariables(DIArray GlobalVariables) {
823   assert(Verify() && "Expected compile unit");
824   if (GlobalVariables == getGlobalVariables())
825     return;
826
827   const_cast<MDNode *>(DbgNode)->replaceOperandWith(5, GlobalVariables);
828 }
829
830 DILocation DILocation::copyWithNewScope(LLVMContext &Ctx,
831                                         DILexicalBlockFile NewScope) {
832   assert(Verify());
833   assert(NewScope && "Expected valid scope");
834
835   const auto *Old = cast<MDLocation>(DbgNode);
836   return DILocation(MDLocation::get(Ctx, Old->getLine(), Old->getColumn(),
837                                     NewScope, Old->getInlinedAt()));
838 }
839
840 unsigned DILocation::computeNewDiscriminator(LLVMContext &Ctx) {
841   std::pair<const char *, unsigned> Key(getFilename().data(), getLineNumber());
842   return ++Ctx.pImpl->DiscriminatorTable[Key];
843 }
844
845 DIVariable llvm::createInlinedVariable(MDNode *DV, MDNode *InlinedScope,
846                                        LLVMContext &VMContext) {
847   assert(DIVariable(DV).Verify() && "Expected a DIVariable");
848   if (!InlinedScope)
849     return cleanseInlinedVariable(DV, VMContext);
850
851   // Insert inlined scope.
852   SmallVector<Metadata *, 8> Elts;
853   for (unsigned I = 0, E = DIVariableInlinedAtIndex; I != E; ++I)
854     Elts.push_back(DV->getOperand(I));
855   Elts.push_back(InlinedScope);
856
857   DIVariable Inlined(MDNode::get(VMContext, Elts));
858   assert(Inlined.Verify() && "Expected to create a DIVariable");
859   return Inlined;
860 }
861
862 DIVariable llvm::cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext) {
863   assert(DIVariable(DV).Verify() && "Expected a DIVariable");
864   if (!DIVariable(DV).getInlinedAt())
865     return DIVariable(DV);
866
867   // Remove inlined scope.
868   SmallVector<Metadata *, 8> Elts;
869   for (unsigned I = 0, E = DIVariableInlinedAtIndex; I != E; ++I)
870     Elts.push_back(DV->getOperand(I));
871
872   DIVariable Cleansed(MDNode::get(VMContext, Elts));
873   assert(Cleansed.Verify() && "Expected to create a DIVariable");
874   return Cleansed;
875 }
876
877 DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
878   DIDescriptor D(Scope);
879   if (D.isSubprogram())
880     return DISubprogram(Scope);
881
882   if (D.isLexicalBlockFile())
883     return getDISubprogram(DILexicalBlockFile(Scope).getContext());
884
885   if (D.isLexicalBlock())
886     return getDISubprogram(DILexicalBlock(Scope).getContext());
887
888   return DISubprogram();
889 }
890
891 DISubprogram llvm::getDISubprogram(const Function *F) {
892   // We look for the first instr that has a debug annotation leading back to F.
893   for (auto &BB : *F) {
894     auto Inst = std::find_if(BB.begin(), BB.end(), [](const Instruction &Inst) {
895       return !Inst.getDebugLoc().isUnknown();
896     });
897     if (Inst == BB.end())
898       continue;
899     DebugLoc DLoc = Inst->getDebugLoc();
900     const MDNode *Scope = DLoc.getScopeNode();
901     DISubprogram Subprogram = getDISubprogram(Scope);
902     return Subprogram.describes(F) ? Subprogram : DISubprogram();
903   }
904
905   return DISubprogram();
906 }
907
908 DICompositeType llvm::getDICompositeType(DIType T) {
909   if (T.isCompositeType())
910     return DICompositeType(T);
911
912   if (T.isDerivedType()) {
913     // This function is currently used by dragonegg and dragonegg does
914     // not generate identifier for types, so using an empty map to resolve
915     // DerivedFrom should be fine.
916     DITypeIdentifierMap EmptyMap;
917     return getDICompositeType(
918         DIDerivedType(T).getTypeDerivedFrom().resolve(EmptyMap));
919   }
920
921   return DICompositeType();
922 }
923
924 DITypeIdentifierMap
925 llvm::generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes) {
926   DITypeIdentifierMap Map;
927   for (unsigned CUi = 0, CUe = CU_Nodes->getNumOperands(); CUi != CUe; ++CUi) {
928     DICompileUnit CU(CU_Nodes->getOperand(CUi));
929     DIArray Retain = CU.getRetainedTypes();
930     for (unsigned Ti = 0, Te = Retain.getNumElements(); Ti != Te; ++Ti) {
931       if (!Retain.getElement(Ti).isCompositeType())
932         continue;
933       DICompositeType Ty(Retain.getElement(Ti));
934       if (MDString *TypeId = Ty.getIdentifier()) {
935         // Definition has priority over declaration.
936         // Try to insert (TypeId, Ty) to Map.
937         std::pair<DITypeIdentifierMap::iterator, bool> P =
938             Map.insert(std::make_pair(TypeId, Ty));
939         // If TypeId already exists in Map and this is a definition, replace
940         // whatever we had (declaration or definition) with the definition.
941         if (!P.second && !Ty.isForwardDecl())
942           P.first->second = Ty;
943       }
944     }
945   }
946   return Map;
947 }
948
949 //===----------------------------------------------------------------------===//
950 // DebugInfoFinder implementations.
951 //===----------------------------------------------------------------------===//
952
953 void DebugInfoFinder::reset() {
954   CUs.clear();
955   SPs.clear();
956   GVs.clear();
957   TYs.clear();
958   Scopes.clear();
959   NodesSeen.clear();
960   TypeIdentifierMap.clear();
961   TypeMapInitialized = false;
962 }
963
964 void DebugInfoFinder::InitializeTypeMap(const Module &M) {
965   if (!TypeMapInitialized)
966     if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
967       TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
968       TypeMapInitialized = true;
969     }
970 }
971
972 void DebugInfoFinder::processModule(const Module &M) {
973   InitializeTypeMap(M);
974   if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
975     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
976       DICompileUnit CU(CU_Nodes->getOperand(i));
977       addCompileUnit(CU);
978       DIArray GVs = CU.getGlobalVariables();
979       for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
980         DIGlobalVariable DIG(GVs.getElement(i));
981         if (addGlobalVariable(DIG)) {
982           processScope(DIG.getContext());
983           processType(DIG.getType().resolve(TypeIdentifierMap));
984         }
985       }
986       DIArray SPs = CU.getSubprograms();
987       for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
988         processSubprogram(DISubprogram(SPs.getElement(i)));
989       DIArray EnumTypes = CU.getEnumTypes();
990       for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
991         processType(DIType(EnumTypes.getElement(i)));
992       DIArray RetainedTypes = CU.getRetainedTypes();
993       for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
994         processType(DIType(RetainedTypes.getElement(i)));
995       DIArray Imports = CU.getImportedEntities();
996       for (unsigned i = 0, e = Imports.getNumElements(); i != e; ++i) {
997         DIImportedEntity Import = DIImportedEntity(Imports.getElement(i));
998         DIDescriptor Entity = Import.getEntity().resolve(TypeIdentifierMap);
999         if (Entity.isType())
1000           processType(DIType(Entity));
1001         else if (Entity.isSubprogram())
1002           processSubprogram(DISubprogram(Entity));
1003         else if (Entity.isNameSpace())
1004           processScope(DINameSpace(Entity).getContext());
1005       }
1006     }
1007   }
1008 }
1009
1010 void DebugInfoFinder::processLocation(const Module &M, DILocation Loc) {
1011   if (!Loc)
1012     return;
1013   InitializeTypeMap(M);
1014   processScope(Loc.getScope());
1015   processLocation(M, Loc.getOrigLocation());
1016 }
1017
1018 void DebugInfoFinder::processType(DIType DT) {
1019   if (!addType(DT))
1020     return;
1021   processScope(DT.getContext().resolve(TypeIdentifierMap));
1022   if (DT.isCompositeType()) {
1023     DICompositeType DCT(DT);
1024     processType(DCT.getTypeDerivedFrom().resolve(TypeIdentifierMap));
1025     if (DT.isSubroutineType()) {
1026       DITypeArray DTA = DISubroutineType(DT).getTypeArray();
1027       for (unsigned i = 0, e = DTA.getNumElements(); i != e; ++i)
1028         processType(DTA.getElement(i).resolve(TypeIdentifierMap));
1029       return;
1030     }
1031     DIArray DA = DCT.getElements();
1032     for (unsigned i = 0, e = DA.getNumElements(); i != e; ++i) {
1033       DIDescriptor D = DA.getElement(i);
1034       if (D.isType())
1035         processType(DIType(D));
1036       else if (D.isSubprogram())
1037         processSubprogram(DISubprogram(D));
1038     }
1039   } else if (DT.isDerivedType()) {
1040     DIDerivedType DDT(DT);
1041     processType(DDT.getTypeDerivedFrom().resolve(TypeIdentifierMap));
1042   }
1043 }
1044
1045 void DebugInfoFinder::processScope(DIScope Scope) {
1046   if (Scope.isType()) {
1047     DIType Ty(Scope);
1048     processType(Ty);
1049     return;
1050   }
1051   if (Scope.isCompileUnit()) {
1052     addCompileUnit(DICompileUnit(Scope));
1053     return;
1054   }
1055   if (Scope.isSubprogram()) {
1056     processSubprogram(DISubprogram(Scope));
1057     return;
1058   }
1059   if (!addScope(Scope))
1060     return;
1061   if (Scope.isLexicalBlock()) {
1062     DILexicalBlock LB(Scope);
1063     processScope(LB.getContext());
1064   } else if (Scope.isLexicalBlockFile()) {
1065     DILexicalBlockFile LBF = DILexicalBlockFile(Scope);
1066     processScope(LBF.getScope());
1067   } else if (Scope.isNameSpace()) {
1068     DINameSpace NS(Scope);
1069     processScope(NS.getContext());
1070   }
1071 }
1072
1073 void DebugInfoFinder::processSubprogram(DISubprogram SP) {
1074   if (!addSubprogram(SP))
1075     return;
1076   processScope(SP.getContext().resolve(TypeIdentifierMap));
1077   processType(SP.getType());
1078   DIArray TParams = SP.getTemplateParams();
1079   for (unsigned I = 0, E = TParams.getNumElements(); I != E; ++I) {
1080     DIDescriptor Element = TParams.getElement(I);
1081     if (Element.isTemplateTypeParameter()) {
1082       DITemplateTypeParameter TType(Element);
1083       processScope(TType.getContext().resolve(TypeIdentifierMap));
1084       processType(TType.getType().resolve(TypeIdentifierMap));
1085     } else if (Element.isTemplateValueParameter()) {
1086       DITemplateValueParameter TVal(Element);
1087       processScope(TVal.getContext().resolve(TypeIdentifierMap));
1088       processType(TVal.getType().resolve(TypeIdentifierMap));
1089     }
1090   }
1091 }
1092
1093 void DebugInfoFinder::processDeclare(const Module &M,
1094                                      const DbgDeclareInst *DDI) {
1095   MDNode *N = dyn_cast<MDNode>(DDI->getVariable());
1096   if (!N)
1097     return;
1098   InitializeTypeMap(M);
1099
1100   DIDescriptor DV(N);
1101   if (!DV.isVariable())
1102     return;
1103
1104   if (!NodesSeen.insert(DV).second)
1105     return;
1106   processScope(DIVariable(N).getContext());
1107   processType(DIVariable(N).getType().resolve(TypeIdentifierMap));
1108 }
1109
1110 void DebugInfoFinder::processValue(const Module &M, const DbgValueInst *DVI) {
1111   MDNode *N = dyn_cast<MDNode>(DVI->getVariable());
1112   if (!N)
1113     return;
1114   InitializeTypeMap(M);
1115
1116   DIDescriptor DV(N);
1117   if (!DV.isVariable())
1118     return;
1119
1120   if (!NodesSeen.insert(DV).second)
1121     return;
1122   processScope(DIVariable(N).getContext());
1123   processType(DIVariable(N).getType().resolve(TypeIdentifierMap));
1124 }
1125
1126 bool DebugInfoFinder::addType(DIType DT) {
1127   if (!DT)
1128     return false;
1129
1130   if (!NodesSeen.insert(DT).second)
1131     return false;
1132
1133   TYs.push_back(DT);
1134   return true;
1135 }
1136
1137 bool DebugInfoFinder::addCompileUnit(DICompileUnit CU) {
1138   if (!CU)
1139     return false;
1140   if (!NodesSeen.insert(CU).second)
1141     return false;
1142
1143   CUs.push_back(CU);
1144   return true;
1145 }
1146
1147 bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable DIG) {
1148   if (!DIG)
1149     return false;
1150
1151   if (!NodesSeen.insert(DIG).second)
1152     return false;
1153
1154   GVs.push_back(DIG);
1155   return true;
1156 }
1157
1158 bool DebugInfoFinder::addSubprogram(DISubprogram SP) {
1159   if (!SP)
1160     return false;
1161
1162   if (!NodesSeen.insert(SP).second)
1163     return false;
1164
1165   SPs.push_back(SP);
1166   return true;
1167 }
1168
1169 bool DebugInfoFinder::addScope(DIScope Scope) {
1170   if (!Scope)
1171     return false;
1172   // FIXME: Ocaml binding generates a scope with no content, we treat it
1173   // as null for now.
1174   if (Scope->getNumOperands() == 0)
1175     return false;
1176   if (!NodesSeen.insert(Scope).second)
1177     return false;
1178   Scopes.push_back(Scope);
1179   return true;
1180 }
1181
1182 //===----------------------------------------------------------------------===//
1183 // DIDescriptor: dump routines for all descriptors.
1184 //===----------------------------------------------------------------------===//
1185
1186 void DIDescriptor::dump() const {
1187   print(dbgs());
1188   dbgs() << '\n';
1189 }
1190
1191 void DIDescriptor::print(raw_ostream &OS) const {
1192   if (!DbgNode)
1193     return;
1194
1195   if (const char *Tag = dwarf::TagString(getTag()))
1196     OS << "[ " << Tag << " ]";
1197
1198   if (this->isSubrange()) {
1199     DISubrange(DbgNode).printInternal(OS);
1200   } else if (this->isCompileUnit()) {
1201     DICompileUnit(DbgNode).printInternal(OS);
1202   } else if (this->isFile()) {
1203     DIFile(DbgNode).printInternal(OS);
1204   } else if (this->isEnumerator()) {
1205     DIEnumerator(DbgNode).printInternal(OS);
1206   } else if (this->isBasicType()) {
1207     DIType(DbgNode).printInternal(OS);
1208   } else if (this->isDerivedType()) {
1209     DIDerivedType(DbgNode).printInternal(OS);
1210   } else if (this->isCompositeType()) {
1211     DICompositeType(DbgNode).printInternal(OS);
1212   } else if (this->isSubprogram()) {
1213     DISubprogram(DbgNode).printInternal(OS);
1214   } else if (this->isGlobalVariable()) {
1215     DIGlobalVariable(DbgNode).printInternal(OS);
1216   } else if (this->isVariable()) {
1217     DIVariable(DbgNode).printInternal(OS);
1218   } else if (this->isObjCProperty()) {
1219     DIObjCProperty(DbgNode).printInternal(OS);
1220   } else if (this->isNameSpace()) {
1221     DINameSpace(DbgNode).printInternal(OS);
1222   } else if (this->isScope()) {
1223     DIScope(DbgNode).printInternal(OS);
1224   } else if (this->isExpression()) {
1225     DIExpression(DbgNode).printInternal(OS);
1226   }
1227 }
1228
1229 void DISubrange::printInternal(raw_ostream &OS) const {
1230   int64_t Count = getCount();
1231   if (Count != -1)
1232     OS << " [" << getLo() << ", " << Count - 1 << ']';
1233   else
1234     OS << " [unbounded]";
1235 }
1236
1237 void DIScope::printInternal(raw_ostream &OS) const {
1238   OS << " [" << getDirectory() << "/" << getFilename() << ']';
1239 }
1240
1241 void DICompileUnit::printInternal(raw_ostream &OS) const {
1242   DIScope::printInternal(OS);
1243   OS << " [";
1244   unsigned Lang = getLanguage();
1245   if (const char *LangStr = dwarf::LanguageString(Lang))
1246     OS << LangStr;
1247   else
1248     (OS << "lang 0x").write_hex(Lang);
1249   OS << ']';
1250 }
1251
1252 void DIEnumerator::printInternal(raw_ostream &OS) const {
1253   OS << " [" << getName() << " :: " << getEnumValue() << ']';
1254 }
1255
1256 void DIType::printInternal(raw_ostream &OS) const {
1257   if (!DbgNode)
1258     return;
1259
1260   StringRef Res = getName();
1261   if (!Res.empty())
1262     OS << " [" << Res << "]";
1263
1264   // TODO: Print context?
1265
1266   OS << " [line " << getLineNumber() << ", size " << getSizeInBits()
1267      << ", align " << getAlignInBits() << ", offset " << getOffsetInBits();
1268   if (isBasicType())
1269     if (const char *Enc =
1270             dwarf::AttributeEncodingString(DIBasicType(DbgNode).getEncoding()))
1271       OS << ", enc " << Enc;
1272   OS << "]";
1273
1274   if (isPrivate())
1275     OS << " [private]";
1276   else if (isProtected())
1277     OS << " [protected]";
1278   else if (isPublic())
1279     OS << " [public]";
1280
1281   if (isArtificial())
1282     OS << " [artificial]";
1283
1284   if (isForwardDecl())
1285     OS << " [decl]";
1286   else if (getTag() == dwarf::DW_TAG_structure_type ||
1287            getTag() == dwarf::DW_TAG_union_type ||
1288            getTag() == dwarf::DW_TAG_enumeration_type ||
1289            getTag() == dwarf::DW_TAG_class_type)
1290     OS << " [def]";
1291   if (isVector())
1292     OS << " [vector]";
1293   if (isStaticMember())
1294     OS << " [static]";
1295
1296   if (isLValueReference())
1297     OS << " [reference]";
1298
1299   if (isRValueReference())
1300     OS << " [rvalue reference]";
1301 }
1302
1303 void DIDerivedType::printInternal(raw_ostream &OS) const {
1304   DIType::printInternal(OS);
1305   OS << " [from " << getTypeDerivedFrom().getName() << ']';
1306 }
1307
1308 void DICompositeType::printInternal(raw_ostream &OS) const {
1309   DIType::printInternal(OS);
1310   DIArray A = getElements();
1311   OS << " [" << A.getNumElements() << " elements]";
1312 }
1313
1314 void DINameSpace::printInternal(raw_ostream &OS) const {
1315   StringRef Name = getName();
1316   if (!Name.empty())
1317     OS << " [" << Name << ']';
1318
1319   OS << " [line " << getLineNumber() << ']';
1320 }
1321
1322 void DISubprogram::printInternal(raw_ostream &OS) const {
1323   // TODO : Print context
1324   OS << " [line " << getLineNumber() << ']';
1325
1326   if (isLocalToUnit())
1327     OS << " [local]";
1328
1329   if (isDefinition())
1330     OS << " [def]";
1331
1332   if (getScopeLineNumber() != getLineNumber())
1333     OS << " [scope " << getScopeLineNumber() << "]";
1334
1335   if (isPrivate())
1336     OS << " [private]";
1337   else if (isProtected())
1338     OS << " [protected]";
1339   else if (isPublic())
1340     OS << " [public]";
1341
1342   if (isLValueReference())
1343     OS << " [reference]";
1344
1345   if (isRValueReference())
1346     OS << " [rvalue reference]";
1347
1348   StringRef Res = getName();
1349   if (!Res.empty())
1350     OS << " [" << Res << ']';
1351 }
1352
1353 void DIGlobalVariable::printInternal(raw_ostream &OS) const {
1354   StringRef Res = getName();
1355   if (!Res.empty())
1356     OS << " [" << Res << ']';
1357
1358   OS << " [line " << getLineNumber() << ']';
1359
1360   // TODO : Print context
1361
1362   if (isLocalToUnit())
1363     OS << " [local]";
1364
1365   if (isDefinition())
1366     OS << " [def]";
1367 }
1368
1369 void DIVariable::printInternal(raw_ostream &OS) const {
1370   StringRef Res = getName();
1371   if (!Res.empty())
1372     OS << " [" << Res << ']';
1373
1374   OS << " [line " << getLineNumber() << ']';
1375 }
1376
1377 void DIExpression::printInternal(raw_ostream &OS) const {
1378   for (unsigned I = 0; I < getNumElements(); ++I) {
1379     uint64_t OpCode = getElement(I);
1380     OS << " [" << OperationEncodingString(OpCode);
1381     switch (OpCode) {
1382     case DW_OP_plus: {
1383       OS << " " << getElement(++I);
1384       break;
1385     }
1386     case DW_OP_piece: {
1387       unsigned Offset = getElement(++I);
1388       unsigned Size = getElement(++I);
1389       OS << " offset=" << Offset << ", size=" << Size;
1390       break;
1391     }
1392     case DW_OP_deref:
1393       // No arguments.
1394       break;
1395     default:
1396       // Else bail out early. This may be a line table entry.
1397       OS << "Unknown]";
1398       return;
1399     }
1400     OS << "]";
1401   }
1402 }
1403
1404 void DIObjCProperty::printInternal(raw_ostream &OS) const {
1405   StringRef Name = getObjCPropertyName();
1406   if (!Name.empty())
1407     OS << " [" << Name << ']';
1408
1409   OS << " [line " << getLineNumber() << ", properties " << getUnsignedField(6)
1410      << ']';
1411 }
1412
1413 static void printDebugLoc(DebugLoc DL, raw_ostream &CommentOS,
1414                           const LLVMContext &Ctx) {
1415   if (!DL.isUnknown()) { // Print source line info.
1416     DIScope Scope(DL.getScope(Ctx));
1417     assert(Scope.isScope() && "Scope of a DebugLoc should be a DIScope.");
1418     // Omit the directory, because it's likely to be long and uninteresting.
1419     CommentOS << Scope.getFilename();
1420     CommentOS << ':' << DL.getLine();
1421     if (DL.getCol() != 0)
1422       CommentOS << ':' << DL.getCol();
1423     DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(DL.getInlinedAt(Ctx));
1424     if (!InlinedAtDL.isUnknown()) {
1425       CommentOS << " @[ ";
1426       printDebugLoc(InlinedAtDL, CommentOS, Ctx);
1427       CommentOS << " ]";
1428     }
1429   }
1430 }
1431
1432 void DIVariable::printExtendedName(raw_ostream &OS) const {
1433   const LLVMContext &Ctx = DbgNode->getContext();
1434   StringRef Res = getName();
1435   if (!Res.empty())
1436     OS << Res << "," << getLineNumber();
1437   if (MDNode *InlinedAt = getInlinedAt()) {
1438     DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(InlinedAt);
1439     if (!InlinedAtDL.isUnknown()) {
1440       OS << " @[";
1441       printDebugLoc(InlinedAtDL, OS, Ctx);
1442       OS << "]";
1443     }
1444   }
1445 }
1446
1447 template <> DIRef<DIScope>::DIRef(const Metadata *V) : Val(V) {
1448   assert(isScopeRef(V) && "DIScopeRef should be a MDString or MDNode");
1449 }
1450 template <> DIRef<DIType>::DIRef(const Metadata *V) : Val(V) {
1451   assert(isTypeRef(V) && "DITypeRef should be a MDString or MDNode");
1452 }
1453
1454 template <>
1455 DIScopeRef DIDescriptor::getFieldAs<DIScopeRef>(unsigned Elt) const {
1456   return DIScopeRef(cast_or_null<Metadata>(getField(DbgNode, Elt)));
1457 }
1458 template <> DITypeRef DIDescriptor::getFieldAs<DITypeRef>(unsigned Elt) const {
1459   return DITypeRef(cast_or_null<Metadata>(getField(DbgNode, Elt)));
1460 }
1461
1462 bool llvm::StripDebugInfo(Module &M) {
1463   bool Changed = false;
1464
1465   // Remove all of the calls to the debugger intrinsics, and remove them from
1466   // the module.
1467   if (Function *Declare = M.getFunction("llvm.dbg.declare")) {
1468     while (!Declare->use_empty()) {
1469       CallInst *CI = cast<CallInst>(Declare->user_back());
1470       CI->eraseFromParent();
1471     }
1472     Declare->eraseFromParent();
1473     Changed = true;
1474   }
1475
1476   if (Function *DbgVal = M.getFunction("llvm.dbg.value")) {
1477     while (!DbgVal->use_empty()) {
1478       CallInst *CI = cast<CallInst>(DbgVal->user_back());
1479       CI->eraseFromParent();
1480     }
1481     DbgVal->eraseFromParent();
1482     Changed = true;
1483   }
1484
1485   for (Module::named_metadata_iterator NMI = M.named_metadata_begin(),
1486          NME = M.named_metadata_end(); NMI != NME;) {
1487     NamedMDNode *NMD = NMI;
1488     ++NMI;
1489     if (NMD->getName().startswith("llvm.dbg.")) {
1490       NMD->eraseFromParent();
1491       Changed = true;
1492     }
1493   }
1494
1495   for (Module::iterator MI = M.begin(), ME = M.end(); MI != ME; ++MI)
1496     for (Function::iterator FI = MI->begin(), FE = MI->end(); FI != FE;
1497          ++FI)
1498       for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE;
1499            ++BI) {
1500         if (!BI->getDebugLoc().isUnknown()) {
1501           Changed = true;
1502           BI->setDebugLoc(DebugLoc());
1503         }
1504       }
1505
1506   return Changed;
1507 }
1508
1509 unsigned llvm::getDebugMetadataVersionFromModule(const Module &M) {
1510   if (auto *Val = mdconst::extract_or_null<ConstantInt>(
1511           M.getModuleFlag("Debug Info Version")))
1512     return Val->getZExtValue();
1513   return 0;
1514 }
1515
1516 llvm::DenseMap<const llvm::Function *, llvm::DISubprogram>
1517 llvm::makeSubprogramMap(const Module &M) {
1518   DenseMap<const Function *, DISubprogram> R;
1519
1520   NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu");
1521   if (!CU_Nodes)
1522     return R;
1523
1524   for (MDNode *N : CU_Nodes->operands()) {
1525     DICompileUnit CUNode(N);
1526     DIArray SPs = CUNode.getSubprograms();
1527     for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i) {
1528       DISubprogram SP(SPs.getElement(i));
1529       if (Function *F = SP.getFunction())
1530         R.insert(std::make_pair(F, SP));
1531     }
1532   }
1533   return R;
1534 }