[llvm-dev] Force casting a Value*
Tim Northover via llvm-dev
llvm-dev at lists.llvm.org
Sun Jun 11 12:05:56 PDT 2017
On 11 June 2017 at 11:56, Dipanjan Das via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> I can't pass var_value to a function accepting uint64_t. LLVM complains
> about broken function call.
Well, yes. var_value has type "ConstantInt *", not uint64_t. Assuming
the value being stored actually is a constant known at compile-time
you should be able to use cast<ConstantInt *>(vo)->getZExtValue() to
retrieve a uint64_t value (careful of i128s!).
If that cast fails then you're not dealing with a constant store. This
is either a nuisance (if you were expecting the possibility and can
deal with it) or a huge misunderstanding over compile-time vs runtime
If it's a nuisance, you can use "dyn_cast" instead of "cast". That'll
return nullptr if the store wasn't a constant instead of crashing; you
can decide what to do at that point.
More information about the llvm-dev