[LLVMdev] Re: Can't Figure Out My Error :(
sabre at nondot.org
Sun Mar 28 19:03:39 PST 2004
On Sun, 28 Mar 2004, Reid Spencer wrote:
> The XPL compiler produced the attached OneOfEach.bc file without error
> or warning from either LLVM or XPLC. However when I llvm-dis the file, I
> llvm-dis: Failed value look-up for name 'entry'
I'm guessing that 'entry' is a basic block?
> The Bytecode Reader prints this out when it can't find the associated
> value for the name. Obviously I botched something in the XPL compiler
> but I would have thought the verified would catch my mistake before
> writing the byte code.
It should! It probably is missing a check somewhere... once you find the
problem, it would be helpful to make sure that the verifier catches that
problem in the future...
> The patch to the Reader.cpp file that I sent you earlier added the "for
> name 'entry'" part to the output. Unfortunately, this doesn't help
> because my source input doesn't have a symbol named "entry".
> Any hints?
My completely speculative *guess* is that you are using a basic block as
an operand to an instruction that does not expect it. You can't add two
basic blocks together, and I would guess the verifier doesn't check for
this. The only place where basic blocks can appear is in PHI nodes and
I just checked this patch into the Verifier. Maybe it will help?
--- Verifier.cpp 14 Mar 2004 03:23:54 -0000 1.88
+++ Verifier.cpp 29 Mar 2004 00:27:29 -0000
@@ -493,6 +493,11 @@
Assert1(I.getType() != Type::VoidTy || !I.hasName(),
"Instruction has a name, but provides a void value!", &I);
+ // Check that the return value of the instruction is either void or a legal
+ // value type.
+ Assert1(I.getType() == Type::VoidTy || I.getType()->isFirstClassType(),
+ "Instruction returns a non-scalar type!", &I);
// Check that all uses of the instruction, if they are instructions
// themselves, actually have parent basic blocks. If the use is not an
// instruction, it is an error!
More information about the llvm-dev