<div dir="ltr"><div><div><div><div><div><div>I'm playing around with the NullDereference checker (Dereference.cpp) in an attempt to understand how it works.<br><br></div>I've discovered a strange phenomenon. Sometimes the checker finds a bug, calls reportBug(), a BugReport is created and emitted -- but no warning is raised.<br>

</div>My test code:<br><br>struct Foo<br>{<br>        int bar;<br>};<br><br>Foo* getFooPtr(bool cond)<br>{<br>    return cond ? new Foo : nullptr;<br>}<br><br>int main(int argc, const char** argv)<br>{<br>        Foo* fp = getFooPtr(argc % 2 == 1);<br>

        if( ! fp )<br>        {<br>                fp->bar = 0; // bug!<br>        }<br><br>        return 0;<br>}<br><br></div>Interestingly enough, if I replace the getFooPtr definition above with this:<br><br>extern Foo* getFooPtr(bool);<br>

<br></div>Then the report becomes visible.<br><br></div>Note: I'm using Clang 3.3, but I also checked the latest SVN revision, and there don't seem to be any changes to the DereferenceChecker code.<br><br></div>Is this a bug, or why could this be? Thanks!<br>

<div><br>Gabor<br></div></div>