Auto-dereference crashes rustboot
Compiling:
obj obT() {
fn call() {
}
}
fn foo(@obT o) {
o.call();
}
fn main() {
}
crashes with:
Fatal error: exception Failure("get_element_ptr 1 on cell [ebp + 0x20]") Raised at file "pervasives.ml", line 22, characters 22-33 Called from file "boot/me/trans.ml", line 3844, characters 16-64 Called from file "boot/me/trans.ml", line 3887, characters 49-75 Called from file "boot/me/trans.ml", line 3422, characters 38-63 Called from file "boot/me/trans.ml", line 4276, characters 14-92 Called from file "boot/me/trans.ml", line 4055, characters 6-26 Re-raised at file "boot/me/trans.ml", line 4072, characters 11-104 Called from file "array.ml", line 117, characters 31-48 Called from file "boot/me/trans.ml", line 1974, characters 4-36 Called from file "boot/me/trans.ml", line 4604, characters 4-20 Called from file "boot/me/trans.ml", line 4999, characters 4-39 Called from file "boot/me/semant.ml", line 1435, characters 4-17 Called from file "boot/me/semant.ml", line 1561, characters 4-50 Called from file "boot/me/walk.ml", line 134, characters 4-9 Called from file "hashtbl.ml", line 145, characters 8-13 Called from file "hashtbl.ml", line 148, characters 4-19 Called from file "boot/me/walk.ml", line 135, characters 4-15 Called from file "array.ml", line 130, characters 31-51 Called from file "boot/driver/session.ml", line 60, characters 10-17 Called from file "boot/me/semant.ml", line 1861, characters 8-84 Called from file "boot/driver/main.ml", line 322, characters 9-26 Called from file "array.ml", line 117, characters 31-48 Called from file "boot/driver/main.ml", line 320, characters 4-366 Called from file "boot/driver/main.ml", line 404, characters 5-21
Changing foo to use "(*o).call();" avoids the crash.
Yuck. Not sure if this is a bug in the new typechecker (it injects the auto-dereference markers) or an assumption baked into trans based on the old one (it consumes them and is obviously getting upset here). Will investigate, thanks.
Graydon Hoare at 2010-07-17 17:59:25
Autoderef objects when passing them as implicit (indirect) arg upon vtbl-dispatch. Add testcase and XFAIL it on LLVM. Closed by fde9ca0937171b77542028ef433fddf979aa506b.
Roy Frostig at 2010-07-20 01:30:47