aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2013-03-15 21:41:55 +0000
committerJordan Rose <jordan_rose@apple.com>2013-03-15 21:41:55 +0000
commite42122e6b46b98f5e2968d03fb5b0b9c368c8866 (patch)
treea597ebbf6d53f47f384263fe03179bff92cf5d34 /clang/lib/Frontend/CompilerInvocation.cpp
parenta45fc81180c5bf523fb0ab27ea1c062b00e27643 (diff)
downloadllvm-e42122e6b46b98f5e2968d03fb5b0b9c368c8866.zip
llvm-e42122e6b46b98f5e2968d03fb5b0b9c368c8866.tar.gz
llvm-e42122e6b46b98f5e2968d03fb5b0b9c368c8866.tar.bz2
[analyzer] Make GRBugReporter::generatePathDiagnostic iterative, not recursive.
The previous generatePathDiagnostic() was intended to be tail-recursive, restarting and trying again if a report was marked invalid. However: (1) this leaked all the cloned visitors, which weren't being deleted, and (2) this wasn't actually tail-recursive because some local variables had non-trivial destructors. This was causing us to overflow the stack on inputs with large numbers of reports in the same equivalence class, such as sqlite3.c. Being iterative at least prevents us from blowing out the stack, but doesn't solve the performance issue: suppressing thousands (yes, thousands) of paths in the same equivalence class is expensive. I'm looking into that now. <rdar://problem/13423498> llvm-svn: 177189
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions