diff options
| -rw-r--r-- | llvm/include/llvm/Analysis/DebugInfo.h | 2 | ||||
| -rw-r--r-- | llvm/lib/Analysis/DebugInfo.cpp | 8 | 
2 files changed, 9 insertions, 1 deletions
diff --git a/llvm/include/llvm/Analysis/DebugInfo.h b/llvm/include/llvm/Analysis/DebugInfo.h index 1ee4f5ba448..c0a43b3b761 100644 --- a/llvm/include/llvm/Analysis/DebugInfo.h +++ b/llvm/include/llvm/Analysis/DebugInfo.h @@ -60,7 +60,7 @@ namespace llvm {      template <typename DescTy>      DescTy getFieldAs(unsigned Elt) const { -      return DescTy(getDescriptorField(6).getGV()); +      return DescTy(getDescriptorField(Elt).getGV());      }      GlobalVariable *getGlobalVariableField(unsigned Elt) const; diff --git a/llvm/lib/Analysis/DebugInfo.cpp b/llvm/lib/Analysis/DebugInfo.cpp index 01db8abf4e2..29175a6a2d4 100644 --- a/llvm/lib/Analysis/DebugInfo.cpp +++ b/llvm/lib/Analysis/DebugInfo.cpp @@ -100,6 +100,14 @@ DIGlobalVariable::DIGlobalVariable(GlobalVariable *GV)    : DIGlobal(GV, dwarf::DW_TAG_variable) {}  DIBlock::DIBlock(GlobalVariable *GV)    : DIDescriptor(GV, dwarf::DW_TAG_lexical_block) {} +// needed by DIVariable::getType() +DIType::DIType(GlobalVariable *GV) : DIDescriptor(GV) { +  if (!GV) return; +  unsigned tag = getTag(); +  if (tag != dwarf::DW_TAG_base_type && !DIDerivedType::isDerivedType(tag) && +      !DICompositeType::isCompositeType(tag)) +    GV = 0; +}  /// isDerivedType - Return true if the specified tag is legal for  /// DIDerivedType.  | 

