<div dir="auto">Thanks Tim,<div dir="auto">I'll keep using that notation for getting the value of str1 for now.</div><div dir="auto"><br></div><div dir="auto">Thanks again for your help</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Mar 9, 2019, 07:42 Tim Northover <<a href="mailto:t.p.northover@gmail.com">t.p.northover@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Sat, 9 Mar 2019 at 07:22, Alberto Barbaro <<a href="mailto:barbaro.alberto@gmail.com" target="_blank" rel="noreferrer">barbaro.alberto@gmail.com</a>> wrote:<br>
> I now need to find the value of the constant expression and I found online a solution like: string value = cast<ConstantDataArray>(cast<GlobalVariable>(CallInstruction->getOperand(0))->getInitializer())->getAsCString();<br>
<br>
> This one works but I feel the GEPOperator should be used based on your comments, so I tried to cast the operator and get the value but I'm not able to do it.<br>
<br>
If that one works it sounds like you don't have any kind of GEP at<br>
that point. Otherwise the cast to GlobalVariable would fail. Have you<br>
tried calling Module::dump while that code is executing to see what<br>
you're really dealing with?<br>
<br>
> I cast using GEPOperator *op = dyn_cast<GEPOperator>(CI->getOperand(0));<br>
<br>
That looks right to me if you have a GEP.  Once you've got that you'd<br>
have to carefully check the operands of the GEP to make sure no-one is<br>
doing anything tricksy like<br>
<br>
    printf(LocalVariable); //<br>
cast<GlobalVariable>(MyGEP->getPointerOperand) will fail so use<br>
dyn_cast and check the result.<br>
    printf(&"MwahahahaHello world\n"[9]); // The GEP will have<br>
non-zero index operands. They may not even be constant.<br>
<br>
Cheers.<br>
<br>
Tim.<br>
</blockquote></div>