<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Can you show use the code corresponding to the CallExpr?</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Also, when you say the "name of the first argument supplied..." that presumes that the first argument is always a variable. That's not generally the case -- any (well typed) argument will work. For example, your first argument in the dumped CallExpr above is pointer-dereference (I think `*valueString`?).  So, you would, at the least, want your code to be</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US">if (const auto *dr = clang::dyn_cast<clang::DeclRefExpr>(expr->getArg(0))) {<u></u></span></p><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US">  auto name = dr->getDecl()->getName().str();<u></u><u></u></span></p><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US">  ...</span></p><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US">}</span></p><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US"><br></span></p><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US">That said, you probably want expr->IgnoringImplicit(), since lvalues (e.g. variable names) are always implicitly cast to rvalues.</span></p><p class="gmail-m_338976818811162087MsoPlainText" style="margin:0cm 0cm 0.0001pt;font-size:11pt;font-family:Calibri,sans-serif"><span lang="EN-US"><u></u> </span></p></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 24, 2019 at 3:29 AM Kenth Eriksson via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> What if you don't try to cast it to a `DeclRefExpr`, but you cast it<br>
> to <br>
> a `Expr` and `->dump()` it?<br>
> <br>
<br>
If I dump the CallExpr, I can see the following;<br>
<br>
CallExpr 0x5640de2c08c8 'char *'<br>
|-ImplicitCastExpr 0x5640de2c08b0 'char *(*)(char *, const char *)' <FunctionToPointerDecay><br>
| `-DeclRefExpr 0x5640de2c07f0 'char *(char *, const char *)' Function 0x5640de2916a8 'strcpy' 'char *(char *, const char *)'<br>
|-ImplicitCastExpr 0x5640de2c08f8 'char *' <LValueToRValue><br>
| `-UnaryOperator 0x5640de2c0848 'char *' lvalue prefix '*' cannot overflow<br>
|   `-ImplicitCastExpr 0x5640de2c0830 'char **' <LValueToRValue><br>
|     `-DeclRefExpr 0x5640de2c0810 'char **' lvalue ParmVar 0x5640de366998 'valueString' 'char **'<br>
`-ImplicitCastExpr 0x5640de2c0928 'const char *' <NoOp><br>
  `-ImplicitCastExpr 0x5640de2c0910 'char *' <LValueToRValue><br>
    `-DeclRefExpr 0x5640de2c0860 'char *' lvalue Var 0x5640de366d88 'ptr1' 'char *'<br>
<br>
I want to get the name of the first argument supplied to the call of<br>
strcpy.<br>
<br>
Note that some args are not represented by `DeclRefExpr` if they are <br>
> literals such as IntegerLiteral or StringLiteral.<br>
>  <br>
<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>