aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorJim Laskey <jlaskey@mac.com>2006-07-13 15:27:42 +0000
committerJim Laskey <jlaskey@mac.com>2006-07-13 15:27:42 +0000
commitd04c159ac13abbf15de719de1637c59dc38d4216 (patch)
tree1114a78f94dbe364c841803f389cb1d7a5054c8f /lib/CodeGen
parent45c04fc676027c2db5e20939c487dea54b3db151 (diff)
downloadexternal_llvm-d04c159ac13abbf15de719de1637c59dc38d4216.zip
external_llvm-d04c159ac13abbf15de719de1637c59dc38d4216.tar.gz
external_llvm-d04c159ac13abbf15de719de1637c59dc38d4216.tar.bz2
Fixed a bug handling void function types.
Requires rebuild of llvm-gcc4 (touch llvm-debug.cpp.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29131 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/DwarfWriter.cpp2
-rw-r--r--lib/CodeGen/MachineDebugInfo.cpp31
2 files changed, 21 insertions, 12 deletions
diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 14bb962..ff62b46 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1413,7 +1413,7 @@ DIE *DwarfWriter::NewType(DIE *Context, TypeDesc *TyDesc, CompileUnit *Unit) {
Ty->AddUInt(DW_AT_prototyped, DW_FORM_flag, 1);
// Add return type.
Ty->AddDIEntry(DW_AT_type, DW_FORM_ref4,
- NewType(Context, cast<TypeDesc>(Elements[0]), Unit));
+ NewType(Context, dyn_cast<TypeDesc>(Elements[0]), Unit));
// Add arguments.
for(unsigned i = 1, N = Elements.size(); i < N; ++i) {
diff --git a/lib/CodeGen/MachineDebugInfo.cpp b/lib/CodeGen/MachineDebugInfo.cpp
index 54fb1b9..fa2f57f 100644
--- a/lib/CodeGen/MachineDebugInfo.cpp
+++ b/lib/CodeGen/MachineDebugInfo.cpp
@@ -223,16 +223,21 @@ public:
Field = getGlobalVariable(C);
}
virtual void Apply(std::vector<DebugInfoDesc *> &Field) {
+ Field.resize(0);
Constant *C = CI->getOperand(I++);
GlobalVariable *GV = getGlobalVariable(C);
- Field.resize(0);
- // Have to be able to deal with the empty array case (zero initializer)
- if (!GV->hasInitializer()) return;
- if (ConstantArray *CA = dyn_cast<ConstantArray>(GV->getInitializer())) {
- for (unsigned i = 0, N = CA->getNumOperands(); i < N; ++i) {
- GlobalVariable *GVE = getGlobalVariable(CA->getOperand(i));
- DebugInfoDesc *DE = DR.Deserialize(GVE);
- Field.push_back(DE);
+ if (GV->hasInitializer()) {
+ if (ConstantArray *CA = dyn_cast<ConstantArray>(GV->getInitializer())) {
+ for (unsigned i = 0, N = CA->getNumOperands(); i < N; ++i) {
+ GlobalVariable *GVE = getGlobalVariable(CA->getOperand(i));
+ DebugInfoDesc *DE = DR.Deserialize(GVE);
+ Field.push_back(DE);
+ }
+ } else if (GV->getInitializer()->isNullValue()) {
+ if (const ArrayType *T =
+ dyn_cast<ArrayType>(GV->getType()->getElementType())) {
+ Field.resize(T->getNumElements());
+ }
}
}
}
@@ -305,9 +310,13 @@ public:
std::vector<Constant *> ArrayElements;
for (unsigned i = 0, N = Field.size(); i < N; ++i) {
- GlobalVariable *GVE = SR.Serialize(Field[i]);
- Constant *CE = ConstantExpr::getCast(GVE, EmptyTy);
- ArrayElements.push_back(cast<Constant>(CE));
+ if (DebugInfoDesc *Element = Field[i]) {
+ GlobalVariable *GVE = SR.Serialize(Element);
+ Constant *CE = ConstantExpr::getCast(GVE, EmptyTy);
+ ArrayElements.push_back(cast<Constant>(CE));
+ } else {
+ ArrayElements.push_back(ConstantPointerNull::get(EmptyTy));
+ }
}
Constant *CA = ConstantArray::get(AT, ArrayElements);