[LLVMdev] Re: Can't Figure Out My Error :(

Chris Lattner
Sun, 28 Mar 2004 19:03:39 -0000

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
> get:
>
> 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
terminators.

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!

-Chris

--