2 #include <clang/AST/AST.h>
3 #include <clang/AST/ASTConsumer.h>
4 #include <clang/AST/DeclGroup.h>
5 #include <clang/AST/RecursiveASTVisitor.h>
6 #include <clang/AST/Expr.h>
16 const clang::ento::ProgramStateRef state = ctx.getState();
17 const clang::LocationContext *LC = ctx.getLocationContext();
18 const clang::Expr *Callee = CE->getCallee();
19 const clang::FunctionDecl *FD = state->getSVal(Callee, LC).getAsFunctionDecl();
25 clang::IdentifierInfo *II = FD->getIdentifier();
29 if (!II->isStr(
"isnan") && !II->isStr(
"isinf"))
32 clang::ento::ExplodedNode *
N = ctx.generateSink();
37 BT.reset(
new clang::ento::BugType(
this,
"std::isnan / std::isinf does not work when fast-math is used. Please use edm::isNotFinite from 'FWCore/Utilities/interface/isNotFinite.h'",
"fastmath plugin"));
39 clang::ento::BugReport *
report =
new clang::ento::BugReport(*
BT,
BT->getName(),
N);
40 report->addRange(Callee->getSourceRange());
41 ctx.emitReport(report);
std::unique_ptr< clang::ento::BugType > BT
void checkPreStmt(const clang::CallExpr *ref, clang::ento::CheckerContext &C) const