analyzer: detect malloc, free, calloc within "std" [PR93959]
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 27 Feb 2020 19:19:33 +0000 (14:19 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Mon, 2 Mar 2020 21:40:23 +0000 (16:40 -0500)
commit9f00b22f98ec0688fcd9816a03aa3f7eea58bcf7
treee3ee554f9d502225feb1db5f03b3ba60ad26c356
parentcd14f288ddf246d40f109aa7999b99a44739cd99
analyzer: detect malloc, free, calloc within "std" [PR93959]

PR analyzer/93959 reported that g++.dg/analyzer/malloc.C was failing
with no output on Solaris.

The issue is that <stdlib.h> there has "using std::free;", converting
all the "free" calls to std::free, which fails the name-matching via
is_named_call_p.

This patch implements an is_std_named_call_p variant of is_named_call_p
to check for the name within "std", and uses it in sm-malloc.c to check
for std::malloc, std::calloc, and std::free.

gcc/analyzer/ChangeLog:
PR analyzer/93959
* analyzer.cc (is_std_function_p): New function.
(is_std_named_call_p): New functions.
* analyzer.h (is_std_named_call_p): New decl.
* sm-malloc.cc (malloc_state_machine::on_stmt): Check for "std::"
variants when checking for malloc, calloc and free.

gcc/testsuite/ChangeLog:
PR analyzer/93959
* g++.dg/analyzer/cstdlib-2.C: New test.
* g++.dg/analyzer/cstdlib.C: New test.
gcc/analyzer/ChangeLog
gcc/analyzer/analyzer.cc
gcc/analyzer/analyzer.h
gcc/analyzer/sm-malloc.cc
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/analyzer/cstdlib-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/analyzer/cstdlib.C [new file with mode: 0644]