[LLVMdev] How to cast Value* to ConstantDataArray*

Sean Silva silvas at purdue.edu
Sat Apr 20 18:33:17 PDT 2013


This means that V doesn't point to a ConstantDataArray. Hence you shouldn't
be casting it to one. Use the idiom

if (ConstantDataArray *CDA = dyn_cast<ConstantDataArray>(V)) {
  // Do something with CDA ...
}

to discriminate between types when you aren't sure about the runtime type
of the argument.

-- Sean Silva


On Sat, Apr 20, 2013 at 8:23 PM, Richard Catlin
<richard.m.catlin at gmail.com>wrote:

> ConstantDataArray * cda = cast<ConstantDataArray>(v);
>  throws this error: Assertion failed: (isa<X>(Val) && "cast<Ty>() argument
> of incompatible type!"), function cast, file
> /Users/rcatlin1/lldb/llvm/include/llvm/Support/Casting.h, line 208
>
> Thanks for the help.
> Richard Catlin
>
>
>
> On Sat, Apr 20, 2013 at 3:37 PM, Sean Silva <silvas at purdue.edu> wrote:
>
>>
>>
>>
>> On Sat, Apr 20, 2013 at 5:15 PM, Richard Catlin <
>> richard.m.catlin at gmail.com> wrote:
>>
>>> I extended the LLVM Kaleidoscope example to support Strings. I added a
>>> StringExprAST, which has the virtual Codegen method impl as follows:
>>>
>>> Value *StringExprAST::Codegen() {
>>>   StringRef r(Val);
>>>   return ConstantDataArray::getString(getGlobalContext(), r, false);
>>> }
>>>
>>> I am trying to concatenate Strings and have a ConcatExprAST with its
>>> Codegen method. Upon trying to access the data in the ConstantDataArray, I
>>> need to cast the Value* back to a ConstantDataArray* in order to use the
>>> getAsString() method.
>>>
>>> I tried:
>>>
>>> ConstantDataArray * cda = cast<ConstantDataArray>(v);
>>>
>>> where v is a Value*.  It does not work.
>>>
>> *How* does it not work? You need to give us more information. Also make
>> sure that you have read <
>> http://llvm.org/docs/ProgrammersManual.html#the-isa-cast-and-dyn-cast-templates
>> >.
>>
>> -- Sean Silva
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130420/ce88c23d/attachment.html>


More information about the llvm-dev mailing list