[LLVMdev] opt -verify

Chris Lattner sabre at nondot.org
Wed Feb 21 22:42:18 PST 2007


On Wed, 21 Feb 2007, Ryan M. Lefever wrote:
> I am writing an interprocedural compiler pass.  Because the passneeds
> information from a FunctionPass, e.g., the post-dominance frontier
> (PDF), and because a ModulePass is not permitted to require a
> FunctionPass, I am forced to make my pass a FunctionPass and do majority
> of its work in the doFinalization() method.

ok

> When I run "opt -mypass -verify -o code2.bc code1.bc" I get no
> complaints.  However, if I then try run "opt -simplifycfg -verify -o
> code3.bc code2.bc," I get the assertion failure below.  If thought that
> the verify option should have made sure that bytecode written to
> code2.bc was correct.  Am I incorrect?

Yes.  the passmanager runs the passes in roughly this order:

1. doinitialization for mypass and verify
2. runOnModule for mypass
3. verifier::runOnFunction for each function
4. dofinalization for mypass
5. dofinalization for verify

Because you'd doing your xform in #4, but verifier checks the code at #3, 
you lose :(

However, there is hope!  Just call "llvm/Analysis/Verifier.h" -> 
verifyModule or verifyFunction explicitly in your pass.

-Chris

> opt: Reader.cpp:1978: llvm::Value*
> llvm::BytecodeReader::ParseConstantPoolValue(unsigned int): Assertion
> `(!isa<Constant>(Result) || !cast<Constant>(Result)->isNullValue()) ||
> !hasImplicitNull(TypeID) && "Cannot read null values from bytecode!"'
> failed.
> opt((anonymous namespace)::PrintStackTrace()+0x1a)[0x8645bae]
> opt((anonymous namespace)::SignalHandler(int)+0x112)[0x8645e74]
> [0x70f420]
> /lib/libc.so.6(abort+0x101)[0x4cab64f1]
> /lib/libc.so.6(__assert_fail+0xfd)[0x4caae859]
> opt(llvm::BytecodeReader::ParseConstantPoolValue(unsigned
> int)+0x1b31)[0x856e825]
> opt(llvm::BytecodeReader::ParseConstantPool(std::vector<llvm::BytecodeReader::ValueList*,
> std::allocator<llvm::BytecodeReader::ValueList*> >&,
> std::vector<llvm::PATypeHolder, std::allocator<llvm::PATypeHolder> >&,
> bool)+0x147)[0x856e985]
> opt(llvm::BytecodeReader::ParseModule()+0x188)[0x856edfe]
> opt(llvm::BytecodeReader::ParseBytecode(unsigned char const*, unsigned
> int, std::basic_string<char, std::char_traits<char>,
> std::allocator<char> > const&, std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >*)+0x539)[0x856f6c1]
> opt((anonymous
> namespace)::BytecodeFileReader::read(std::basic_string<char,
> std::char_traits<char>, std::allocator<char> >*)+0xeb)[0x855b569]
> opt(llvm::getBytecodeModuleProvider(std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&,
> std::basic_string<char, std::char_traits<char>, std::allocator<char> >*,
> llvm::BytecodeHandler*)+0x93)[0x855b60b]
> opt(llvm::ParseBytecodeFile(std::basic_string<char,
> std::char_traits<char>, std::allocator<char> > const&,
> std::basic_string<char, std::char_traits<char>, std::allocator<char>
> >*)+0x20)[0x855b88e]
> opt(main+0x7e)[0x8378c90]
> /lib/libc.so.6(__libc_start_main+0xdc)[0x4caa24e4]
> opt(__gxx_personality_v0+0x149)[0x836bac1]
> Abort
>
> Regards,
> Ryan
>
>
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/



More information about the llvm-dev mailing list