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