}
</pre>
-<p>The first field of a descriptor is always an <tt>uint</tt> containing a tag
-value identifying the content of the descriptor. The remaining fields are
-specific to the descriptor. The values of tags are loosely bound to the tag
-values of Dwarf information entries. However, that does not restrict the use of
-the information supplied to Dwarf targets.</p>
+<p><a name="LLVMDebugVersion">The first field of a descriptor is always an
+<tt>uint</tt> containing a tag value identifying the content of the descriptor.
+The remaining fields are specific to the descriptor. The values of tags are
+loosely bound to the tag values of Dwarf information entries. However, that
+does not restrict the use of the information supplied to Dwarf targets. To
+facilitate versioning of debug information, the tag is augmented with the
+current debug version (LLVMDebugVersion = 4 << 16 or 0x40000.)</a></p>
-<p>The details of the various descriptors follow.</p>
+<p>The details of the various descriptors follow.</p>
</div>
<pre>
%<a href="#format_anchors">llvm.dbg.anchor.type</a> = type {
- uint, ;; Tag = 0
+ uint, ;; Tag = 0 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a>
uint ;; Tag of descriptors grouped by the anchor
}
</pre>
<pre>
%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> = type {
- uint, ;; Tag = 17 (DW_TAG_compile_unit)
+ uint, ;; Tag = 17 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_compile_unit)
{ }*, ;; Compile unit anchor = cast = (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_units</a> to { }*)
- uint, ;; LLVM debug version number = 3
uint, ;; Dwarf language identifier (ex. DW_LANG_C89)
sbyte*, ;; Source file name
sbyte*, ;; Source file directory (includes trailing slash)
}
</pre>
-<p>These descriptors contain the version number for the debug info (currently
-3), a source language ID for the file (we use the Dwarf 3.0 ID numbers, such as
-<tt>DW_LANG_C89</tt>, <tt>DW_LANG_C_plus_plus</tt>, <tt>DW_LANG_Cobol74</tt>,
-etc), three strings describing the filename, working directory of the compiler,
-and an identifier string for the compiler that produced it.</p>
+<p>These descriptors contain a source language ID for the file (we use the Dwarf
+3.0 ID numbers, such as <tt>DW_LANG_C89</tt>, <tt>DW_LANG_C_plus_plus</tt>,
+<tt>DW_LANG_Cobol74</tt>, etc), three strings describing the filename, working
+directory of the compiler, and an identifier string for the compiler that
+produced it.</p>
<p> Compile unit descriptors provide the root context for objects declared in a
specific source file. Global variables and top level functions would be defined
<pre>
%<a href="#format_global_variables">llvm.dbg.global_variable.type</a> = type {
- uint, ;; Tag = 52 (DW_TAG_variable)
+ uint, ;; Tag = 52 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_variable)
{ }*, ;; Global variable anchor = cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_global_variables">llvm.dbg.global_variables</a> to { }*),
{ }*, ;; Reference to context descriptor
sbyte*, ;; Name
<pre>
%<a href="#format_subprograms">llvm.dbg.subprogram.type</a> = type {
- uint, ;; Tag = 46 (DW_TAG_subprogram)
+ uint, ;; Tag = 46 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subprogram)
{ }*, ;; Subprogram anchor = cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_subprograms">llvm.dbg.subprograms</a> to { }*),
{ }*, ;; Reference to context descriptor
sbyte*, ;; Name
<pre>
%<a href="#format_blocks">llvm.dbg.block</a> = type {
- uint, ;; Tag = 13 (DW_TAG_lexical_block)
+ uint, ;; Tag = 13 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_lexical_block)
{ }* ;; Reference to context descriptor
}
</pre>
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype.type</a> = type {
- uint, ;; Tag = 36 (DW_TAG_base_type)
+ uint, ;; Tag = 36 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_base_type)
{ }*, ;; Reference to context (typically a compile unit)
sbyte*, ;; Name (may be "" for anonymous types)
{ }*, ;; Reference to compile unit where defined (may be NULL)
uint, ;; Size in bits
uint, ;; Alignment in bits
uint, ;; Offset in bits
- bool, ;; Is vector flag
{ }* ;; Reference to array of member descriptors
}
</pre>
DW_TAG_enumeration_type = 4
DW_TAG_structure_type = 19
DW_TAG_union_type = 23
+ DW_TAG_vector_type = 259
</pre>
<p>The vector flag indicates that an array type is a native packed vector.</p>
-<p>The members of array types (tag = <tt>DW_TAG_array_type</tt>) are <a
-href="#format_subrange">subrange descriptors</a>, each representing the range of
-subscripts at that level of indexing.</p>
+<p>The members of array types (tag = <tt>DW_TAG_array_type</tt>) or vector types
+(tag = <tt>DW_TAG_vector_type</tt>) are <a href="#format_subrange">subrange
+descriptors</a>, each representing the range of subscripts at that level of
+indexing.</p>
<p>The members of enumeration types (tag = <tt>DW_TAG_enumeration_type</tt>) are
<a href="#format_enumeration">enumerator descriptors</a>, each representing the
<pre>
%<a href="#format_subrange">llvm.dbg.subrange.type</a> = type {
- uint, ;; Tag = 33 (DW_TAG_subrange_type)
+ uint, ;; Tag = 33 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_subrange_type)
uint, ;; Low value
uint ;; High value
}
<pre>
%<a href="#format_enumeration">llvm.dbg.enumerator.type</a> = type {
- uint, ;; Tag = 40 (DW_TAG_enumerator)
+ uint, ;; Tag = 40 + <a href="#LLVMDebugVersion">LLVMDebugVersion</a> (DW_TAG_enumerator)
sbyte*, ;; Name
uint ;; Value
}
;; Define the compile unit for the source file "/Users/mine/sources/MySource.cpp".
;;
%<a href="#format_compile_units">llvm.dbg.compile_unit1</a> = internal constant %<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> {
- uint 17,
+ uint add(uint 17, uint 262144),
{ }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_units</a> to { }*),
uint 1,
uint 1,
;; Define the compile unit for the header file "/Users/mine/sources/MyHeader.h".
;;
%<a href="#format_compile_units">llvm.dbg.compile_unit2</a> = internal constant %<a href="#format_compile_units">llvm.dbg.compile_unit.type</a> {
- uint 17,
+ uint add(uint 17, uint 262144),
{ }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_units</a> to { }*),
uint 1,
uint 1,
;; variable anchor and the global variable itself.
;;
%<a href="#format_global_variables">llvm.dbg.global_variable</a> = internal constant %<a href="#format_global_variables">llvm.dbg.global_variable.type</a> {
- uint 52,
+ uint add(uint 52, uint 262144),
{ }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_global_variables">llvm.dbg.global_variables</a> to { }*),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([9 x sbyte]* %str1, int 0, int 0),
;; intrinsic type the source file is NULL and line 0.
;;
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([4 x sbyte]* %str2, int 0, int 0),
{ }* null,
;; Define the descriptor for the subprogram. TODO - more details.
;;
%<a href="#format_subprograms">llvm.dbg.subprogram</a> = internal constant %<a href="#format_subprograms">llvm.dbg.subprogram.type</a> {
- uint 46,
+ uint add(uint 46, uint 262144),
{ }* cast (%<a href="#format_anchors">llvm.dbg.anchor.type</a>* %<a href="#format_subprograms">llvm.dbg.subprograms</a> to { }*),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0),
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([5 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([14 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([10 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([19 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([4 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([13 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([14 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([23 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([6 x sbyte]* %str1, int 0, int 0),
{ }* null,
<pre>
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([7 x sbyte]* %str1, int 0, int 0),
{ }* null,
;; Define the typedef "IntPtr".
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype1</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
- uint 22,
+ uint add(uint 22, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([7 x sbyte]* %str1, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
;; Define the pointer type.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype2</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
- uint 15,
+ uint add(uint 15, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* null,
{ }* null,
;; Define the const type.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype3</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
- uint 38,
+ uint add(uint 38, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* null,
{ }* null,
;; Define the int type.
;;
%<a href="#format_basic_type">llvm.dbg.basictype1</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([4 x sbyte]* %str2, int 0, int 0),
{ }* null,
;; Define basic type for unsigned int.
;;
%<a href="#format_basic_type">llvm.dbg.basictype</a> = internal constant %<a href="#format_basic_type">llvm.dbg.basictype.type</a> {
- uint 36,
+ uint add(uint 36, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([13 x sbyte]* %str1, int 0, int 0),
{ }* null,
;; Define composite type for struct Color.
;;
%<a href="#format_composite_type">llvm.dbg.compositetype</a> = internal constant %<a href="#format_composite_type">llvm.dbg.compositetype.type</a> {
- uint 19,
+ uint add(uint 19, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([6 x sbyte]* %str2, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
uint 32,
uint 0,
{ }* null,
- bool false,
{ }* cast ([3 x { }*]* %llvm.dbg.array to { }*) }, section "llvm.metadata"
%str2 = internal constant [6 x sbyte] c"Color\00", section "llvm.metadata"
;; Define the Red field.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype1</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
- uint 13,
+ uint add(uint 13, uint 262144),
{ }* null,
sbyte* getelementptr ([4 x sbyte]* %str3, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
;; Define the Green field.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype2</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
- uint 13,
+ uint add(uint 13, uint 262144),
{ }* null,
sbyte* getelementptr ([6 x sbyte]* %str4, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
;; Define the Blue field.
;;
%<a href="#format_derived_type">llvm.dbg.derivedtype3</a> = internal constant %<a href="#format_derived_type">llvm.dbg.derivedtype.type</a> {
- uint 13,
+ uint add(uint 13, uint 262144),
{ }* null,
sbyte* getelementptr ([5 x sbyte]* %str5, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
;; Define composite type for enum Trees
;;
%<a href="#format_composite_type">llvm.dbg.compositetype</a> = internal constant %<a href="#format_composite_type">llvm.dbg.compositetype.type</a> {
- uint 4,
+ uint add(uint 4, uint 262144),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
sbyte* getelementptr ([6 x sbyte]* %str1, int 0, int 0),
{ }* cast (%<a href="#format_compile_units">llvm.dbg.compile_unit.type</a>* %<a href="#format_compile_units">llvm.dbg.compile_unit</a> to { }*),
uint 32,
uint 0,
{ }* null,
- bool false,
{ }* cast ([3 x { }*]* %llvm.dbg.array to { }*) }, section "llvm.metadata"
%str1 = internal constant [6 x sbyte] c"Trees\00", section "llvm.metadata"
;; Define Spruce enumerator.
;;
%<a href="#format_enumeration">llvm.dbg.enumerator1</a> = internal constant %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> {
- uint 40,
+ uint add(uint 40, uint 262144),
sbyte* getelementptr ([7 x sbyte]* %str2, int 0, int 0),
int 100 }, section "llvm.metadata"
%str2 = internal constant [7 x sbyte] c"Spruce\00", section "llvm.metadata"
;; Define Oak enumerator.
;;
%<a href="#format_enumeration">llvm.dbg.enumerator2</a> = internal constant %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> {
- uint 40,
+ uint add(uint 40, uint 262144),
sbyte* getelementptr ([4 x sbyte]* %str3, int 0, int 0),
int 200 }, section "llvm.metadata"
%str3 = internal constant [4 x sbyte] c"Oak\00", section "llvm.metadata"
;; Define Maple enumerator.
;;
%<a href="#format_enumeration">llvm.dbg.enumerator3</a> = internal constant %<a href="#format_enumeration">llvm.dbg.enumerator.type</a> {
- uint 40,
+ uint add(uint 40, uint 262144),
sbyte* getelementptr ([6 x sbyte]* %str4, int 0, int 0),
int 300 }, section "llvm.metadata"
%str4 = internal constant [6 x sbyte] c"Maple\00", section "llvm.metadata"
// Debug info constants.
enum {
- LLVMDebugVersion = 4 // Current version of debug information.
+ LLVMDebugVersion = (4 << 16), // Current version of debug information.
+ LLVMDebugVersionMask = 0xffff0000 // Mask for version number.
};
//===----------------------------------------------------------------------===//
///
class DebugInfoDesc {
private:
- enum {
- tag_mask = 0x0000ffff,
- version_shift = 16
- };
-
-
unsigned Tag; // Content indicator. Dwarf values are
// used but that does not limit use to
// Dwarf writers.
protected:
- DebugInfoDesc(unsigned T) : Tag(T | (LLVMDebugVersion << version_shift)) {}
+ DebugInfoDesc(unsigned T) : Tag(T | LLVMDebugVersion) {}
public:
virtual ~DebugInfoDesc() {}
// Accessors
- unsigned getTag() const { return Tag & tag_mask; }
- unsigned getVersion() const { return Tag >> version_shift; }
+ unsigned getTag() const { return Tag & ~LLVMDebugVersionMask; }
+ unsigned getVersion() const { return Tag & LLVMDebugVersionMask; }
+ void setTag(unsigned T) { Tag = T | LLVMDebugVersion; }
/// TagFromGlobal - Returns the tag number from a debug info descriptor
/// GlobalVariable. Return DIIValid if operand is not an unsigned int.
/// descriptors.
class AnchoredDesc : public DebugInfoDesc {
private:
- AnchorDesc *Anchor; // Anchor for all descriptors of the
+ DebugInfoDesc *Anchor; // Anchor for all descriptors of the
// same type.
protected:
public:
// Accessors.
- AnchorDesc *getAnchor() const { return Anchor; }
- void setAnchor(AnchorDesc *A) { Anchor = A; }
+ AnchorDesc *getAnchor() const { return static_cast<AnchorDesc *>(Anchor); }
+ void setAnchor(AnchorDesc *A) { Anchor = static_cast<DebugInfoDesc *>(A); }
//===--------------------------------------------------------------------===//
// Subclasses should supply the following virtual methods.
private:
DebugInfoDesc *Context; // Context debug descriptor.
std::string Name; // Type name (may be empty.)
- CompileUnitDesc *File; // Defined compile unit (may be NULL.)
+ DebugInfoDesc *File; // Defined compile unit (may be NULL.)
unsigned Line; // Defined line# (may be zero.)
uint64_t Size; // Type bit size (may be zero.)
uint64_t Align; // Type bit alignment (may be zero.)
// Accessors
DebugInfoDesc *getContext() const { return Context; }
const std::string &getName() const { return Name; }
- CompileUnitDesc *getFile() const { return File; }
+ CompileUnitDesc *getFile() const {
+ return static_cast<CompileUnitDesc *>(File);
+ }
unsigned getLine() const { return Line; }
uint64_t getSize() const { return Size; }
uint64_t getAlign() const { return Align; }
uint64_t getOffset() const { return Offset; }
void setContext(DebugInfoDesc *C) { Context = C; }
void setName(const std::string &N) { Name = N; }
- void setFile(CompileUnitDesc *U) { File = U; }
+ void setFile(CompileUnitDesc *U) {
+ File = static_cast<DebugInfoDesc *>(U);
+ }
void setLine(unsigned L) { Line = L; }
void setSize(uint64_t S) { Size = S; }
void setAlign(uint64_t A) { Align = A; }
/// derived types (eg., typedef, pointer, reference.)
class DerivedTypeDesc : public TypeDesc {
private:
- TypeDesc *FromType; // Type derived from.
+ DebugInfoDesc *FromType; // Type derived from.
public:
DerivedTypeDesc(unsigned T);
// Accessors
- TypeDesc *getFromType() const { return FromType; }
- void setFromType(TypeDesc *F) { FromType = F; }
+ TypeDesc *getFromType() const {
+ return static_cast<TypeDesc *>(FromType);
+ }
+ void setFromType(TypeDesc *F) {
+ FromType = static_cast<DebugInfoDesc *>(F);
+ }
// Implement isa/cast/dyncast.
static bool classof(const DerivedTypeDesc *) { return true; }
/// array/struct types (eg., arrays, struct, union, enums.)
class CompositeTypeDesc : public DerivedTypeDesc {
private:
- bool IsVector; // packed/vector array
std::vector<DebugInfoDesc *> Elements;// Information used to compose type.
public:
CompositeTypeDesc(unsigned T);
// Accessors
- bool isVector() const { return IsVector; }
std::vector<DebugInfoDesc *> &getElements() { return Elements; }
- void setIsVector() { IsVector = true; }
// Implement isa/cast/dyncast.
static bool classof(const CompositeTypeDesc *) { return true; }
private:
DebugInfoDesc *Context; // Context debug descriptor.
std::string Name; // Type name (may be empty.)
- CompileUnitDesc *File; // Defined compile unit (may be NULL.)
+ DebugInfoDesc *File; // Defined compile unit (may be NULL.)
unsigned Line; // Defined line# (may be zero.)
- TypeDesc *TyDesc; // Type of variable.
+ DebugInfoDesc *TyDesc; // Type of variable.
public:
VariableDesc(unsigned T);
// Accessors
DebugInfoDesc *getContext() const { return Context; }
const std::string &getName() const { return Name; }
- CompileUnitDesc *getFile() const { return File; }
+ CompileUnitDesc *getFile() const {
+ return static_cast<CompileUnitDesc *>(File);
+ }
unsigned getLine() const { return Line; }
- TypeDesc *getType() const { return TyDesc; }
+ TypeDesc *getType() const {
+ return static_cast<TypeDesc *>(TyDesc);
+ }
void setContext(DebugInfoDesc *C) { Context = C; }
void setName(const std::string &N) { Name = N; }
- void setFile(CompileUnitDesc *U) { File = U; }
+ void setFile(CompileUnitDesc *U) {
+ File = static_cast<DebugInfoDesc *>(U);
+ }
void setLine(unsigned L) { Line = L; }
- void setType(TypeDesc *T) { TyDesc = T; }
+ void setType(TypeDesc *T) {
+ TyDesc = static_cast<DebugInfoDesc *>(T);
+ }
// Implement isa/cast/dyncast.
static bool classof(const VariableDesc *) { return true; }
private:
DebugInfoDesc *Context; // Context debug descriptor.
std::string Name; // Global name.
- CompileUnitDesc *File; // Defined compile unit (may be NULL.)
+ DebugInfoDesc *File; // Defined compile unit (may be NULL.)
unsigned Line; // Defined line# (may be zero.)
- TypeDesc *TyDesc; // Type debug descriptor.
+ DebugInfoDesc *TyDesc; // Type debug descriptor.
bool IsStatic; // Is the global a static.
bool IsDefinition; // Is the global defined in context.
// Accessors
DebugInfoDesc *getContext() const { return Context; }
const std::string &getName() const { return Name; }
- CompileUnitDesc *getFile() const { return File; }
+ CompileUnitDesc *getFile() const {
+ return static_cast<CompileUnitDesc *>(File);
+ }
unsigned getLine() const { return Line; }
- TypeDesc *getType() const { return TyDesc; }
+ TypeDesc *getType() const {
+ return static_cast<TypeDesc *>(TyDesc);
+ }
bool isStatic() const { return IsStatic; }
bool isDefinition() const { return IsDefinition; }
void setContext(DebugInfoDesc *C) { Context = C; }
void setName(const std::string &N) { Name = N; }
- void setFile(CompileUnitDesc *U) { File = U; }
+ void setFile(CompileUnitDesc *U) {
+ File = static_cast<DebugInfoDesc *>(U);
+ }
void setLine(unsigned L) { Line = L; }
- void setType(TypeDesc *T) { TyDesc = T; }
+ void setType(TypeDesc *T) {
+ TyDesc = static_cast<DebugInfoDesc *>(T);
+ }
void setIsStatic(bool IS) { IsStatic = IS; }
void setIsDefinition(bool ID) { IsDefinition = ID; }