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 can I do this? Thanks for any help. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130420/701f1611/attachment.html>
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/d262214a/attachment.html>
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/e92e662a/attachment.html>