[analyzer] Fix a use-after-free introduced in r168019.
authorJordan Rose <jordan_rose@apple.com>
Thu, 15 Nov 2012 20:10:05 +0000 (20:10 +0000)
committerJordan Rose <jordan_rose@apple.com>
Thu, 15 Nov 2012 20:10:05 +0000 (20:10 +0000)
commit19bc88c3d425a18ad1a9e16127856b88b62058fa
tree420df18e22611f66ca3cd3a246160c252c668918
parent523855929becac2e6c06f465633da1243f6a3690
[analyzer] Fix a use-after-free introduced in r168019.

In code like this:

void foo() {
     bar();
     baz();
}

...the location for the call to 'bar()' was being used as a backup location
for the call to 'baz()'. This is fine unless the call to 'bar()' is deemed
uninteresting and that part of the path deleted.

(This looks like a logic error as well, but in practice the only way 'baz()'
could have an invalid location is if the entire body of 'foo()' is
synthesized, meaning the call to 'bar()' will be using the location of the
call to 'foo()' anyway. Nevertheless, the new version better matches the
intent of the code.)

Found by Matt Beaumont-Gay using ASan. Thanks, Matt!

llvm-svn: 168080
clang/lib/StaticAnalyzer/Core/BugReporter.cpp