Here's a patch to LLVM that makes Rust build again at -O0 (issue #836 on
our bug tracker). Rafael, could you upstream it when you get a chance?
Thanks!
Patrick
Index: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (revision 137913)
+++ lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (working copy)
@@ -4957,11 +4957,16 @@
}
case Intrinsic::gcroot:
if (GFI) {
- const Value *Alloca = I.getArgOperand(0);
- const Constant *TypeMap = cast<Constant>(I.getArgOperand(1));
+ const Value *Alloca = I.getArgOperand(0)->stripPointerCasts();
+ assert(isa<AllocaInst>(Alloca) && "First argument to gcroot()
must be "
+ "an alloca or a bitcast of one!");
+ const Value *TypeMap = I.getArgOperand(1);
+ assert(isa<Constant>(TypeMap) && "Second argument to gcroot()
must be "
+ "a constant!");
+
FrameIndexSDNode *FI =
cast<FrameIndexSDNode>(getValue(Alloca).getNode());
- GFI->addStackRoot(FI->getIndex(), TypeMap);
+ GFI->addStackRoot(FI->getIndex(), cast<Constant>(TypeMap));
}
return 0;
case Intrinsic::gcread:
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev