[Bug analyzer/111475] [14/15 regression] Many C++ analyzer tests FAIL

2024-05-03 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111475

--- Comment #13 from GCC Commits  ---
The master branch has been updated by David Malcolm :

https://gcc.gnu.org/g:5219414f3cde3c1037e289a6654cd722cfa75dea

commit r15-131-g5219414f3cde3c1037e289a6654cd722cfa75dea
Author: David Malcolm 
Date:   Fri May 3 09:05:29 2024 -0400

testsuite: fix analyzer C++ failures on Solaris [PR111475]

As part of PR analyzer/96395, these patches moved testcases from
gcc.dg/analyzer to c-c++-common/analyzer:
- r14-3503-g55f6a7d949abc7
- r14-3823-g50b5199cff6908
- r14-6564-gae034b9106fbdd

Unfortunately this led to numerous g++ testsuite failures on Solaris,
tracked as PR analyzer/111475.

Almost all of the failures are due to standard library differences where
including a C standard library on C++ e.g.  leads to the plain
symbols referencing the symbols "std::" via a "using" declaration,
whereas I had written the code expecting them to use symbols in the root
namespace.

The analyzer has special-case handling of many functions by name.
This patch generalizes such handling to also match against functions
in "std::" for all of the cases I found in the testsuite (via manual
inspection of the preprocessed test cases against Solaris headers).
This fixes cases where the analyzer was failing to "know about" the
behavior of such functions.

Other such failures are due to "std::" prefixes appearing in names of
functions in the output, leading to mismatches against expected output.
The patch adds regexes to some cases, and moves some other cases back
from c-c++-common to gcc.dg where the dg-multiline syntax isn't
expressive enough.

Various "fd-*.c" failures relate to Solaris's socket-handling functions
not being marked with "noexcept", where due to PR analyzer/97111 we
mishandle the exception-handling edges in the CFG, leading to leak
false positives.  The patch works around this by adding -fno-exceptions
to these cases, pending a proper fix for PR analyzer/97111.

gcc/analyzer/ChangeLog:
PR analyzer/111475
* analyzer.cc (is_special_named_call_p): Add "look_in_std" param.
(is_std_function_p): Make non-static.
* analyzer.h (is_special_named_call_p): Add optional "look_in_std"
param.
(is_std_function_p): New decl.
* engine.cc (stmt_requires_new_enode_p): Look for both "signal"
and "std::signal".
* kf.cc (register_known_functions): Add various "std::" copies
of the known functions.
* known-function-manager.cc
(known_function_manager::~known_function_manager): Clean up
m_std_ns_map_id_to_kf.
(known_function_manager::add_std_ns): New.
(known_function_manager::get_match): Also look for known "std::"
functions.
(known_function_manager::get_by_identifier_in_std_ns): New.
* known-function-manager.h
(known_function_manager::add_std_ns): New decl.
(known_function_manager::get_by_identifier_in_std_ns): New decl.
(known_function_manager::m_std_ns_map_id_to_kf): New field.
* sm-file.cc (register_known_file_functions): Add various "std::"
copies of the known functions.
* sm-malloc.cc (malloc_state_machine::on_stmt): Handle
"std::realloc".
* sm-signal.cc (signal_unsafe_p): Consider "std::" copies of the
functions as also being async-signal-unsafe.
(signal_state_machine::on_stmt): Consider "std::signal".

gcc/testsuite/ChangeLog:
PR analyzer/111475
* c-c++-common/analyzer/fd-glibc-byte-stream-socket.c: Add
-fno-exceptions for now.
* c-c++-common/analyzer/fd-manpage-getaddrinfo-client.c: Likewise.
* c-c++-common/analyzer/fd-mappage-getaddrinfo-server.c: Rename
to...
* c-c++-common/analyzer/fd-manpage-getaddrinfo-server.c: ...this,
and
add -fno-exceptions for now.
* c-c++-common/analyzer/fd-socket-meaning.c: Add -fno-exceptions
for now.
* c-c++-common/analyzer/fd-symbolic-socket.c: Likewise.
* c-c++-common/analyzer/flexible-array-member-1.c: Use regexp to
handle C vs C++ differences in spelling of function name, which
could have a "std::" prefix on some targets.
* c-c++-common/analyzer/pr106539.c: Likewise.
* c-c++-common/analyzer/malloc-ipa-8-unchecked.c: Move back to...
* gcc.dg/analyzer/malloc-ipa-8-unchecked.c: ...here, dropping
attempt to generalize output for C vs C++.
* c-c++-common/analyzer/signal-4a.c: Move back to...
* gcc.dg/analyzer/signal-4a.c: ...here, dropping attempt to
generalize output for C vs C++.
* 

[Bug analyzer/111475] [14/15 regression] Many C++ analyzer tests FAIL

2024-05-01 Thread ro at CeBiTec dot Uni-Bielefeld.DE via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111475

--- Comment #12 from ro at CeBiTec dot Uni-Bielefeld.DE  ---
"dmalcolm at gcc dot gnu.org"  writes:
> --- Comment #11 from David Malcolm  ---
> Thanks.  I've been working on this on cfarm216; I have a messy set of patches
> with this improvement to g++.sum with analyzer.exp so far:
>
> # of expected passes   11395 -> 12015
> # of unexpected failures 684 ->64
> # of unexpected successes  4 -> 0
> # of expected failures   443 ->   447
> # of unsupported tests50
>
> However I'm don't have access to my regular workstation/testing box until late
> tomorrow, so I'm holding off on posting until I've cleaned them up and put 
> them
> through my usual testing regime.

That's excellent news, thanks for the update.

[Bug analyzer/111475] [14/15 regression] Many C++ analyzer tests FAIL

2024-04-30 Thread dmalcolm at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111475

David Malcolm  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED

--- Comment #11 from David Malcolm  ---
Thanks.  I've been working on this on cfarm216; I have a messy set of patches
with this improvement to g++.sum with analyzer.exp so far:

# of expected passes   11395 -> 12015
# of unexpected failures 684 ->64
# of unexpected successes  4 -> 0
# of expected failures   443 ->   447
# of unsupported tests50

However I'm don't have access to my regular workstation/testing box until late
tomorrow, so I'm holding off on posting until I've cleaned them up and put them
through my usual testing regime.

Sorry again about the noise

[Bug analyzer/111475] [14/15 regression] Many C++ analyzer tests FAIL

2024-04-26 Thread ro at CeBiTec dot Uni-Bielefeld.DE via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111475

--- Comment #10 from ro at CeBiTec dot Uni-Bielefeld.DE  ---
> --- Comment #9 from David Malcolm  ---
> Sorry about this.
>
> Is there a machine in the compile farm I can test this on?

Sure, both cfarm215 (Solaris/x86) and cfarm216 (Solaris/SPARC).  With
the attached Solaris testcase, you can reproduce it even on Linux.

[Bug analyzer/111475] [14/15 regression] Many C++ analyzer tests FAIL

2024-04-26 Thread dmalcolm at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111475

--- Comment #9 from David Malcolm  ---
Sorry about this.

Is there a machine in the compile farm I can test this on?

[Bug analyzer/111475] [14/15 regression] Many C++ analyzer tests FAIL

2024-04-26 Thread ro at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111475

Rainer Orth  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org,
   ||rguenth at gcc dot gnu.org

--- Comment #8 from Rainer Orth  ---
I wonder what to do about this PR for GCC 14:

* It increased analyzer failures from 92 on the gcc-13 branch to 1482 on trunk.

* This is a massive regression for sparc-sun-solaris2.11, a primary target.

* I never got any response from either the patch author or David as analyzer
  maintainer.

In the worst case, I guess it's better to disable the analyzer testsuite on
Solaris rather than having this insane amount of noise.

Thoughts?