[LLVMdev] nested GEP in a static initializer fails
Joel E. Denny
jdenny at etinternational.com
Mon Oct 25 13:17:00 PDT 2010
Hi,
Given this LLVM assembly:
@a = global i8* getelementptr (i8* null, i64 mul (i64 ptrtoint (i32* getelementptr (i32* null, i32 1) to i64), i64 2))
llc fails an assertion:
llc: /home/jdenny/llvm-svn/include/llvm/Support/Casting.h:202: typename llvm::cast_retty<To, From>::ret_type llvm::cast(const Y&) [with X = llvm::ConstantInt, Y = llvm::Value*]: Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
This has been reported previously as a bug and was resolved as invalid:
http://llvm.org/bugs/show_bug.cgi?id=2672
The explanation was:
"I don't think we should try to fold arbitrary expressions in the code
generator. Instead, we should accept that targets have limitations on
these. We can't ever support things like "void *X = &G / &H;" for
example."
Are the limitations on what can be placed in a static initializer
documented somewhere? When those limitations aren't obeyed, would it be
possible for llc to print a more intelligible error message for the user?
Thanks.
More information about the llvm-dev
mailing list