-
- Downloads
analyzer: use known_function to simplify region_model::on_call_{pre,post}
Replace lots of repeated checks against strings with a hash_map lookup.
Add some missing type-checking for handling known functions (e.g. checks
for pointer types).
gcc/analyzer/ChangeLog:
* analyzer.h (known_function::matches_call_types_p): New vfunc.
(known_function::impl_call_pre): Provide base implementation.
(known_function::impl_call_post): New vfunc.
(register_known_functions): New.
* engine.cc (impl_run_checkers): Call register_known_functions.
* region-model-impl-calls.cc (region_model::impl_call_accept):
Convert to...
(class known_function_accept): ...this.
(region_model::impl_call_bind): Convert to...
(class known_function_bind): ...this.
(region_model::impl_call_connect): Convert to...
(class known_function_connect): ...this.
(region_model::impl_call_listen): Convert to...
(class known_function_listen): ...this.
(region_model::impl_call_socket): Convert to...
(class known_function_socket): ...this.
(register_known_functions): New.
* region-model.cc (region_model::on_call_pre): Remove special
case for "bind" in favor of the known_function-handling dispatch.
Add call to known_function::matches_call_types_p to latter.
(region_model::on_call_post): Remove special cases for "accept",
"bind", "connect", "listen", and "socket" in favor of dispatch
to known_function::impl_call_post.
* region-model.h (region_model::impl_call_accept): Delete decl.
(region_model::impl_call_bind): Delete decl.
(region_model::impl_call_connect): Delete decl.
(region_model::impl_call_listen): Delete decl.
(region_model::impl_call_socket): Delete decl.
* sm-fd.cc: Update comments.
gcc/testsuite/ChangeLog:
* gcc.dg/plugin/analyzer_kernel_plugin.c
(copy_across_boundary_fn::matches_call_types_p): New.
* gcc.dg/plugin/analyzer_known_fns_plugin.c
(known_function_returns_42::matches_call_types_p): New.
(known_function_attempt_to_copy::matches_call_types_p): New.
Signed-off-by:
David Malcolm <dmalcolm@redhat.com>
Showing
- gcc/analyzer/analyzer.h 12 additions, 2 deletionsgcc/analyzer/analyzer.h
- gcc/analyzer/engine.cc 2 additions, 0 deletionsgcc/analyzer/engine.cc
- gcc/analyzer/region-model-impl-calls.cc 107 additions, 55 deletionsgcc/analyzer/region-model-impl-calls.cc
- gcc/analyzer/region-model.cc 13 additions, 32 deletionsgcc/analyzer/region-model.cc
- gcc/analyzer/region-model.h 0 additions, 5 deletionsgcc/analyzer/region-model.h
- gcc/analyzer/sm-fd.cc 5 additions, 5 deletionsgcc/analyzer/sm-fd.cc
- gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c 5 additions, 0 deletionsgcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.c
- gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.c 10 additions, 0 deletionsgcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.c
Loading
Please register or sign in to comment