CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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

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

Definition at line 14 of file FiniteMathChecker.cc.

References BT, N, and zeeHLT_cff::report.

15 {
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();
20 
21  if (!FD)
22  return;
23 
24  // Get the name of the callee.
25  clang::IdentifierInfo *II = FD->getIdentifier();
26  if (!II) // if no identifier, not a simple C function
27  return;
28 
29  if (!II->isStr("isnan") && !II->isStr("isinf"))
30  return;
31 
32  clang::ento::ExplodedNode *N = ctx.generateSink();
33  if (!N)
34  return;
35 
36  if (!BT)
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"));
38 
39  clang::ento::BugReport *report = new clang::ento::BugReport(*BT, BT->getName(), N);
40  report->addRange(Callee->getSourceRange());
41  ctx.emitReport(report);
42 }
std::unique_ptr< clang::ento::BugType > BT
tuple report
Definition: zeeHLT_cff.py:9
#define N
Definition: blowfish.cc:9

Member Data Documentation

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

Definition at line 12 of file FiniteMathChecker.h.

Referenced by checkPreStmt().