[cfe-commits] r80770 - /cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp

Zhongxing Xu xuzhongxing at gmail.com
Wed Sep 2 00:09:39 PDT 2009


Author: zhongxingxu
Date: Wed Sep  2 02:09:39 2009
New Revision: 80770

URL: http://llvm.org/viewvc/llvm-project?rev=80770&view=rev
Log:
Still use BadArg bugtype in the checker. This saves us implement registerInitialVisitors
in the BugReport. 

When all internal bug checking logic are moved to checkers, BuiltinBug will
not reference GRExprEngine, and FlushReports() will be not necessary, since
all bugs are emitted into the equivalent classes immediately.

For now just add a ctor with no arguments.

Modified:
    cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp

Modified: cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp?rev=80770&r1=80769&r2=80770&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp (original)
+++ cfe/trunk/lib/Analysis/GRExprEngineInternalChecks.cpp Wed Sep  2 02:09:39 2009
@@ -67,6 +67,8 @@
 
   BuiltinBug(GRExprEngine *eng, const char* n)
     : BugType(n, "Logic errors"), Eng(*eng), desc(n) {}
+
+  const std::string &getDescription() const { return desc; }
   
   virtual void FlushReportsImpl(BugReporter& BR, GRExprEngine& Eng) = 0;
 
@@ -246,15 +248,13 @@
   : BuiltinBugReport(bt, shortDesc, desc, n), Arg(arg) {}  
   
   const Stmt *getArg() const { return Arg; }  
-
-  void registerInitialVisitors(BugReporterContext& BRC,
-                               const ExplodedNode* N) {
-    registerTrackNullOrUndefValue(BRC, getArg(), N);
-  }    
 };
 
 class VISIBILITY_HIDDEN BadArg : public BuiltinBug {
 public:  
+  BadArg() : BuiltinBug(0, "Uninitialized argument",
+                    "Pass-by-value argument in function call is undefined.") {}
+
   BadArg(GRExprEngine* eng) : BuiltinBug(eng,"Uninitialized argument",  
     "Pass-by-value argument in function call is undefined.") {}
 
@@ -262,14 +262,6 @@
     : BuiltinBug(eng,"Uninitialized argument", d) {}
   
   void FlushReportsImpl(BugReporter& BR, GRExprEngine& Eng) {
-    for (GRExprEngine::UndefArgsTy::iterator I = Eng.undef_arg_begin(),
-         E = Eng.undef_arg_end(); I!=E; ++I) {
-      // Generate a report for this bug.
-      ArgReport *report = new ArgReport(*this, desc.c_str(), I->first,
-                                        I->second);
-      report->addRange(I->second->getSourceRange());
-      BR.EmitReport(report);
-    }
   }
 
   void registerInitialVisitors(BugReporterContext& BRC,
@@ -639,7 +631,7 @@
 class VISIBILITY_HIDDEN CheckUndefinedArg 
   : public CheckerVisitor<CheckUndefinedArg> {
 
-  BugType *BT;
+  BadArg *BT;
 
 public:
   CheckUndefinedArg() : BT(0) {}
@@ -659,10 +651,9 @@
     if (C.getState()->getSVal(*I).isUndef()) {
       if (ExplodedNode *ErrorNode = C.generateNode(CE, C.getState(), true)) {
         if (!BT)
-          BT = new BugType("Uninitialized argument.", "Logic errors");
+          BT = new BadArg();
         // Generate a report for this bug.
-        ArgReport *Report = new ArgReport(*BT, 
-                     "Pass-by-value argument in function call is undefined.",
+        ArgReport *Report = new ArgReport(*BT, BT->getDescription().c_str(),
                                           ErrorNode, *I);
         Report->addRange((*I)->getSourceRange());
         C.EmitReport(Report);





More information about the cfe-commits mailing list