-
- Downloads
analyzer: add allocation size checker [PR105900]
This patch adds an checker that warns about code paths in which a buffer
is assigned to a incompatible type, i.e. when the allocated buffer size
is not a multiple of the pointee's size.
Regression-tested on x86_64 Linux. Also compiled coreutils, curl, openssh and
httpd with the patch enabled.
2022-07-01 Tim Lange <mail@tim-lange.me>
gcc/analyzer/ChangeLog:
PR analyzer/105900
* analyzer.opt: Added Wanalyzer-allocation-size.
* checker-path.cc (region_creation_event::get_desc): Added call to new
virtual function pending_diagnostic::describe_region_creation_event.
* checker-path.h: Added region_creation_event::get_desc.
* diagnostic-manager.cc (diagnostic_manager::add_event_on_final_node):
New function.
* diagnostic-manager.h:
Added diagnostic_manager::add_event_on_final_node.
* pending-diagnostic.h (struct region_creation): New event_desc struct.
(pending_diagnostic::describe_region_creation_event): Added virtual
function to overwrite description of a region creation.
* region-model.cc (class dubious_allocation_size): New class.
(capacity_compatible_with_type): New helper function.
(class size_visitor): New class.
(struct_or_union_with_inheritance_p): New helper function.
(is_any_cast_p): New helper function.
(region_model::check_region_size): New function.
(region_model::set_value): Added call to
region_model::check_region_size.
* region-model.h (class region_model): New function check_region_size.
* svalue.cc (region_svalue::accept): Changed to post-order traversal.
(initial_svalue::accept): Likewise.
(unaryop_svalue::accept): Likewise.
(binop_svalue::accept): Likewise.
(sub_svalue::accept): Likewise.
(repeated_svalue::accept): Likewise.
(bits_within_svalue::accept): Likewise.
(widening_svalue::accept): Likewise.
(unmergeable_svalue::accept): Likewise.
(compound_svalue::accept): Likewise.
(conjured_svalue::accept): Likewise.
(asm_output_svalue::accept): Likewise.
(const_fn_result_svalue::accept): Likewise.
gcc/ChangeLog:
PR analyzer/105900
* doc/invoke.texi: Added Wanalyzer-allocation-size.
gcc/testsuite/ChangeLog:
PR analyzer/105900
* gcc.dg/analyzer/pr96639.c: Changed buffer size to omit warning.
* gcc.dg/analyzer/allocation-size-1.c: New test.
* gcc.dg/analyzer/allocation-size-2.c: New test.
* gcc.dg/analyzer/allocation-size-3.c: New test.
* gcc.dg/analyzer/allocation-size-4.c: New test.
* gcc.dg/analyzer/allocation-size-5.c: New test.
Signed-off-by:
Tim Lange <mail@tim-lange.me>
Showing
- gcc/analyzer/analyzer.opt 4 additions, 0 deletionsgcc/analyzer/analyzer.opt
- gcc/analyzer/checker-path.cc 10 additions, 1 deletiongcc/analyzer/checker-path.cc
- gcc/analyzer/checker-path.h 1 addition, 1 deletiongcc/analyzer/checker-path.h
- gcc/analyzer/diagnostic-manager.cc 61 additions, 0 deletionsgcc/analyzer/diagnostic-manager.cc
- gcc/analyzer/diagnostic-manager.h 4 additions, 0 deletionsgcc/analyzer/diagnostic-manager.h
- gcc/analyzer/pending-diagnostic.h 20 additions, 0 deletionsgcc/analyzer/pending-diagnostic.h
- gcc/analyzer/region-model.cc 370 additions, 0 deletionsgcc/analyzer/region-model.cc
- gcc/analyzer/region-model.h 2 additions, 0 deletionsgcc/analyzer/region-model.h
- gcc/analyzer/svalue.cc 13 additions, 13 deletionsgcc/analyzer/svalue.cc
- gcc/doc/invoke.texi 14 additions, 0 deletionsgcc/doc/invoke.texi
- gcc/testsuite/gcc.dg/analyzer/allocation-size-1.c 116 additions, 0 deletionsgcc/testsuite/gcc.dg/analyzer/allocation-size-1.c
- gcc/testsuite/gcc.dg/analyzer/allocation-size-2.c 155 additions, 0 deletionsgcc/testsuite/gcc.dg/analyzer/allocation-size-2.c
- gcc/testsuite/gcc.dg/analyzer/allocation-size-3.c 45 additions, 0 deletionsgcc/testsuite/gcc.dg/analyzer/allocation-size-3.c
- gcc/testsuite/gcc.dg/analyzer/allocation-size-4.c 60 additions, 0 deletionsgcc/testsuite/gcc.dg/analyzer/allocation-size-4.c
- gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c 36 additions, 0 deletionsgcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
- gcc/testsuite/gcc.dg/analyzer/pr96639.c 1 addition, 1 deletiongcc/testsuite/gcc.dg/analyzer/pr96639.c
Loading
Please register or sign in to comment