[cfe-dev] [StaticAnalyzer]: Cant get my checker to output

funceval funceval at gmail.com
Wed Sep 28 18:55:48 PDT 2011


Hi,

Thank you for replying. The problem is that clang is running some
optimizations before running the analyzer. As a result, my if statement is
being optimized out and because of that nothing gets printed. clang should
not run optimizations when running in analyze mode otherwise it can't detect
bugs in the original code. Do you agree?

Thanks,
Arjun

On Wed, Sep 28, 2011 at 11:19 AM, Anna Zaks <ganna at apple.com> wrote:

> Hello,
>
> Check if your checker is properly registered. You can use the following
> command to view the registered checkers:
> $ clang -cc1 -analyzer-checker-help
> Only some of them will get executed when scan-build is run (If you see your
> checker listed in scan-build output, it should be executed).
>
> Are there if statements in your test program? You would see the output only
> when an if statement is processed.
>
> While developing/debugging a checker, you can use the following command
> (this will execute only the specified checker):
> $ clang -cc1 -analyze -analyzer-checker=core.StackAddressEscape input.cpp
>
> You can print debug messages with:
> llvm::errs()<<"Hello";
> llvm::outs()<<"Hello";
>
> Cheers,
> Anna.
>
> On Sep 28, 2011, at 9:48 AM, funceval wrote:
>
> Hi,
>
> How do I find out if my checker has run or not? There doesn't seem to be
> any option in scan-build that tells us which checkers were run. I tried
> printing to std::cout, std::cerr but nothing got printed. I tried generating
> a bug report but that didn't get generated either. But my checker does show
> up in the list of checkers when I run scan-build. I have even entered the
> details in Checkers.td.
>
> Here is what I have tried far:
>
> namespace {
>           class ConstantConditionChecker : public
> Checker<check::PostStmt<IfStmt> >{
>               mutable llvm::OwningPtr<BuiltinBug> BT;
>           public:
>                   void checkPostStmt(const IfStmt *ifStmt, CheckerContext
> &C) const;
>           };
>   }
>
>   void ConstantConditionChecker::checkPostStmt(const IfStmt *ifStmt,
> CheckerContext &C) const
>   {
>       ASTContext& astContext = C.getASTContext();
>       std::string sbuf;
>       llvm::raw_string_ostream Out(sbuf);
>
>       ifStmt->getCond()->printPretty(Out, NULL,
> PrintingPolicy(astContext.getLangOptions()));
>       std::cerr << Out.str() << std::endl;
>       std::cout << "Hello\n" << std::endl;
>       std::cerr << "Hello cerr" << std::endl;
>       if (!BT)
>           BT.reset(new BuiltinBug(Out.str().c_str()));
>       BugReport* R = new BugReport(*BT, BT->getDescription(),
> C.getPredecessor());
>       R->addRange(ifStmt->getSourceRange());
>       C.EmitReport(R);
>
>   }
>
>   void ento::registerConstantConditionChecker(CheckerManager &mgr) {
>       mgr.registerChecker<ConstantConditionChecker>();
>   }
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110928/032dbf75/attachment.html>


More information about the cfe-dev mailing list