Pārlūkot izejas kodu

Bitpiece crash when value/addr are null (#3227)

Adam Yang 4 gadi atpakaļ
vecāks
revīzija
c3e64e31a6
1 mainītis faili ar 12 papildinājumiem un 2 dzēšanām
  1. 12 2
      lib/HLSL/DxilPreparePasses.cpp

+ 12 - 2
lib/HLSL/DxilPreparePasses.cpp

@@ -501,10 +501,15 @@ private:
       for (auto it = f->user_begin(), end = f->user_end(); it != end;) {
         User *u = *(it++);
         DbgValueInst *di = cast<DbgValueInst>(u);
+        Value *value = di->getValue();
+        if (!value) {
+          di->eraseFromParent();
+          continue;
+        }
         DIExpression *expr = di->getExpression();
         DILocalVariable *var = di->getVariable();
         if (BitPieceCoversEntireVar(expr, var, TypeIdentifierMap)) {
-          dib.insertDbgValueIntrinsic(di->getValue(), 0, var, DIExpression::get(di->getContext(), {}), di->getDebugLoc(), di);
+          dib.insertDbgValueIntrinsic(value, 0, var, DIExpression::get(di->getContext(), {}), di->getDebugLoc(), di);
           di->eraseFromParent();
         }
       }
@@ -513,10 +518,15 @@ private:
       for (auto it = f->user_begin(), end = f->user_end(); it != end;) {
         User *u = *(it++);
         DbgDeclareInst *di = cast<DbgDeclareInst>(u);
+        Value *addr = di->getAddress();
+        if (!addr) {
+          di->eraseFromParent();
+          continue;
+        }
         DIExpression *expr = di->getExpression();
         DILocalVariable *var = di->getVariable();
         if (BitPieceCoversEntireVar(expr, var, TypeIdentifierMap)) {
-          dib.insertDeclare(di->getAddress(), var, DIExpression::get(di->getContext(), {}), di->getDebugLoc(), di);
+          dib.insertDeclare(addr, var, DIExpression::get(di->getContext(), {}), di->getDebugLoc(), di);
           di->eraseFromParent();
         }
       }