lli aborts on arm QEMU

I get the following error when I try to run arm lli on QEMU:

lli: llvm-arm/src/llvm/include/llvm/ADT/ilist.h:197: typename bidirectional_iterator<NodeTy, int>::reference llvm::ilist_iterator<NodeTy>::operator*() const [with NodeTy = llvm::RecyclerStruct]: Assertion `Traits::getNext(NodePtr) != 0 && "Dereferencing end()!"' failed.
0 lli 0x006abbfc
Stack dump:
0. Program arguments: ./lli hello2.bc
1. Running pass 'ARM Instruction Selection' on function '@main'
Aborted.

Is it a bug or I am doing something stupid?

Thanks
hannibal

hannibal hannibal wrote:

I get the following error when I try to run arm lli on QEMU:

lli: llvm-arm/src/llvm/include/llvm/ADT/ilist.h:197: typename bidirectional_iterator<NodeTy, int>::reference llvm::ilist_iterator<NodeTy>::operator*() const [with NodeTy = llvm::RecyclerStruct]: Assertion `Traits::getNext(NodePtr) != 0 && "Dereferencing end()!"' failed.
0 lli 0x006abbfc
Stack dump:
0. Program arguments: ./lli hello2.bc 1. Running pass 'ARM Instruction Selection' on function '@main'
Aborted.

Is it a bug or I am doing something stupid?

It sounds like a bug. However ARM is moving fast at the moment, so
you might want to try again in a few days time before opening a bug
report.

Ciao,

Duncan.

ARM JIT was able to run the entire llvm test suite when I left it a few months ago. "Hello world" should definitely work. It's possible it has been broken. But It's equally as likely llvm itself is miscompiled.

There really isn't a way to tell unless you debug it. Can you run it in gdb? What happens if you run it like this:
"lli -debug-only=jit hello2.bc".

Also, try -march=arm (if the bitcode file doesn't have the right triplet). Also add -mattr=+v6, anything under v6 is not well tested (although I am pretty sure v5 works).

Evan