Revert "Revert "Revert "PR20038: DebugInfo: Inlined call sites where the caller has...
[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/DerivedTypes.h"
23 #include "llvm/IR/Instructions.h"
24 #include "llvm/IR/IntrinsicInst.h"
25 #include "llvm/IR/Intrinsics.h"
26 #include "llvm/IR/Module.h"
27 #include "llvm/IR/ValueHandle.h"
28 #include "llvm/Support/Debug.h"
29 #include "llvm/Support/Dwarf.h"
30 #include "llvm/Support/raw_ostream.h"
31 using namespace llvm;
32 using namespace llvm::dwarf;
33
34 //===----------------------------------------------------------------------===//
35 // DIDescriptor
36 //===----------------------------------------------------------------------===//
37
38 bool DIDescriptor::Verify() const {
39   return DbgNode &&
40          (DIDerivedType(DbgNode).Verify() ||
41           DICompositeType(DbgNode).Verify() || DIBasicType(DbgNode).Verify() ||
42           DIVariable(DbgNode).Verify() || DISubprogram(DbgNode).Verify() ||
43           DIGlobalVariable(DbgNode).Verify() || DIFile(DbgNode).Verify() ||
44           DICompileUnit(DbgNode).Verify() || DINameSpace(DbgNode).Verify() ||
45           DILexicalBlock(DbgNode).Verify() ||
46           DILexicalBlockFile(DbgNode).Verify() ||
47           DISubrange(DbgNode).Verify() || DIEnumerator(DbgNode).Verify() ||
48           DIObjCProperty(DbgNode).Verify() ||
49           DIUnspecifiedParameter(DbgNode).Verify() ||
50           DITemplateTypeParameter(DbgNode).Verify() ||
51           DITemplateValueParameter(DbgNode).Verify() ||
52           DIImportedEntity(DbgNode).Verify());
53 }
54
55 static Value *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 (!DbgNode)
77     return 0;
78
79   if (Elt < DbgNode->getNumOperands())
80     if (ConstantInt *CI =
81             dyn_cast_or_null<ConstantInt>(DbgNode->getOperand(Elt)))
82       return CI->getZExtValue();
83
84   return 0;
85 }
86
87 int64_t DIDescriptor::getInt64Field(unsigned Elt) const {
88   if (!DbgNode)
89     return 0;
90
91   if (Elt < DbgNode->getNumOperands())
92     if (ConstantInt *CI =
93             dyn_cast_or_null<ConstantInt>(DbgNode->getOperand(Elt)))
94       return CI->getSExtValue();
95
96   return 0;
97 }
98
99 DIDescriptor DIDescriptor::getDescriptorField(unsigned Elt) const {
100   MDNode *Field = getNodeField(DbgNode, Elt);
101   return DIDescriptor(Field);
102 }
103
104 GlobalVariable *DIDescriptor::getGlobalVariableField(unsigned Elt) const {
105   if (!DbgNode)
106     return nullptr;
107
108   if (Elt < DbgNode->getNumOperands())
109     return dyn_cast_or_null<GlobalVariable>(DbgNode->getOperand(Elt));
110   return nullptr;
111 }
112
113 Constant *DIDescriptor::getConstantField(unsigned Elt) const {
114   if (!DbgNode)
115     return nullptr;
116
117   if (Elt < DbgNode->getNumOperands())
118     return dyn_cast_or_null<Constant>(DbgNode->getOperand(Elt));
119   return nullptr;
120 }
121
122 Function *DIDescriptor::getFunctionField(unsigned Elt) const {
123   if (!DbgNode)
124     return nullptr;
125
126   if (Elt < DbgNode->getNumOperands())
127     return dyn_cast_or_null<Function>(DbgNode->getOperand(Elt));
128   return nullptr;
129 }
130
131 void DIDescriptor::replaceFunctionField(unsigned Elt, Function *F) {
132   if (!DbgNode)
133     return;
134
135   if (Elt < DbgNode->getNumOperands()) {
136     MDNode *Node = const_cast<MDNode *>(DbgNode);
137     Node->replaceOperandWith(Elt, F);
138   }
139 }
140
141 unsigned DIVariable::getNumAddrElements() const {
142   return DbgNode->getNumOperands() - 8;
143 }
144
145 /// getInlinedAt - If this variable is inlined then return inline location.
146 MDNode *DIVariable::getInlinedAt() const { return getNodeField(DbgNode, 7); }
147
148 //===----------------------------------------------------------------------===//
149 // Predicates
150 //===----------------------------------------------------------------------===//
151
152 /// isBasicType - Return true if the specified tag is legal for
153 /// DIBasicType.
154 bool DIDescriptor::isBasicType() const {
155   if (!DbgNode)
156     return false;
157   switch (getTag()) {
158   case dwarf::DW_TAG_base_type:
159   case dwarf::DW_TAG_unspecified_type:
160     return true;
161   default:
162     return false;
163   }
164 }
165
166 /// isDerivedType - Return true if the specified tag is legal for DIDerivedType.
167 bool DIDescriptor::isDerivedType() const {
168   if (!DbgNode)
169     return false;
170   switch (getTag()) {
171   case dwarf::DW_TAG_typedef:
172   case dwarf::DW_TAG_pointer_type:
173   case dwarf::DW_TAG_ptr_to_member_type:
174   case dwarf::DW_TAG_reference_type:
175   case dwarf::DW_TAG_rvalue_reference_type:
176   case dwarf::DW_TAG_const_type:
177   case dwarf::DW_TAG_volatile_type:
178   case dwarf::DW_TAG_restrict_type:
179   case dwarf::DW_TAG_member:
180   case dwarf::DW_TAG_inheritance:
181   case dwarf::DW_TAG_friend:
182     return true;
183   default:
184     // CompositeTypes are currently modelled as DerivedTypes.
185     return isCompositeType();
186   }
187 }
188
189 /// isCompositeType - Return true if the specified tag is legal for
190 /// DICompositeType.
191 bool DIDescriptor::isCompositeType() const {
192   if (!DbgNode)
193     return false;
194   switch (getTag()) {
195   case dwarf::DW_TAG_array_type:
196   case dwarf::DW_TAG_structure_type:
197   case dwarf::DW_TAG_union_type:
198   case dwarf::DW_TAG_enumeration_type:
199   case dwarf::DW_TAG_subroutine_type:
200   case dwarf::DW_TAG_class_type:
201     return true;
202   default:
203     return false;
204   }
205 }
206
207 /// isVariable - Return true if the specified tag is legal for DIVariable.
208 bool DIDescriptor::isVariable() const {
209   if (!DbgNode)
210     return false;
211   switch (getTag()) {
212   case dwarf::DW_TAG_auto_variable:
213   case dwarf::DW_TAG_arg_variable:
214     return true;
215   default:
216     return false;
217   }
218 }
219
220 /// isType - Return true if the specified tag is legal for DIType.
221 bool DIDescriptor::isType() const {
222   return isBasicType() || isCompositeType() || isDerivedType();
223 }
224
225 /// isSubprogram - Return true if the specified tag is legal for
226 /// DISubprogram.
227 bool DIDescriptor::isSubprogram() const {
228   return DbgNode && getTag() == dwarf::DW_TAG_subprogram;
229 }
230
231 /// isGlobalVariable - Return true if the specified tag is legal for
232 /// DIGlobalVariable.
233 bool DIDescriptor::isGlobalVariable() const {
234   return DbgNode && (getTag() == dwarf::DW_TAG_variable ||
235                      getTag() == dwarf::DW_TAG_constant);
236 }
237
238 /// isUnspecifiedParmeter - Return true if the specified tag is
239 /// DW_TAG_unspecified_parameters.
240 bool DIDescriptor::isUnspecifiedParameter() const {
241   return DbgNode && getTag() == dwarf::DW_TAG_unspecified_parameters;
242 }
243
244 /// isScope - Return true if the specified tag is one of the scope
245 /// related tag.
246 bool DIDescriptor::isScope() const {
247   if (!DbgNode)
248     return false;
249   switch (getTag()) {
250   case dwarf::DW_TAG_compile_unit:
251   case dwarf::DW_TAG_lexical_block:
252   case dwarf::DW_TAG_subprogram:
253   case dwarf::DW_TAG_namespace:
254   case dwarf::DW_TAG_file_type:
255     return true;
256   default:
257     break;
258   }
259   return isType();
260 }
261
262 /// isTemplateTypeParameter - Return true if the specified tag is
263 /// DW_TAG_template_type_parameter.
264 bool DIDescriptor::isTemplateTypeParameter() const {
265   return DbgNode && getTag() == dwarf::DW_TAG_template_type_parameter;
266 }
267
268 /// isTemplateValueParameter - Return true if the specified tag is
269 /// DW_TAG_template_value_parameter.
270 bool DIDescriptor::isTemplateValueParameter() const {
271   return DbgNode && (getTag() == dwarf::DW_TAG_template_value_parameter ||
272                      getTag() == dwarf::DW_TAG_GNU_template_template_param ||
273                      getTag() == dwarf::DW_TAG_GNU_template_parameter_pack);
274 }
275
276 /// isCompileUnit - Return true if the specified tag is DW_TAG_compile_unit.
277 bool DIDescriptor::isCompileUnit() const {
278   return DbgNode && getTag() == dwarf::DW_TAG_compile_unit;
279 }
280
281 /// isFile - Return true if the specified tag is DW_TAG_file_type.
282 bool DIDescriptor::isFile() const {
283   return DbgNode && getTag() == dwarf::DW_TAG_file_type;
284 }
285
286 /// isNameSpace - Return true if the specified tag is DW_TAG_namespace.
287 bool DIDescriptor::isNameSpace() const {
288   return DbgNode && getTag() == dwarf::DW_TAG_namespace;
289 }
290
291 /// isLexicalBlockFile - Return true if the specified descriptor is a
292 /// lexical block with an extra file.
293 bool DIDescriptor::isLexicalBlockFile() const {
294   return DbgNode && getTag() == dwarf::DW_TAG_lexical_block &&
295          (DbgNode->getNumOperands() == 3);
296 }
297
298 /// isLexicalBlock - Return true if the specified tag is DW_TAG_lexical_block.
299 bool DIDescriptor::isLexicalBlock() const {
300   return DbgNode && getTag() == dwarf::DW_TAG_lexical_block &&
301          (DbgNode->getNumOperands() > 3);
302 }
303
304 /// isSubrange - Return true if the specified tag is DW_TAG_subrange_type.
305 bool DIDescriptor::isSubrange() const {
306   return DbgNode && getTag() == dwarf::DW_TAG_subrange_type;
307 }
308
309 /// isEnumerator - Return true if the specified tag is DW_TAG_enumerator.
310 bool DIDescriptor::isEnumerator() const {
311   return DbgNode && getTag() == dwarf::DW_TAG_enumerator;
312 }
313
314 /// isObjCProperty - Return true if the specified tag is DW_TAG_APPLE_property.
315 bool DIDescriptor::isObjCProperty() const {
316   return DbgNode && getTag() == dwarf::DW_TAG_APPLE_property;
317 }
318
319 /// \brief Return true if the specified tag is DW_TAG_imported_module or
320 /// DW_TAG_imported_declaration.
321 bool DIDescriptor::isImportedEntity() const {
322   return DbgNode && (getTag() == dwarf::DW_TAG_imported_module ||
323                      getTag() == dwarf::DW_TAG_imported_declaration);
324 }
325
326 //===----------------------------------------------------------------------===//
327 // Simple Descriptor Constructors and other Methods
328 //===----------------------------------------------------------------------===//
329
330 unsigned DIArray::getNumElements() const {
331   if (!DbgNode)
332     return 0;
333   return DbgNode->getNumOperands();
334 }
335
336 /// replaceAllUsesWith - Replace all uses of the MDNode used by this
337 /// type with the one in the passed descriptor.
338 void DIType::replaceAllUsesWith(LLVMContext &VMContext, DIDescriptor D) {
339
340   assert(DbgNode && "Trying to replace an unverified type!");
341
342   // Since we use a TrackingVH for the node, its easy for clients to manufacture
343   // legitimate situations where they want to replaceAllUsesWith() on something
344   // which, due to uniquing, has merged with the source. We shield clients from
345   // this detail by allowing a value to be replaced with replaceAllUsesWith()
346   // itself.
347   const MDNode *DN = D;
348   if (DbgNode == DN) {
349     SmallVector<Value*, 10> Ops(DbgNode->getNumOperands());
350     for (size_t i = 0; i != Ops.size(); ++i)
351       Ops[i] = DbgNode->getOperand(i);
352     DN = MDNode::get(VMContext, Ops);
353   }
354
355   MDNode *Node = const_cast<MDNode *>(DbgNode);
356   const Value *V = cast_or_null<Value>(DN);
357   Node->replaceAllUsesWith(const_cast<Value *>(V));
358   MDNode::deleteTemporary(Node);
359   DbgNode = D;
360 }
361
362 /// replaceAllUsesWith - Replace all uses of the MDNode used by this
363 /// type with the one in D.
364 void DIType::replaceAllUsesWith(MDNode *D) {
365
366   assert(DbgNode && "Trying to replace an unverified type!");
367   assert(DbgNode != D && "This replacement should always happen");
368   MDNode *Node = const_cast<MDNode *>(DbgNode);
369   const MDNode *DN = D;
370   const Value *V = cast_or_null<Value>(DN);
371   Node->replaceAllUsesWith(const_cast<Value *>(V));
372   MDNode::deleteTemporary(Node);
373 }
374
375 /// Verify - Verify that a compile unit is well formed.
376 bool DICompileUnit::Verify() const {
377   if (!isCompileUnit())
378     return false;
379
380   // Don't bother verifying the compilation directory or producer string
381   // as those could be empty.
382   if (getFilename().empty())
383     return false;
384
385   return DbgNode->getNumOperands() == 14;
386 }
387
388 /// Verify - Verify that an ObjC property is well formed.
389 bool DIObjCProperty::Verify() const {
390   if (!isObjCProperty())
391     return false;
392
393   // Don't worry about the rest of the strings for now.
394   return DbgNode->getNumOperands() == 8;
395 }
396
397 /// Check if a field at position Elt of a MDNode is a MDNode.
398 /// We currently allow an empty string and an integer.
399 /// But we don't allow a non-empty string in a MDNode field.
400 static bool fieldIsMDNode(const MDNode *DbgNode, unsigned Elt) {
401   // FIXME: This function should return true, if the field is null or the field
402   // is indeed a MDNode: return !Fld || isa<MDNode>(Fld).
403   Value *Fld = getField(DbgNode, Elt);
404   if (Fld && isa<MDString>(Fld) && !cast<MDString>(Fld)->getString().empty())
405     return false;
406   return true;
407 }
408
409 /// Check if a field at position Elt of a MDNode is a MDString.
410 static bool fieldIsMDString(const MDNode *DbgNode, unsigned Elt) {
411   Value *Fld = getField(DbgNode, Elt);
412   return !Fld || isa<MDString>(Fld);
413 }
414
415 /// Check if a value can be a reference to a type.
416 static bool isTypeRef(const Value *Val) {
417   return !Val ||
418          (isa<MDString>(Val) && !cast<MDString>(Val)->getString().empty()) ||
419          (isa<MDNode>(Val) && DIType(cast<MDNode>(Val)).isType());
420 }
421
422 /// Check if a field at position Elt of a MDNode can be a reference to a type.
423 static bool fieldIsTypeRef(const MDNode *DbgNode, unsigned Elt) {
424   Value *Fld = getField(DbgNode, Elt);
425   return isTypeRef(Fld);
426 }
427
428 /// Check if a value can be a ScopeRef.
429 static bool isScopeRef(const Value *Val) {
430   return !Val ||
431     (isa<MDString>(Val) && !cast<MDString>(Val)->getString().empty()) ||
432     // Not checking for Val->isScope() here, because it would work
433     // only for lexical scopes and not all subclasses of DIScope.
434     isa<MDNode>(Val);
435 }
436
437 /// Check if a field at position Elt of a MDNode can be a ScopeRef.
438 static bool fieldIsScopeRef(const MDNode *DbgNode, unsigned Elt) {
439   Value *Fld = getField(DbgNode, Elt);
440   return isScopeRef(Fld);
441 }
442
443 /// Verify - Verify that a type descriptor is well formed.
444 bool DIType::Verify() const {
445   if (!isType())
446     return false;
447   // Make sure Context @ field 2 is MDNode.
448   if (!fieldIsScopeRef(DbgNode, 2))
449     return false;
450
451   // FIXME: Sink this into the various subclass verifies.
452   uint16_t Tag = getTag();
453   if (!isBasicType() && Tag != dwarf::DW_TAG_const_type &&
454       Tag != dwarf::DW_TAG_volatile_type && Tag != dwarf::DW_TAG_pointer_type &&
455       Tag != dwarf::DW_TAG_ptr_to_member_type &&
456       Tag != dwarf::DW_TAG_reference_type &&
457       Tag != dwarf::DW_TAG_rvalue_reference_type &&
458       Tag != dwarf::DW_TAG_restrict_type && Tag != dwarf::DW_TAG_array_type &&
459       Tag != dwarf::DW_TAG_enumeration_type &&
460       Tag != dwarf::DW_TAG_subroutine_type &&
461       Tag != dwarf::DW_TAG_inheritance && Tag != dwarf::DW_TAG_friend &&
462       getFilename().empty())
463     return false;
464   // DIType is abstract, it should be a BasicType, a DerivedType or
465   // a CompositeType.
466   if (isBasicType())
467     return DIBasicType(DbgNode).Verify();
468   else if (isCompositeType())
469     return DICompositeType(DbgNode).Verify();
470   else if (isDerivedType())
471     return DIDerivedType(DbgNode).Verify();
472   else
473     return false;
474 }
475
476 /// Verify - Verify that a basic type descriptor is well formed.
477 bool DIBasicType::Verify() const {
478   return isBasicType() && DbgNode->getNumOperands() == 10;
479 }
480
481 /// Verify - Verify that a derived type descriptor is well formed.
482 bool DIDerivedType::Verify() const {
483   // Make sure DerivedFrom @ field 9 is TypeRef.
484   if (!fieldIsTypeRef(DbgNode, 9))
485     return false;
486   if (getTag() == dwarf::DW_TAG_ptr_to_member_type)
487     // Make sure ClassType @ field 10 is a TypeRef.
488     if (!fieldIsTypeRef(DbgNode, 10))
489       return false;
490
491   return isDerivedType() && DbgNode->getNumOperands() >= 10 &&
492          DbgNode->getNumOperands() <= 14;
493 }
494
495 /// Verify - Verify that a composite type descriptor is well formed.
496 bool DICompositeType::Verify() const {
497   if (!isCompositeType())
498     return false;
499
500   // Make sure DerivedFrom @ field 9 and ContainingType @ field 12 are TypeRef.
501   if (!fieldIsTypeRef(DbgNode, 9))
502     return false;
503   if (!fieldIsTypeRef(DbgNode, 12))
504     return false;
505
506   // Make sure the type identifier at field 14 is MDString, it can be null.
507   if (!fieldIsMDString(DbgNode, 14))
508     return false;
509
510   // A subroutine type can't be both & and &&.
511   if (isLValueReference() && isRValueReference())
512     return false;
513
514   return DbgNode->getNumOperands() == 15;
515 }
516
517 /// Verify - Verify that a subprogram descriptor is well formed.
518 bool DISubprogram::Verify() const {
519   if (!isSubprogram())
520     return false;
521
522   // Make sure context @ field 2 is a ScopeRef and type @ field 7 is a MDNode.
523   if (!fieldIsScopeRef(DbgNode, 2))
524     return false;
525   if (!fieldIsMDNode(DbgNode, 7))
526     return false;
527   // Containing type @ field 12.
528   if (!fieldIsTypeRef(DbgNode, 12))
529     return false;
530
531   // A subprogram can't be both & and &&.
532   if (isLValueReference() && isRValueReference())
533     return false;
534
535   return DbgNode->getNumOperands() == 20;
536 }
537
538 /// Verify - Verify that a global variable descriptor is well formed.
539 bool DIGlobalVariable::Verify() const {
540   if (!isGlobalVariable())
541     return false;
542
543   if (getDisplayName().empty())
544     return false;
545   // Make sure context @ field 2 is an MDNode.
546   if (!fieldIsMDNode(DbgNode, 2))
547     return false;
548   // Make sure that type @ field 8 is a DITypeRef.
549   if (!fieldIsTypeRef(DbgNode, 8))
550     return false;
551   // Make sure StaticDataMemberDeclaration @ field 12 is MDNode.
552   if (!fieldIsMDNode(DbgNode, 12))
553     return false;
554
555   return DbgNode->getNumOperands() == 13;
556 }
557
558 /// Verify - Verify that a variable descriptor is well formed.
559 bool DIVariable::Verify() const {
560   if (!isVariable())
561     return false;
562
563   // Make sure context @ field 1 is an MDNode.
564   if (!fieldIsMDNode(DbgNode, 1))
565     return false;
566   // Make sure that type @ field 5 is a DITypeRef.
567   if (!fieldIsTypeRef(DbgNode, 5))
568     return false;
569   return DbgNode->getNumOperands() >= 8;
570 }
571
572 /// Verify - Verify that a location descriptor is well formed.
573 bool DILocation::Verify() const {
574   if (!DbgNode)
575     return false;
576
577   return DbgNode->getNumOperands() == 4;
578 }
579
580 /// Verify - Verify that a namespace descriptor is well formed.
581 bool DINameSpace::Verify() const {
582   if (!isNameSpace())
583     return false;
584   return DbgNode->getNumOperands() == 5;
585 }
586
587 /// \brief Retrieve the MDNode for the directory/file pair.
588 MDNode *DIFile::getFileNode() const { return getNodeField(DbgNode, 1); }
589
590 /// \brief Verify that the file descriptor is well formed.
591 bool DIFile::Verify() const {
592   return isFile() && DbgNode->getNumOperands() == 2;
593 }
594
595 /// \brief Verify that the enumerator descriptor is well formed.
596 bool DIEnumerator::Verify() const {
597   return isEnumerator() && DbgNode->getNumOperands() == 3;
598 }
599
600 /// \brief Verify that the subrange descriptor is well formed.
601 bool DISubrange::Verify() const {
602   return isSubrange() && DbgNode->getNumOperands() == 3;
603 }
604
605 /// \brief Verify that the lexical block descriptor is well formed.
606 bool DILexicalBlock::Verify() const {
607   return isLexicalBlock() && DbgNode->getNumOperands() == 7;
608 }
609
610 /// \brief Verify that the file-scoped lexical block descriptor is well formed.
611 bool DILexicalBlockFile::Verify() const {
612   return isLexicalBlockFile() && DbgNode->getNumOperands() == 3;
613 }
614
615 /// \brief Verify that an unspecified parameter descriptor is well formed.
616 bool DIUnspecifiedParameter::Verify() const {
617   return isUnspecifiedParameter() && DbgNode->getNumOperands() == 1;
618 }
619
620 /// \brief Verify that the template type parameter descriptor is well formed.
621 bool DITemplateTypeParameter::Verify() const {
622   return isTemplateTypeParameter() && DbgNode->getNumOperands() == 7;
623 }
624
625 /// \brief Verify that the template value parameter descriptor is well formed.
626 bool DITemplateValueParameter::Verify() const {
627   return isTemplateValueParameter() && DbgNode->getNumOperands() == 8;
628 }
629
630 /// \brief Verify that the imported module descriptor is well formed.
631 bool DIImportedEntity::Verify() const {
632   return isImportedEntity() &&
633          (DbgNode->getNumOperands() == 4 || DbgNode->getNumOperands() == 5);
634 }
635
636 /// getObjCProperty - Return property node, if this ivar is associated with one.
637 MDNode *DIDerivedType::getObjCProperty() const {
638   return getNodeField(DbgNode, 10);
639 }
640
641 MDString *DICompositeType::getIdentifier() const {
642   return cast_or_null<MDString>(getField(DbgNode, 14));
643 }
644
645 #ifndef NDEBUG
646 static void VerifySubsetOf(const MDNode *LHS, const MDNode *RHS) {
647   for (unsigned i = 0; i != LHS->getNumOperands(); ++i) {
648     // Skip the 'empty' list (that's a single i32 0, rather than truly empty).
649     if (i == 0 && isa<ConstantInt>(LHS->getOperand(i)))
650       continue;
651     const MDNode *E = cast<MDNode>(LHS->getOperand(i));
652     bool found = false;
653     for (unsigned j = 0; !found && j != RHS->getNumOperands(); ++j)
654       found = E == RHS->getOperand(j);
655     assert(found && "Losing a member during member list replacement");
656   }
657 }
658 #endif
659
660 /// \brief Set the array of member DITypes.
661 void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) {
662   assert((!TParams || DbgNode->getNumOperands() == 15) &&
663          "If you're setting the template parameters this should include a slot "
664          "for that!");
665   TrackingVH<MDNode> N(*this);
666   if (Elements) {
667 #ifndef NDEBUG
668     // Check that the new list of members contains all the old members as well.
669     if (const MDNode *El = cast_or_null<MDNode>(N->getOperand(10)))
670       VerifySubsetOf(El, Elements);
671 #endif
672     N->replaceOperandWith(10, Elements);
673   }
674   if (TParams)
675     N->replaceOperandWith(13, TParams);
676   DbgNode = N;
677 }
678
679 /// Generate a reference to this DIType. Uses the type identifier instead
680 /// of the actual MDNode if possible, to help type uniquing.
681 DIScopeRef DIScope::getRef() const {
682   if (!isCompositeType())
683     return DIScopeRef(*this);
684   DICompositeType DTy(DbgNode);
685   if (!DTy.getIdentifier())
686     return DIScopeRef(*this);
687   return DIScopeRef(DTy.getIdentifier());
688 }
689
690 /// \brief Set the containing type.
691 void DICompositeType::setContainingType(DICompositeType ContainingType) {
692   TrackingVH<MDNode> N(*this);
693   N->replaceOperandWith(12, ContainingType.getRef());
694   DbgNode = N;
695 }
696
697 /// isInlinedFnArgument - Return true if this variable provides debugging
698 /// information for an inlined function arguments.
699 bool DIVariable::isInlinedFnArgument(const Function *CurFn) {
700   assert(CurFn && "Invalid function");
701   if (!getContext().isSubprogram())
702     return false;
703   // This variable is not inlined function argument if its scope
704   // does not describe current function.
705   return !DISubprogram(getContext()).describes(CurFn);
706 }
707
708 /// describes - Return true if this subprogram provides debugging
709 /// information for the function F.
710 bool DISubprogram::describes(const Function *F) {
711   assert(F && "Invalid function");
712   if (F == getFunction())
713     return true;
714   StringRef Name = getLinkageName();
715   if (Name.empty())
716     Name = getName();
717   if (F->getName() == Name)
718     return true;
719   return false;
720 }
721
722 unsigned DISubprogram::isOptimized() const {
723   assert(DbgNode && "Invalid subprogram descriptor!");
724   if (DbgNode->getNumOperands() == 15)
725     return getUnsignedField(14);
726   return 0;
727 }
728
729 MDNode *DISubprogram::getVariablesNodes() const {
730   return getNodeField(DbgNode, 18);
731 }
732
733 DIArray DISubprogram::getVariables() const {
734   return DIArray(getNodeField(DbgNode, 18));
735 }
736
737 Value *DITemplateValueParameter::getValue() const {
738   return getField(DbgNode, 4);
739 }
740
741 // If the current node has a parent scope then return that,
742 // else return an empty scope.
743 DIScopeRef DIScope::getContext() const {
744
745   if (isType())
746     return DIType(DbgNode).getContext();
747
748   if (isSubprogram())
749     return DIScopeRef(DISubprogram(DbgNode).getContext());
750
751   if (isLexicalBlock())
752     return DIScopeRef(DILexicalBlock(DbgNode).getContext());
753
754   if (isLexicalBlockFile())
755     return DIScopeRef(DILexicalBlockFile(DbgNode).getContext());
756
757   if (isNameSpace())
758     return DIScopeRef(DINameSpace(DbgNode).getContext());
759
760   assert((isFile() || isCompileUnit()) && "Unhandled type of scope.");
761   return DIScopeRef(nullptr);
762 }
763
764 // If the scope node has a name, return that, else return an empty string.
765 StringRef DIScope::getName() const {
766   if (isType())
767     return DIType(DbgNode).getName();
768   if (isSubprogram())
769     return DISubprogram(DbgNode).getName();
770   if (isNameSpace())
771     return DINameSpace(DbgNode).getName();
772   assert((isLexicalBlock() || isLexicalBlockFile() || isFile() ||
773           isCompileUnit()) &&
774          "Unhandled type of scope.");
775   return StringRef();
776 }
777
778 StringRef DIScope::getFilename() const {
779   if (!DbgNode)
780     return StringRef();
781   return ::getStringField(getNodeField(DbgNode, 1), 0);
782 }
783
784 StringRef DIScope::getDirectory() const {
785   if (!DbgNode)
786     return StringRef();
787   return ::getStringField(getNodeField(DbgNode, 1), 1);
788 }
789
790 DIArray DICompileUnit::getEnumTypes() const {
791   if (!DbgNode || DbgNode->getNumOperands() < 13)
792     return DIArray();
793
794   return DIArray(getNodeField(DbgNode, 7));
795 }
796
797 DIArray DICompileUnit::getRetainedTypes() const {
798   if (!DbgNode || DbgNode->getNumOperands() < 13)
799     return DIArray();
800
801   return DIArray(getNodeField(DbgNode, 8));
802 }
803
804 DIArray DICompileUnit::getSubprograms() const {
805   if (!DbgNode || DbgNode->getNumOperands() < 13)
806     return DIArray();
807
808   return DIArray(getNodeField(DbgNode, 9));
809 }
810
811 DIArray DICompileUnit::getGlobalVariables() const {
812   if (!DbgNode || DbgNode->getNumOperands() < 13)
813     return DIArray();
814
815   return DIArray(getNodeField(DbgNode, 10));
816 }
817
818 DIArray DICompileUnit::getImportedEntities() const {
819   if (!DbgNode || DbgNode->getNumOperands() < 13)
820     return DIArray();
821
822   return DIArray(getNodeField(DbgNode, 11));
823 }
824
825 /// copyWithNewScope - Return a copy of this location, replacing the
826 /// current scope with the given one.
827 DILocation DILocation::copyWithNewScope(LLVMContext &Ctx,
828                                         DILexicalBlock NewScope) {
829   SmallVector<Value *, 10> Elts;
830   assert(Verify());
831   for (unsigned I = 0; I < DbgNode->getNumOperands(); ++I) {
832     if (I != 2)
833       Elts.push_back(DbgNode->getOperand(I));
834     else
835       Elts.push_back(NewScope);
836   }
837   MDNode *NewDIL = MDNode::get(Ctx, Elts);
838   return DILocation(NewDIL);
839 }
840
841 /// computeNewDiscriminator - Generate a new discriminator value for this
842 /// file and line location.
843 unsigned DILocation::computeNewDiscriminator(LLVMContext &Ctx) {
844   std::pair<const char *, unsigned> Key(getFilename().data(), getLineNumber());
845   return ++Ctx.pImpl->DiscriminatorTable[Key];
846 }
847
848 /// fixupSubprogramName - Replace contains special characters used
849 /// in a typical Objective-C names with '.' in a given string.
850 static void fixupSubprogramName(DISubprogram Fn, SmallVectorImpl<char> &Out) {
851   StringRef FName =
852       Fn.getFunction() ? Fn.getFunction()->getName() : Fn.getName();
853   FName = Function::getRealLinkageName(FName);
854
855   StringRef Prefix("llvm.dbg.lv.");
856   Out.reserve(FName.size() + Prefix.size());
857   Out.append(Prefix.begin(), Prefix.end());
858
859   bool isObjCLike = false;
860   for (size_t i = 0, e = FName.size(); i < e; ++i) {
861     char C = FName[i];
862     if (C == '[')
863       isObjCLike = true;
864
865     if (isObjCLike && (C == '[' || C == ']' || C == ' ' || C == ':' ||
866                        C == '+' || C == '(' || C == ')'))
867       Out.push_back('.');
868     else
869       Out.push_back(C);
870   }
871 }
872
873 /// getFnSpecificMDNode - Return a NameMDNode, if available, that is
874 /// suitable to hold function specific information.
875 NamedMDNode *llvm::getFnSpecificMDNode(const Module &M, DISubprogram Fn) {
876   SmallString<32> Name;
877   fixupSubprogramName(Fn, Name);
878   return M.getNamedMetadata(Name.str());
879 }
880
881 /// getOrInsertFnSpecificMDNode - Return a NameMDNode that is suitable
882 /// to hold function specific information.
883 NamedMDNode *llvm::getOrInsertFnSpecificMDNode(Module &M, DISubprogram Fn) {
884   SmallString<32> Name;
885   fixupSubprogramName(Fn, Name);
886   return M.getOrInsertNamedMetadata(Name.str());
887 }
888
889 /// createInlinedVariable - Create a new inlined variable based on current
890 /// variable.
891 /// @param DV            Current Variable.
892 /// @param InlinedScope  Location at current variable is inlined.
893 DIVariable llvm::createInlinedVariable(MDNode *DV, MDNode *InlinedScope,
894                                        LLVMContext &VMContext) {
895   SmallVector<Value *, 16> Elts;
896   // Insert inlined scope as 7th element.
897   for (unsigned i = 0, e = DV->getNumOperands(); i != e; ++i)
898     i == 7 ? Elts.push_back(InlinedScope) : Elts.push_back(DV->getOperand(i));
899   return DIVariable(MDNode::get(VMContext, Elts));
900 }
901
902 /// cleanseInlinedVariable - Remove inlined scope from the variable.
903 DIVariable llvm::cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext) {
904   SmallVector<Value *, 16> Elts;
905   // Insert inlined scope as 7th element.
906   for (unsigned i = 0, e = DV->getNumOperands(); i != e; ++i)
907     i == 7 ? Elts.push_back(Constant::getNullValue(Type::getInt32Ty(VMContext)))
908            : Elts.push_back(DV->getOperand(i));
909   return DIVariable(MDNode::get(VMContext, Elts));
910 }
911
912 /// getDISubprogram - Find subprogram that is enclosing this scope.
913 DISubprogram llvm::getDISubprogram(const MDNode *Scope) {
914   DIDescriptor D(Scope);
915   if (D.isSubprogram())
916     return DISubprogram(Scope);
917
918   if (D.isLexicalBlockFile())
919     return getDISubprogram(DILexicalBlockFile(Scope).getContext());
920
921   if (D.isLexicalBlock())
922     return getDISubprogram(DILexicalBlock(Scope).getContext());
923
924   return DISubprogram();
925 }
926
927 /// getDICompositeType - Find underlying composite type.
928 DICompositeType llvm::getDICompositeType(DIType T) {
929   if (T.isCompositeType())
930     return DICompositeType(T);
931
932   if (T.isDerivedType()) {
933     // This function is currently used by dragonegg and dragonegg does
934     // not generate identifier for types, so using an empty map to resolve
935     // DerivedFrom should be fine.
936     DITypeIdentifierMap EmptyMap;
937     return getDICompositeType(
938         DIDerivedType(T).getTypeDerivedFrom().resolve(EmptyMap));
939   }
940
941   return DICompositeType();
942 }
943
944 /// Update DITypeIdentifierMap by going through retained types of each CU.
945 DITypeIdentifierMap
946 llvm::generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes) {
947   DITypeIdentifierMap Map;
948   for (unsigned CUi = 0, CUe = CU_Nodes->getNumOperands(); CUi != CUe; ++CUi) {
949     DICompileUnit CU(CU_Nodes->getOperand(CUi));
950     DIArray Retain = CU.getRetainedTypes();
951     for (unsigned Ti = 0, Te = Retain.getNumElements(); Ti != Te; ++Ti) {
952       if (!Retain.getElement(Ti).isCompositeType())
953         continue;
954       DICompositeType Ty(Retain.getElement(Ti));
955       if (MDString *TypeId = Ty.getIdentifier()) {
956         // Definition has priority over declaration.
957         // Try to insert (TypeId, Ty) to Map.
958         std::pair<DITypeIdentifierMap::iterator, bool> P =
959             Map.insert(std::make_pair(TypeId, Ty));
960         // If TypeId already exists in Map and this is a definition, replace
961         // whatever we had (declaration or definition) with the definition.
962         if (!P.second && !Ty.isForwardDecl())
963           P.first->second = Ty;
964       }
965     }
966   }
967   return Map;
968 }
969
970 //===----------------------------------------------------------------------===//
971 // DebugInfoFinder implementations.
972 //===----------------------------------------------------------------------===//
973
974 void DebugInfoFinder::reset() {
975   CUs.clear();
976   SPs.clear();
977   GVs.clear();
978   TYs.clear();
979   Scopes.clear();
980   NodesSeen.clear();
981   TypeIdentifierMap.clear();
982   TypeMapInitialized = false;
983 }
984
985 void DebugInfoFinder::InitializeTypeMap(const Module &M) {
986   if (!TypeMapInitialized)
987     if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
988       TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
989       TypeMapInitialized = true;
990     }
991 }
992
993 /// processModule - Process entire module and collect debug info.
994 void DebugInfoFinder::processModule(const Module &M) {
995   InitializeTypeMap(M);
996   if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
997     for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
998       DICompileUnit CU(CU_Nodes->getOperand(i));
999       addCompileUnit(CU);
1000       DIArray GVs = CU.getGlobalVariables();
1001       for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
1002         DIGlobalVariable DIG(GVs.getElement(i));
1003         if (addGlobalVariable(DIG)) {
1004           processScope(DIG.getContext());
1005           processType(DIG.getType().resolve(TypeIdentifierMap));
1006         }
1007       }
1008       DIArray SPs = CU.getSubprograms();
1009       for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
1010         processSubprogram(DISubprogram(SPs.getElement(i)));
1011       DIArray EnumTypes = CU.getEnumTypes();
1012       for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
1013         processType(DIType(EnumTypes.getElement(i)));
1014       DIArray RetainedTypes = CU.getRetainedTypes();
1015       for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
1016         processType(DIType(RetainedTypes.getElement(i)));
1017       DIArray Imports = CU.getImportedEntities();
1018       for (unsigned i = 0, e = Imports.getNumElements(); i != e; ++i) {
1019         DIImportedEntity Import = DIImportedEntity(Imports.getElement(i));
1020         DIDescriptor Entity = Import.getEntity().resolve(TypeIdentifierMap);
1021         if (Entity.isType())
1022           processType(DIType(Entity));
1023         else if (Entity.isSubprogram())
1024           processSubprogram(DISubprogram(Entity));
1025         else if (Entity.isNameSpace())
1026           processScope(DINameSpace(Entity).getContext());
1027       }
1028     }
1029   }
1030 }
1031
1032 /// processLocation - Process DILocation.
1033 void DebugInfoFinder::processLocation(const Module &M, DILocation Loc) {
1034   if (!Loc)
1035     return;
1036   InitializeTypeMap(M);
1037   processScope(Loc.getScope());
1038   processLocation(M, Loc.getOrigLocation());
1039 }
1040
1041 /// processType - Process DIType.
1042 void DebugInfoFinder::processType(DIType DT) {
1043   if (!addType(DT))
1044     return;
1045   processScope(DT.getContext().resolve(TypeIdentifierMap));
1046   if (DT.isCompositeType()) {
1047     DICompositeType DCT(DT);
1048     processType(DCT.getTypeDerivedFrom().resolve(TypeIdentifierMap));
1049     DIArray DA = DCT.getTypeArray();
1050     for (unsigned i = 0, e = DA.getNumElements(); i != e; ++i) {
1051       DIDescriptor D = DA.getElement(i);
1052       if (D.isType())
1053         processType(DIType(D));
1054       else if (D.isSubprogram())
1055         processSubprogram(DISubprogram(D));
1056     }
1057   } else if (DT.isDerivedType()) {
1058     DIDerivedType DDT(DT);
1059     processType(DDT.getTypeDerivedFrom().resolve(TypeIdentifierMap));
1060   }
1061 }
1062
1063 void DebugInfoFinder::processScope(DIScope Scope) {
1064   if (Scope.isType()) {
1065     DIType Ty(Scope);
1066     processType(Ty);
1067     return;
1068   }
1069   if (Scope.isCompileUnit()) {
1070     addCompileUnit(DICompileUnit(Scope));
1071     return;
1072   }
1073   if (Scope.isSubprogram()) {
1074     processSubprogram(DISubprogram(Scope));
1075     return;
1076   }
1077   if (!addScope(Scope))
1078     return;
1079   if (Scope.isLexicalBlock()) {
1080     DILexicalBlock LB(Scope);
1081     processScope(LB.getContext());
1082   } else if (Scope.isLexicalBlockFile()) {
1083     DILexicalBlockFile LBF = DILexicalBlockFile(Scope);
1084     processScope(LBF.getScope());
1085   } else if (Scope.isNameSpace()) {
1086     DINameSpace NS(Scope);
1087     processScope(NS.getContext());
1088   }
1089 }
1090
1091 /// processSubprogram - Process DISubprogram.
1092 void DebugInfoFinder::processSubprogram(DISubprogram SP) {
1093   if (!addSubprogram(SP))
1094     return;
1095   processScope(SP.getContext().resolve(TypeIdentifierMap));
1096   processType(SP.getType());
1097   DIArray TParams = SP.getTemplateParams();
1098   for (unsigned I = 0, E = TParams.getNumElements(); I != E; ++I) {
1099     DIDescriptor Element = TParams.getElement(I);
1100     if (Element.isTemplateTypeParameter()) {
1101       DITemplateTypeParameter TType(Element);
1102       processScope(TType.getContext().resolve(TypeIdentifierMap));
1103       processType(TType.getType().resolve(TypeIdentifierMap));
1104     } else if (Element.isTemplateValueParameter()) {
1105       DITemplateValueParameter TVal(Element);
1106       processScope(TVal.getContext().resolve(TypeIdentifierMap));
1107       processType(TVal.getType().resolve(TypeIdentifierMap));
1108     }
1109   }
1110 }
1111
1112 /// processDeclare - Process DbgDeclareInst.
1113 void DebugInfoFinder::processDeclare(const Module &M,
1114                                      const DbgDeclareInst *DDI) {
1115   MDNode *N = dyn_cast<MDNode>(DDI->getVariable());
1116   if (!N)
1117     return;
1118   InitializeTypeMap(M);
1119
1120   DIDescriptor DV(N);
1121   if (!DV.isVariable())
1122     return;
1123
1124   if (!NodesSeen.insert(DV))
1125     return;
1126   processScope(DIVariable(N).getContext());
1127   processType(DIVariable(N).getType().resolve(TypeIdentifierMap));
1128 }
1129
1130 void DebugInfoFinder::processValue(const Module &M, const DbgValueInst *DVI) {
1131   MDNode *N = dyn_cast<MDNode>(DVI->getVariable());
1132   if (!N)
1133     return;
1134   InitializeTypeMap(M);
1135
1136   DIDescriptor DV(N);
1137   if (!DV.isVariable())
1138     return;
1139
1140   if (!NodesSeen.insert(DV))
1141     return;
1142   processScope(DIVariable(N).getContext());
1143   processType(DIVariable(N).getType().resolve(TypeIdentifierMap));
1144 }
1145
1146 /// addType - Add type into Tys.
1147 bool DebugInfoFinder::addType(DIType DT) {
1148   if (!DT)
1149     return false;
1150
1151   if (!NodesSeen.insert(DT))
1152     return false;
1153
1154   TYs.push_back(DT);
1155   return true;
1156 }
1157
1158 /// addCompileUnit - Add compile unit into CUs.
1159 bool DebugInfoFinder::addCompileUnit(DICompileUnit CU) {
1160   if (!CU)
1161     return false;
1162   if (!NodesSeen.insert(CU))
1163     return false;
1164
1165   CUs.push_back(CU);
1166   return true;
1167 }
1168
1169 /// addGlobalVariable - Add global variable into GVs.
1170 bool DebugInfoFinder::addGlobalVariable(DIGlobalVariable DIG) {
1171   if (!DIG)
1172     return false;
1173
1174   if (!NodesSeen.insert(DIG))
1175     return false;
1176
1177   GVs.push_back(DIG);
1178   return true;
1179 }
1180
1181 // addSubprogram - Add subprgoram into SPs.
1182 bool DebugInfoFinder::addSubprogram(DISubprogram SP) {
1183   if (!SP)
1184     return false;
1185
1186   if (!NodesSeen.insert(SP))
1187     return false;
1188
1189   SPs.push_back(SP);
1190   return true;
1191 }
1192
1193 bool DebugInfoFinder::addScope(DIScope Scope) {
1194   if (!Scope)
1195     return false;
1196   // FIXME: Ocaml binding generates a scope with no content, we treat it
1197   // as null for now.
1198   if (Scope->getNumOperands() == 0)
1199     return false;
1200   if (!NodesSeen.insert(Scope))
1201     return false;
1202   Scopes.push_back(Scope);
1203   return true;
1204 }
1205
1206 //===----------------------------------------------------------------------===//
1207 // DIDescriptor: dump routines for all descriptors.
1208 //===----------------------------------------------------------------------===//
1209
1210 /// dump - Print descriptor to dbgs() with a newline.
1211 void DIDescriptor::dump() const {
1212   print(dbgs());
1213   dbgs() << '\n';
1214 }
1215
1216 /// print - Print descriptor.
1217 void DIDescriptor::print(raw_ostream &OS) const {
1218   if (!DbgNode)
1219     return;
1220
1221   if (const char *Tag = dwarf::TagString(getTag()))
1222     OS << "[ " << Tag << " ]";
1223
1224   if (this->isSubrange()) {
1225     DISubrange(DbgNode).printInternal(OS);
1226   } else if (this->isCompileUnit()) {
1227     DICompileUnit(DbgNode).printInternal(OS);
1228   } else if (this->isFile()) {
1229     DIFile(DbgNode).printInternal(OS);
1230   } else if (this->isEnumerator()) {
1231     DIEnumerator(DbgNode).printInternal(OS);
1232   } else if (this->isBasicType()) {
1233     DIType(DbgNode).printInternal(OS);
1234   } else if (this->isDerivedType()) {
1235     DIDerivedType(DbgNode).printInternal(OS);
1236   } else if (this->isCompositeType()) {
1237     DICompositeType(DbgNode).printInternal(OS);
1238   } else if (this->isSubprogram()) {
1239     DISubprogram(DbgNode).printInternal(OS);
1240   } else if (this->isGlobalVariable()) {
1241     DIGlobalVariable(DbgNode).printInternal(OS);
1242   } else if (this->isVariable()) {
1243     DIVariable(DbgNode).printInternal(OS);
1244   } else if (this->isObjCProperty()) {
1245     DIObjCProperty(DbgNode).printInternal(OS);
1246   } else if (this->isNameSpace()) {
1247     DINameSpace(DbgNode).printInternal(OS);
1248   } else if (this->isScope()) {
1249     DIScope(DbgNode).printInternal(OS);
1250   }
1251 }
1252
1253 void DISubrange::printInternal(raw_ostream &OS) const {
1254   int64_t Count = getCount();
1255   if (Count != -1)
1256     OS << " [" << getLo() << ", " << Count - 1 << ']';
1257   else
1258     OS << " [unbounded]";
1259 }
1260
1261 void DIScope::printInternal(raw_ostream &OS) const {
1262   OS << " [" << getDirectory() << "/" << getFilename() << ']';
1263 }
1264
1265 void DICompileUnit::printInternal(raw_ostream &OS) const {
1266   DIScope::printInternal(OS);
1267   OS << " [";
1268   unsigned Lang = getLanguage();
1269   if (const char *LangStr = dwarf::LanguageString(Lang))
1270     OS << LangStr;
1271   else
1272     (OS << "lang 0x").write_hex(Lang);
1273   OS << ']';
1274 }
1275
1276 void DIEnumerator::printInternal(raw_ostream &OS) const {
1277   OS << " [" << getName() << " :: " << getEnumValue() << ']';
1278 }
1279
1280 void DIType::printInternal(raw_ostream &OS) const {
1281   if (!DbgNode)
1282     return;
1283
1284   StringRef Res = getName();
1285   if (!Res.empty())
1286     OS << " [" << Res << "]";
1287
1288   // TODO: Print context?
1289
1290   OS << " [line " << getLineNumber() << ", size " << getSizeInBits()
1291      << ", align " << getAlignInBits() << ", offset " << getOffsetInBits();
1292   if (isBasicType())
1293     if (const char *Enc =
1294             dwarf::AttributeEncodingString(DIBasicType(DbgNode).getEncoding()))
1295       OS << ", enc " << Enc;
1296   OS << "]";
1297
1298   if (isPrivate())
1299     OS << " [private]";
1300   else if (isProtected())
1301     OS << " [protected]";
1302
1303   if (isArtificial())
1304     OS << " [artificial]";
1305
1306   if (isForwardDecl())
1307     OS << " [decl]";
1308   else if (getTag() == dwarf::DW_TAG_structure_type ||
1309            getTag() == dwarf::DW_TAG_union_type ||
1310            getTag() == dwarf::DW_TAG_enumeration_type ||
1311            getTag() == dwarf::DW_TAG_class_type)
1312     OS << " [def]";
1313   if (isVector())
1314     OS << " [vector]";
1315   if (isStaticMember())
1316     OS << " [static]";
1317
1318   if (isLValueReference())
1319     OS << " [reference]";
1320
1321   if (isRValueReference())
1322     OS << " [rvalue reference]";
1323 }
1324
1325 void DIDerivedType::printInternal(raw_ostream &OS) const {
1326   DIType::printInternal(OS);
1327   OS << " [from " << getTypeDerivedFrom().getName() << ']';
1328 }
1329
1330 void DICompositeType::printInternal(raw_ostream &OS) const {
1331   DIType::printInternal(OS);
1332   DIArray A = getTypeArray();
1333   OS << " [" << A.getNumElements() << " elements]";
1334 }
1335
1336 void DINameSpace::printInternal(raw_ostream &OS) const {
1337   StringRef Name = getName();
1338   if (!Name.empty())
1339     OS << " [" << Name << ']';
1340
1341   OS << " [line " << getLineNumber() << ']';
1342 }
1343
1344 void DISubprogram::printInternal(raw_ostream &OS) const {
1345   // TODO : Print context
1346   OS << " [line " << getLineNumber() << ']';
1347
1348   if (isLocalToUnit())
1349     OS << " [local]";
1350
1351   if (isDefinition())
1352     OS << " [def]";
1353
1354   if (getScopeLineNumber() != getLineNumber())
1355     OS << " [scope " << getScopeLineNumber() << "]";
1356
1357   if (isPrivate())
1358     OS << " [private]";
1359   else if (isProtected())
1360     OS << " [protected]";
1361
1362   if (isLValueReference())
1363     OS << " [reference]";
1364
1365   if (isRValueReference())
1366     OS << " [rvalue reference]";
1367
1368   StringRef Res = getName();
1369   if (!Res.empty())
1370     OS << " [" << Res << ']';
1371 }
1372
1373 void DIGlobalVariable::printInternal(raw_ostream &OS) const {
1374   StringRef Res = getName();
1375   if (!Res.empty())
1376     OS << " [" << Res << ']';
1377
1378   OS << " [line " << getLineNumber() << ']';
1379
1380   // TODO : Print context
1381
1382   if (isLocalToUnit())
1383     OS << " [local]";
1384
1385   if (isDefinition())
1386     OS << " [def]";
1387 }
1388
1389 void DIVariable::printInternal(raw_ostream &OS) const {
1390   StringRef Res = getName();
1391   if (!Res.empty())
1392     OS << " [" << Res << ']';
1393
1394   OS << " [line " << getLineNumber() << ']';
1395 }
1396
1397 void DIObjCProperty::printInternal(raw_ostream &OS) const {
1398   StringRef Name = getObjCPropertyName();
1399   if (!Name.empty())
1400     OS << " [" << Name << ']';
1401
1402   OS << " [line " << getLineNumber() << ", properties " << getUnsignedField(6)
1403      << ']';
1404 }
1405
1406 static void printDebugLoc(DebugLoc DL, raw_ostream &CommentOS,
1407                           const LLVMContext &Ctx) {
1408   if (!DL.isUnknown()) { // Print source line info.
1409     DIScope Scope(DL.getScope(Ctx));
1410     assert(Scope.isScope() && "Scope of a DebugLoc should be a DIScope.");
1411     // Omit the directory, because it's likely to be long and uninteresting.
1412     CommentOS << Scope.getFilename();
1413     CommentOS << ':' << DL.getLine();
1414     if (DL.getCol() != 0)
1415       CommentOS << ':' << DL.getCol();
1416     DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(DL.getInlinedAt(Ctx));
1417     if (!InlinedAtDL.isUnknown()) {
1418       CommentOS << " @[ ";
1419       printDebugLoc(InlinedAtDL, CommentOS, Ctx);
1420       CommentOS << " ]";
1421     }
1422   }
1423 }
1424
1425 void DIVariable::printExtendedName(raw_ostream &OS) const {
1426   const LLVMContext &Ctx = DbgNode->getContext();
1427   StringRef Res = getName();
1428   if (!Res.empty())
1429     OS << Res << "," << getLineNumber();
1430   if (MDNode *InlinedAt = getInlinedAt()) {
1431     DebugLoc InlinedAtDL = DebugLoc::getFromDILocation(InlinedAt);
1432     if (!InlinedAtDL.isUnknown()) {
1433       OS << " @[";
1434       printDebugLoc(InlinedAtDL, OS, Ctx);
1435       OS << "]";
1436     }
1437   }
1438 }
1439
1440 /// Specialize constructor to make sure it has the correct type.
1441 template <> DIRef<DIScope>::DIRef(const Value *V) : Val(V) {
1442   assert(isScopeRef(V) && "DIScopeRef should be a MDString or MDNode");
1443 }
1444 template <> DIRef<DIType>::DIRef(const Value *V) : Val(V) {
1445   assert(isTypeRef(V) && "DITypeRef should be a MDString or MDNode");
1446 }
1447
1448 /// Specialize getFieldAs to handle fields that are references to DIScopes.
1449 template <>
1450 DIScopeRef DIDescriptor::getFieldAs<DIScopeRef>(unsigned Elt) const {
1451   return DIScopeRef(getField(DbgNode, Elt));
1452 }
1453 /// Specialize getFieldAs to handle fields that are references to DITypes.
1454 template <> DITypeRef DIDescriptor::getFieldAs<DITypeRef>(unsigned Elt) const {
1455   return DITypeRef(getField(DbgNode, Elt));
1456 }
1457
1458 /// Strip debug info in the module if it exists.
1459 /// To do this, we remove all calls to the debugger intrinsics and any named
1460 /// metadata for debugging. We also remove debug locations for instructions.
1461 /// Return true if module is modified.
1462 bool llvm::StripDebugInfo(Module &M) {
1463
1464   bool Changed = false;
1465
1466   // Remove all of the calls to the debugger intrinsics, and remove them from
1467   // the module.
1468   if (Function *Declare = M.getFunction("llvm.dbg.declare")) {
1469     while (!Declare->use_empty()) {
1470       CallInst *CI = cast<CallInst>(Declare->user_back());
1471       CI->eraseFromParent();
1472     }
1473     Declare->eraseFromParent();
1474     Changed = true;
1475   }
1476
1477   if (Function *DbgVal = M.getFunction("llvm.dbg.value")) {
1478     while (!DbgVal->use_empty()) {
1479       CallInst *CI = cast<CallInst>(DbgVal->user_back());
1480       CI->eraseFromParent();
1481     }
1482     DbgVal->eraseFromParent();
1483     Changed = true;
1484   }
1485
1486   for (Module::named_metadata_iterator NMI = M.named_metadata_begin(),
1487          NME = M.named_metadata_end(); NMI != NME;) {
1488     NamedMDNode *NMD = NMI;
1489     ++NMI;
1490     if (NMD->getName().startswith("llvm.dbg.")) {
1491       NMD->eraseFromParent();
1492       Changed = true;
1493     }
1494   }
1495
1496   for (Module::iterator MI = M.begin(), ME = M.end(); MI != ME; ++MI)
1497     for (Function::iterator FI = MI->begin(), FE = MI->end(); FI != FE;
1498          ++FI)
1499       for (BasicBlock::iterator BI = FI->begin(), BE = FI->end(); BI != BE;
1500            ++BI) {
1501         if (!BI->getDebugLoc().isUnknown()) {
1502           Changed = true;
1503           BI->setDebugLoc(DebugLoc());
1504         }
1505       }
1506
1507   return Changed;
1508 }
1509
1510 /// Return Debug Info Metadata Version by checking module flags.
1511 unsigned llvm::getDebugMetadataVersionFromModule(const Module &M) {
1512   Value *Val = M.getModuleFlag("Debug Info Version");
1513   if (!Val)
1514     return 0;
1515   return cast<ConstantInt>(Val)->getZExtValue();
1516 }