[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
values.

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.

Cheers.

Tim.


More information about the llvm-dev mailing list