diff options
author | Dominique d'Humieres <dominiq@lps.ens.fr> | 2016-03-13 10:48:20 +0100 |
---|---|---|
committer | Dominique d'Humieres <dominiq@gcc.gnu.org> | 2016-03-13 10:48:20 +0100 |
commit | a18e0fe1e4f3788fbc6ca10d8c7671885ed9baea (patch) | |
tree | 4b350462e578e4410d29be5f7829fe2f52aee3ad /gcc | |
parent | a4c54bf2a79469093e8742ec3e22ae09f14da4b5 (diff) | |
download | gcc-a18e0fe1e4f3788fbc6ca10d8c7671885ed9baea.zip gcc-a18e0fe1e4f3788fbc6ca10d8c7671885ed9baea.tar.gz gcc-a18e0fe1e4f3788fbc6ca10d8c7671885ed9baea.tar.bz2 |
re PR fortran/45076 ([OOP] gfortran.dg/dynamic_dispatch_6.f03 ICEs with -fprofile-use)
2016-03-13 Dominique d'Humieres <dominiq@lps.ens.fr>
PR fortran/45076
gfortran.dg/prof/prof.exp: New script.
gfortran.dg/prof/dynamic_dispatch_6.f03: New test.
From-SVN: r234168
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03 | 68 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/prof/prof.exp | 56 |
3 files changed, 130 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1334712..d52e69b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-03-13 Dominique d'Humieres <dominiq@lps.ens.fr> + + PR fortran/45076 + gfortran.dg/prof/prof.exp: New script. + gfortran.dg/prof/dynamic_dispatch_6.f03: New test. + 2016-03-12 Andrey Belevantsev <abel@ispras.ru> PR rtl-optimization/69307 diff --git a/gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03 b/gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03 new file mode 100644 index 0000000..82e4e6f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/prof/dynamic_dispatch_6.f03 @@ -0,0 +1,68 @@ +! { dg-require-profiling "-fprofile-generate" } +! { dg-options "-Ofast" } +! +! PR 45076: [OOP] gfortran.dg/dynamic_dispatch_6.f03 ICEs with -fprofile-use +! +! Contributed by Damian Rouson <damian@rouson.net> + +module field_module + implicit none + private + public :: field + type ,abstract :: field + end type +end module + +module periodic_5th_order_module + use field_module ,only : field + implicit none + type ,extends(field) :: periodic_5th_order + end type +end module + +module field_factory_module + implicit none + private + public :: field_factory + type, abstract :: field_factory + contains + procedure(create_interface), deferred :: create + end type + abstract interface + function create_interface(this) + use field_module ,only : field + import :: field_factory + class(field_factory), intent(in) :: this + class(field) ,pointer :: create_interface + end function + end interface +end module + +module periodic_5th_factory_module + use field_factory_module , only : field_factory + implicit none + private + public :: periodic_5th_factory + type, extends(field_factory) :: periodic_5th_factory + contains + procedure :: create=>new_periodic_5th_order + end type +contains + function new_periodic_5th_order(this) + use field_module ,only : field + use periodic_5th_order_module ,only : periodic_5th_order + class(periodic_5th_factory), intent(in) :: this + class(field) ,pointer :: new_periodic_5th_order + end function +end module + +program main + use field_module ,only : field + use field_factory_module ,only : field_factory + use periodic_5th_factory_module ,only : periodic_5th_factory + implicit none + class(field) ,pointer :: u + class(field_factory), allocatable :: field_creator + allocate (periodic_5th_factory :: field_creator) + u => field_creator%create() +end program diff --git a/gcc/testsuite/gfortran.dg/prof/prof.exp b/gcc/testsuite/gfortran.dg/prof/prof.exp new file mode 100644 index 0000000..0bad01d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/prof/prof.exp @@ -0,0 +1,56 @@ +# Copyright (C) 2001-2016 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/>. + +# Test the functionality of programs compiled with profile-directed block +# ordering using -fprofile-generate followed by -fprofile-use. + +load_lib target-supports.exp + +# Some targets don't support tree profiling. +if { ![check_profiling_available "-fprofile-generate"] } { + return +} + +# The procedures in profopt.exp need these parameters. +set tool gfortran +set prof_ext "gcda" + +if $tracelevel then { + strace $tracelevel +} + +# Load support procs. +load_lib profopt.exp + +# Save and override the default list defined in profopt.exp. +set treeprof_save_profopt_options $PROFOPT_OPTIONS +set PROFOPT_OPTIONS [list {}] + +# These are globals used by profopt-execute. The first is options +# needed to generate profile data, the second is options to use the +# profile data. +set profile_option "-fprofile-generate -D_PROFILE_GENERATE" +set feedback_option "-fprofile-use -D_PROFILE_USE" + +foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.f*]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $src] then { + continue + } + profopt-execute $src +} + +set PROFOPT_OPTIONS $treeprof_save_profopt_options |