[PATCH] Verification of invoke statepoints

Philip Reames listmail at philipreames.com
Thu Feb 5 10:24:59 PST 2015


REPOSITORY
  rL LLVM

================
Comment at: lib/IR/Verifier.cpp:2772
@@ +2771,3 @@
+    // This is case for relocate on the unwinding path of an invoke statepoint
+    if (isa<ExtractValueInst>(CI.getArgOperand(0))) {
+      Assert1(isa<LandingPadInst>(
----------------
I'd suggest using dyn_cast here.  It will simplify several parts of the following code.

================
Comment at: lib/IR/Verifier.cpp:2787
@@ +2786,3 @@
+              cast<Instruction>(CI.getArgOperand(0))->getParent());
+      Assert1(invokeBB->getTerminator(),
+              "safepoint block should be well formed",
----------------
I think this is checked elsewhere.

================
Comment at: lib/IR/Verifier.cpp:2798
@@ +2797,3 @@
+      // relocates of a call statepoint
+      Assert2(isStatepoint(cast<Instruction>(CI.getArgOperand(0))),
+              "gc relocate is incorrectly tied to the statepoint",
----------------
The cast needs to be check in a way you don't crash here.  :)

auto Op0 = ...
isa<Instruction>(Op0) && ...

================
Comment at: lib/IR/Verifier.cpp:2806
@@ -2767,1 +2805,3 @@
+    GCRelocateOperands ops(&CI);
+    ImmutableCallSite StatepointCS = ImmutableCallSite(ops.statepoint());
 
----------------
This can be more cleanly written as:
ImmutableCallSite StatepointCS(ops.statepoint());

http://reviews.llvm.org/D7366

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list