aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CreateInvocationFromCommandLine.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2013-01-19 02:18:15 +0000
committerAnna Zaks <ganna@apple.com>2013-01-19 02:18:15 +0000
commit7d9ce5312441d81a4c154f2823a153974b3e213f (patch)
treeed45caa154045cca9055da4b068f3f3526c25811 /clang/lib/Frontend/CreateInvocationFromCommandLine.cpp
parent7ab15fafe3e28557cc0688c85cbbc3f7e86d3456 (diff)
downloadllvm-7d9ce5312441d81a4c154f2823a153974b3e213f.zip
llvm-7d9ce5312441d81a4c154f2823a153974b3e213f.tar.gz
llvm-7d9ce5312441d81a4c154f2823a153974b3e213f.tar.bz2
[analyzer] Suppress warnings coming out of macros defined in sys/queue.h
Suppress the warning by just not emitting the report. The sink node would get generated, which is fine since we did reach a bad state. Motivation Due to the way code is structured in some of these macros, we do not reason correctly about it and report false positives. Specifically, the following loop reports a use-after-free. Because of the way the code is structured inside of the macro, the analyzer assumes that the list can have cycles, so you end up with use-after-free in the loop, that is safely deleting elements of the list. (The user does not have a way to teach the analyzer about shape of data structures.) SLIST_FOREACH_SAFE(item, &ctx->example_list, example_le, tmpitem) { if (item->index == 3) { // if you remove each time, no complaints assert((&ctx->example_list)->slh_first == item); SLIST_REMOVE(&ctx->example_list, item, example_s, example_le); free(item); } } llvm-svn: 172883
Diffstat (limited to 'clang/lib/Frontend/CreateInvocationFromCommandLine.cpp')
0 files changed, 0 insertions, 0 deletions