From: Dominique d'Humieres Date: Mon, 14 Mar 2016 09:21:32 +0000 (+0100) Subject: re PR fortran/45076 ([OOP] gfortran.dg/dynamic_dispatch_6.f03 ICEs with -fprofile... X-Git-Tag: releases/gcc-4.9.4~277 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f6512db5eab0f3189e38c4c421e27070f29c0a1c;p=thirdparty%2Fgcc.git re PR fortran/45076 ([OOP] gfortran.dg/dynamic_dispatch_6.f03 ICEs with -fprofile-use) 2016-03-13 Dominique d'Humieres PR fortran/45076 gfortran.dg/prof/prof.exp: New script. gfortran.dg/prof/dynamic_dispatch_6.f03: New test. From-SVN: r234178 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 178032056fe0..60cb3d7075ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-03-14 Dominique d'Humieres + + PR fortran/45076 + gfortran.dg/prof/prof.exp: New script. + gfortran.dg/prof/dynamic_dispatch_6.f03: New test. + 2016-03-10 Alan Modra * gcc.dg/pr69195.c: New. 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 000000000000..82e4e6f9b8ed --- /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 + +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 000000000000..0bad01d2dbb8 --- /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 +# . + +# 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