Commit 35e24106 by David Malcolm

analyzer: g++ testsuite support

PR analyzer/93288 reports a C++-specific ICE with -fanalyzer.

This patch creates the beginnings of a C++ test suite for the analyzer,
so that there's a place to put test coverage for the fix.
It adds a regression test for PR analyzer/93212, an ICE fixed
in r10-5970-g32077b69.

gcc/testsuite/ChangeLog:
	PR analyzer/93212
	* g++.dg/analyzer/analyzer.exp: New subdirectory and .exp suite.
	* g++.dg/analyzer/malloc.C: New test.
	* g++.dg/analyzer/pr93212.C: New test.
parent 3889b0cb
2020-02-11 David Malcolm <dmalcolm@redhat.com>
PR analyzer/93212
* g++.dg/analyzer/analyzer.exp: New subdirectory and .exp suite.
* g++.dg/analyzer/malloc.C: New test.
* g++.dg/analyzer/pr93212.C: New test.
2020-02-11 Martin Sebor <msebor@redhat.com> 2020-02-11 Martin Sebor <msebor@redhat.com>
PR tree-optimization/93683 PR tree-optimization/93683
......
# Copyright (C) 2020 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# G++ testsuite that uses the `dg.exp' driver.
# Load support procs.
load_lib g++-dg.exp
# If the analyzer has not been enabled, bail.
if { ![check_effective_target_analyzer] } {
return
}
if [info exists DEFAULT_CXXFLAGS] then {
set save_default_cxxflags $DEFAULT_CXXFLAGS
}
# If a testcase doesn't have special options, use these.
set DEFAULT_CXXFLAGS " -fanalyzer -fdiagnostics-path-format=separate-events -Wanalyzer-too-complex -fanalyzer-call-summaries"
# Initialize `dg'.
dg-init
# Main loop.
set tests [lsort [glob -nocomplain $srcdir/$subdir/*.C]]
g++-dg-runtest $tests "" $DEFAULT_CXXFLAGS
# All done.
dg-finish
if [info exists save_default_cxxflags] {
set DEFAULT_CXXFLAGS $save_default_cxxflags
} else {
unset DEFAULT_CXXFLAGS
}
// { dg-do compile }
#include <stdlib.h>
void test_1 (void *ptr)
{
free (ptr);
free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
}
// { dg-do compile { target c++11 } }
#include <iostream>
auto lol()
{
int aha = 3;
return [&aha] {
return aha;
};
}
int main()
{
auto lambda = lol();
std::cout << lambda() << std::endl;
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment