Bullet proof against undefined args produced by upgrading ols-style debug info.
authorJim Laskey <jlaskey@mac.com>
Sun, 26 Mar 2006 22:46:27 +0000 (22:46 +0000)
committerJim Laskey <jlaskey@mac.com>
Sun, 26 Mar 2006 22:46:27 +0000 (22:46 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27155 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
lib/VMCore/IntrinsicInst.cpp

index 0cd91ad5720068c5a32c83c82af3c8b2278b7e7f..f6fb089789ca802f79c78cee11a8c26406f45fb9 100644 (file)
@@ -1114,7 +1114,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
   case Intrinsic::dbg_stoppoint: {
     MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
     DbgStopPointInst &SPI = cast<DbgStopPointInst>(I);
-    if (DebugInfo &&  DebugInfo->Verify(SPI.getContext())) {
+    if (DebugInfo && SPI.getContext() && DebugInfo->Verify(SPI.getContext())) {
       std::vector<SDOperand> Ops;
 
       Ops.push_back(getRoot());
@@ -1136,7 +1136,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
   case Intrinsic::dbg_region_start: {
     MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
     DbgRegionStartInst &RSI = cast<DbgRegionStartInst>(I);
-    if (DebugInfo && DebugInfo->Verify(RSI.getContext())) {
+    if (DebugInfo && RSI.getContext() && DebugInfo->Verify(RSI.getContext())) {
       std::vector<SDOperand> Ops;
 
       unsigned LabelID = DebugInfo->RecordRegionStart(RSI.getContext());
@@ -1152,7 +1152,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
   case Intrinsic::dbg_region_end: {
     MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
     DbgRegionEndInst &REI = cast<DbgRegionEndInst>(I);
-    if (DebugInfo && DebugInfo->Verify(REI.getContext())) {
+    if (DebugInfo && REI.getContext() && DebugInfo->Verify(REI.getContext())) {
       std::vector<SDOperand> Ops;
 
       unsigned LabelID = DebugInfo->RecordRegionEnd(REI.getContext());
@@ -1168,7 +1168,8 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
   case Intrinsic::dbg_func_start: {
     MachineDebugInfo *DebugInfo = DAG.getMachineDebugInfo();
     DbgFuncStartInst &FSI = cast<DbgFuncStartInst>(I);
-    if (DebugInfo && DebugInfo->Verify(FSI.getSubprogram())) {
+    if (DebugInfo && FSI.getSubprogram() &&
+        DebugInfo->Verify(FSI.getSubprogram())) {
       std::vector<SDOperand> Ops;
 
       unsigned LabelID = DebugInfo->RecordRegionStart(FSI.getSubprogram());
index 8bdb944373a463c7d5ec7e4820b2e6ad627a1034..2c2c5a96edfd22c9cde80baa9fa44faeee8bcac0 100644 (file)
@@ -45,13 +45,13 @@ static Value *CastOperand(Value *C) {
 
 Value *DbgInfoIntrinsic::StripCast(Value *C) {
   if (Value *CO = CastOperand(C)) {
-    return StripCast(CO);
+    C = StripCast(CO);
   } else if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) {
     if (GV->hasInitializer())
       if (Value *CO = CastOperand(GV->getInitializer()))
-        return StripCast(CO);
+        C = StripCast(CO);
   }
-  return C;
+  return dyn_cast<GlobalVariable>(C);
 }
 
 //===----------------------------------------------------------------------===//