[LLVMbugs] [Bug 427] NEW: Assertion On V1 Bytecode Files

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Aug 23 08:41:35 PDT 2004


           Summary: Assertion On V1 Bytecode Files
           Product: libraries
           Version: 1.0
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Bytecode Reader
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: rspencer at x10sys.com

In testing backwards compatibility with V1 bytecode files, there seems to be a
problem introduced by version 1.45 of Value.cpp:

diff -r1.44 -r1.45
>   if (!isa<Constant>(this) && !isa<BasicBlock>(this))
>     assert((Ty->isFirstClassType() || Ty == Type::VoidTy) &&
>            "Cannot create non-first-class values except for constants!");

revision 1.45
date: 2004/07/06 17:44:17;  author: lattner;  state: Exp;  lines: +3 -0
Find bugs sooner rather than later.  In this case, don't allow the
creation of instructions that don't have a first-class or void type.

This seems to have broken reading bytecode V1 files (but not subsequent
versions). The problem is that the reader uses an "Argument" Value as a
placeholder until it can get the actual value. Argument's constructor uses the
Value constructor in which this assert was placed. Since Argument is
neither first class nor void, and its not a constant nor a basic block,
it asserts and reading bytecode fails.

The problem occurs in only specific V1 bytecode files and I've only seen
it happen with a call instruction. The Bytecode reader processes an type/value
operand pair of the call, and asks for the Value of it. Since the value has not
yet been instantiated, the bcreader creates a placeholder Argument value and
then during construction of the Argument, it asserts.

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

More information about the llvm-bugs mailing list