Closed
Description
Updated report
This code trips an LLVM assertion:
fn foo(_: proc()) {}
fn main() {
foo(loop {})
}
$ rustc foo.rs
Assertion failed: ((i >= FTy->getNumParams() || FTy->getParamType(i) == Args[i]->getType()) && "Calling a function with a bad signature!"), function init, file /Users/rustbuild/src/rust-buildbot/slave/nightly-mac/build/src/llvm/lib/IR/Instructions.cpp, line 281.
Original report
Signal listener example code causes rustc LLVM compiler abort
In the 0.10 docs there is an example snippet for writing listeners. But if we wrap it in fn main()
and try to run, rustc
will crash and burn:
$ RUST_BACKTRACE=1 rustc procbad.rs
procbad.rs:6:5: 6:33 warning: unused result which must be used, #[warn(unused_must_use)] on by default
procbad.rs:6 listener.register(Interrupt);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
rustc: /home/nathan/devel/rust/rust/src/llvm/lib/IR/Instructions.cpp:549:
void llvm::InvokeInst::init(llvm::Value*, llvm::BasicBlock*, llvm::BasicBlock*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&):
Assertion `(i >= FTy->getNumParams() || FTy->getParamType(i) ==
Args[i]->getType())
&& "Invoking a function with a bad signature!"' failed.
zsh: abort RUST_BACKTRACE=1 rustc procbad.rs
Here is the code which you can copy-paste directly to reproduce this bug:
use std::io::signal::{Listener, Interrupt};
fn main() {
let mut listener = Listener::new();
listener.register(Interrupt);
spawn({
loop {
match listener.rx.recv() {
Interrupt => println!("Got Interrupt'ed"),
_ => (),
}
}
});
}
System information:
$ rustc -v
rustc 0.10 (46867cc 2014-04-02 16:59:39 -0700)
host: x86_64-unknown-linux-gnu
$ uname -a
Linux dionysus 3.13.0-rc8-dio-00005-ga6da83f #4 SMP PREEMPT Wed Feb 5 19:43:54 EST 2014 x86_64 GNU/Linux
$ cat /etc/issue
Debian GNU/Linux jessie/sid
Program version information used in compiling rustc
:
configure: CFG_PERL := /usr/bin/perl
configure: CFG_CURLORWGET := /usr/bin/curl (7.36.0)
configure: CFG_PYTHON := /usr/bin/python2.7
configure: CFG_GIT := /usr/bin/git (1.9.1)
configure: CFG_CLANG :=
configure: CFG_CCACHE := /usr/bin/ccache (3.1.9)
configure: CFG_GCC := /home/nathan/bin/gcc (4.8.2-16)) [not custom; just a wrapper script for using ccache]
configure: CFG_LD := /usr/bin/ld (2.24)
configure: CFG_VALGRIND := /usr/bin/valgrind (3.9.0)
configure: CFG_PERF := /usr/bin/perf (3.13.6)
configure: CFG_ISCC :=
configure: CFG_LLNEXTGEN :=
configure: CFG_PANDOC := /home/nathan/.cabal/bin/pandoc (1.12.3.3)
configure: CFG_PDFLATEX := /usr/bin/pdflatex (3.1415926-2.5-1.40.14)
configure: CFG_XELATEX :=
configure: CFG_LUALATEX := /usr/bin/lualatex (0.76.0-2013070106)
configure: CFG_GDB := /usr/bin/gdb (7.6.2)
configure: CFG_PAXCTL :=
configure: CFG_ZCAT := /bin/zcat (1.6)
Metadata
Metadata
Assignees
Labels
No labels