[gcc/devel/c++-modules] analyzer: gfortran testsuite support

Nathan Sidwell nathan@gcc.gnu.org
Tue Feb 11 11:36:00 GMT 2020


https://gcc.gnu.org/g:e9fb7579cbb9fa7adea13e7ee34dfd44fe19ad90

commit e9fb7579cbb9fa7adea13e7ee34dfd44fe19ad90
Author: David Malcolm <dmalcolm@redhat.com>
Date:   Wed Feb 5 10:54:00 2020 -0500

    analyzer: gfortran testsuite support
    
    This patch adds a gfortran.dg/analyzer subdirectory with an analyzer.exp,
    setting DEFAULT_FFLAGS on the tests run within it.
    
    It also adds a couple of simple proof-of-concept tests of e.g. detecting
    double-frees from gfortran.
    
    gcc/testsuite/ChangeLog:
    	* gfortran.dg/analyzer/analyzer.exp: New subdirectory and .exp
    	suite.
    	* gfortran.dg/analyzer/malloc-example.f90: New test.
    	* gfortran.dg/analyzer/malloc.f90: New test.

Diff:
---
 gcc/testsuite/ChangeLog                            |  7 +++
 gcc/testsuite/gfortran.dg/analyzer/analyzer.exp    | 55 ++++++++++++++++++++++
 .../gfortran.dg/analyzer/malloc-example.f90        | 21 +++++++++
 gcc/testsuite/gfortran.dg/analyzer/malloc.f90      | 19 ++++++++
 4 files changed, 102 insertions(+)

diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c6b1c72..3840833 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2020-02-10  David Malcolm  <dmalcolm@redhat.com>
+
+	* gfortran.dg/analyzer/analyzer.exp: New subdirectory and .exp
+	suite.
+	* gfortran.dg/analyzer/malloc-example.f90: New test.
+	* gfortran.dg/analyzer/malloc.f90: New test.
+
 2020-02-10  Martin Sebor  <msebor@redhat.com>
 
 	PR c/93640
diff --git a/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp b/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
new file mode 100644
index 0000000..00edfa5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
@@ -0,0 +1,55 @@
+#  Copyright (C) 2020 Free Software Foundation, Inc.
+
+#  This file is part of GCC.
+#
+#  GCC 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, or (at your option) any later
+#  version.
+#
+#  GCC 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/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib gfortran-dg.exp
+load_lib gfortran.exp
+
+# If the analyzer has not been enabled, bail.
+if { ![check_effective_target_analyzer] } {
+    return
+}
+
+global DEFAULT_FFLAGS
+if [info exists DEFAULT_FFLAGS] then {
+  set save_default_fflags $DEFAULT_FFLAGS
+}
+
+# If a testcase doesn't have special options, use these.
+set DEFAULT_FFLAGS "-fanalyzer -fdiagnostics-path-format=separate-events -Wanalyzer-too-complex -fanalyzer-call-summaries"
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+
+gfortran_init
+
+gfortran-dg-runtest [lsort \
+       [glob -nocomplain $srcdir/$subdir/*.\[fF\]{,90,95,03,08} ] ] "" $DEFAULT_FFLAGS
+
+# All done.
+dg-finish
+
+if [info exists save_default_fflags] {
+  set DEFAULT_FFLAGS $save_default_fflags
+} else {
+  unset DEFAULT_FFLAGS
+}
diff --git a/gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90 b/gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90
new file mode 100644
index 0000000..4c48d41
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90
@@ -0,0 +1,21 @@
+! Example from GCC documentation
+! { dg-do compile }
+! { dg-additional-options "-fcray-pointer" }
+
+program test_malloc
+  implicit none
+  integer i
+  real*8 x(*), z
+  pointer(ptr_x,x)
+
+  ptr_x = malloc(20*8)
+  do i = 1, 20
+    x(i) = sqrt(1.0d0 / i)
+  end do
+  z = 0
+  do i = 1, 20
+    z = z + x(i)
+    print *, z
+  end do
+  call free(ptr_x)
+end program test_malloc
diff --git a/gcc/testsuite/gfortran.dg/analyzer/malloc.f90 b/gcc/testsuite/gfortran.dg/analyzer/malloc.f90
new file mode 100644
index 0000000..05a0bcc
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/analyzer/malloc.f90
@@ -0,0 +1,19 @@
+! { dg-do compile }
+! { dg-additional-options "-fcray-pointer -O0" }
+
+subroutine test_ok
+  real*8 x(*)
+  pointer(ptr_x,x)
+
+  ptr_x = malloc(20*8)
+  call free(ptr_x)
+end subroutine test_ok ! { dg-bogus "leak" }
+
+subroutine test_double_free
+  real*8 x(*)
+  pointer(ptr_x,x)
+
+  ptr_x = malloc(20*8)
+  call free(ptr_x)
+  call free(ptr_x) ! { dg-warning "double-'free'" }
+end subroutine test_double_free ! { dg-bogus "leak" }



More information about the Gcc-cvs mailing list