https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104955

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by David Malcolm <dmalc...@gcc.gnu.org>:

https://gcc.gnu.org/g:7fd6e36ea9aa8575841ff1da08b4aebc0298abe2

commit r12-7677-g7fd6e36ea9aa8575841ff1da08b4aebc0298abe2
Author: David Malcolm <dmalc...@redhat.com>
Date:   Wed Mar 16 10:54:44 2022 -0400

    analyzer: early rejection of disabled warnings [PR104955]

    Avoid generating execution paths for warnings that are ultimately
    rejected due to -Wno-analyzer-* flags.

    This improves the test case from taking at least several minutes
    (before I killed it) to taking under a second.

    This doesn't fix the slowdown seen in PR analyzer/104955 with large
    numbers of warnings when the warnings are still enabled.

    gcc/analyzer/ChangeLog:
            PR analyzer/104955
            * diagnostic-manager.cc (get_emission_location): New.
            (diagnostic_manager::diagnostic_manager): Initialize
            m_num_disabled_diagnostics.
            (diagnostic_manager::add_diagnostic): Reject diagnostics that
            will eventually be rejected due to being disabled.
            (diagnostic_manager::emit_saved_diagnostics): Log the number
            of disabled diagnostics.
            (diagnostic_manager::emit_saved_diagnostic): Split out logic for
            determining emission location to get_emission_location.
            * diagnostic-manager.h
            (diagnostic_manager::m_num_disabled_diagnostics): New field.
            * engine.cc (stale_jmp_buf::get_controlling_option): New.
            (stale_jmp_buf::emit): Use it.
            * pending-diagnostic.h
            (pending_diagnostic::get_controlling_option): New vfunc.
            * region-model.cc
            (poisoned_value_diagnostic::get_controlling_option): New.
            (poisoned_value_diagnostic::emit): Use it.
            (shift_count_negative_diagnostic::get_controlling_option): New.
            (shift_count_negative_diagnostic::emit): Use it.
            (shift_count_overflow_diagnostic::get_controlling_option): New.
            (shift_count_overflow_diagnostic::emit): Use it.
            (dump_path_diagnostic::get_controlling_option): New.
            (dump_path_diagnostic::emit): Use it.
            (write_to_const_diagnostic::get_controlling_option): New.
            (write_to_const_diagnostic::emit): Use it.
            (write_to_string_literal_diagnostic::get_controlling_option): New.
            (write_to_string_literal_diagnostic::emit): Use it.
            * sm-file.cc (double_fclose::get_controlling_option): New.
            (double_fclose::emit): Use it.
            (file_leak::get_controlling_option): New.
            (file_leak::emit): Use it.
            * sm-malloc.cc (mismatching_deallocation::get_controlling_option):
            New.
            (mismatching_deallocation::emit): Use it.
            (double_free::get_controlling_option): New.
            (double_free::emit): Use it.
            (possible_null_deref::get_controlling_option): New.
            (possible_null_deref::emit): Use it.
            (possible_null_arg::get_controlling_option): New.
            (possible_null_arg::emit): Use it.
            (null_deref::get_controlling_option): New.
            (null_deref::emit): Use it.
            (null_arg::get_controlling_option): New.
            (null_arg::emit): Use it.
            (use_after_free::get_controlling_option): New.
            (use_after_free::emit): Use it.
            (malloc_leak::get_controlling_option): New.
            (malloc_leak::emit): Use it.
            (free_of_non_heap::get_controlling_option): New.
            (free_of_non_heap::emit): Use it.
            * sm-pattern-test.cc (pattern_match::get_controlling_option): New.
            (pattern_match::emit): Use it.
            * sm-sensitive.cc
            (exposure_through_output_file::get_controlling_option): New.
            (exposure_through_output_file::emit): Use it.
            * sm-signal.cc (signal_unsafe_call::get_controlling_option): New.
            (signal_unsafe_call::emit): Use it.
            * sm-taint.cc (tainted_array_index::get_controlling_option): New.
            (tainted_array_index::emit): Use it.
            (tainted_offset::get_controlling_option): New.
            (tainted_offset::emit): Use it.
            (tainted_size::get_controlling_option): New.
            (tainted_size::emit): Use it.
            (tainted_divisor::get_controlling_option): New.
            (tainted_divisor::emit): Use it.
            (tainted_allocation_size::get_controlling_option): New.
            (tainted_allocation_size::emit): Use it.

    gcc/testsuite/ChangeLog:
            * gcc.dg/analyzer/many-disabled-diagnostics.c: New test.
            * gcc.dg/plugin/analyzer_gil_plugin.c
            (gil_diagnostic::get_controlling_option): New.
            (double_save_thread::emit): Use it.
            (fncall_without_gil::emit): Likewise.
            (pyobject_usage_without_gil::emit): Likewise.

    Signed-off-by: David Malcolm <dmalc...@redhat.com>

Reply via email to