CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
clangcms::FiniteMathChecker Class Reference

#include <FiniteMathChecker.h>

Inheritance diagram for clangcms::FiniteMathChecker:

Public Member Functions

void checkPreStmt (const clang::CallExpr *ref, clang::ento::CheckerContext &C) const
 

Private Attributes

std::unique_ptr< clang::ento::BugType > BT
 

Detailed Description

Definition at line 11 of file FiniteMathChecker.h.

Member Function Documentation

◆ checkPreStmt()

void clangcms::FiniteMathChecker::checkPreStmt ( const clang::CallExpr *  ref,
clang::ento::CheckerContext &  C 
) const

Definition at line 16 of file FiniteMathChecker.cc.

References BT, eostools::move(), N, and edmIntegrityCheck::report.

16  {
17  const clang::ento::ProgramStateRef state = ctx.getState();
18  const clang::LocationContext *LC = ctx.getLocationContext();
19  const clang::Expr *Callee = CE->getCallee();
20  const clang::FunctionDecl *FD = state->getSVal(Callee, LC).getAsFunctionDecl();
21 
22  if (!FD)
23  return;
24 
25  // Get the name of the callee.
26  clang::IdentifierInfo *II = FD->getIdentifier();
27  if (!II) // if no identifier, not a simple C function
28  return;
29 
30  if (!II->isStr("isnan") && !II->isStr("isinf"))
31  return;
32 
33  clang::ento::ExplodedNode *N = ctx.generateErrorNode();
34  if (!N)
35  return;
36 
37  if (!BT)
38  BT = std::make_unique<clang::ento::BugType>(
39  this,
40  "std::isnan / std::isinf does not work when fast-math is used. Please use "
41  "edm::isNotFinite from 'FWCore/Utilities/interface/isFinite.h'",
42  "fastmath plugin");
43  std::unique_ptr<clang::ento::PathSensitiveBugReport> PSBR =
44  std::make_unique<clang::ento::PathSensitiveBugReport>(*BT, BT->getCheckerName(), N);
45  std::unique_ptr<clang::ento::BasicBugReport> report =
46  std::make_unique<clang::ento::BasicBugReport>(*BT, BT->getCheckerName(), PSBR->getLocation());
47  report->addRange(Callee->getSourceRange());
48  ctx.emitReport(std::move(report));
49  }
std::unique_ptr< clang::ento::BugType > BT
#define N
Definition: blowfish.cc:9
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

◆ BT

std::unique_ptr<clang::ento::BugType> clangcms::FiniteMathChecker::BT
mutableprivate

Definition at line 12 of file FiniteMathChecker.h.

Referenced by checkPreStmt().