Hello,
In a checker I want to test whether an argument to a function call is a String literal, but I’m a bit stuck. Could anybody shed a bit of light on this?
- This way seems to not work (although no compile-time error), but I don’t understand why:
const Expr *arg = CE->getArg(0); // CE is a CallExpr
if ((arg != NULL) && (clang::isaclang::StringLiteral(arg))){
…
- The following does not compile:
const Expr *arg = CE->getArg(0); // CE is a CallExpr
if (StringLiteral *SL = dyn_cast(arg)) {
invalid conversion from ‘llvm::cast_retty<clang::StringLiteral, const clang::Expr*>::ret_type {aka const clang::StringLiteral*}’ to ‘clang::StringLiteral*’ [-fpermissive]
if (StringLiteral *SL = dyn_cast(arg)) {
^
3. The following does not compile, however there’s a non-const getArg() method:
Expr *arg = CE->getArg(0); // CE is a CallExpr
if (StringLiteral *SL = dyn_cast(arg)) {
error: invalid conversion from ‘const clang::Expr*’ to ‘clang::Expr*’ [-fpermissive]
Expr *arg = CE->getArg(0);
^