Commit e057d3e5 by Paul Thomas

re PR fortran/45305 (Array-valued calles to elementals are not simplified)

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/45305
	* expr.c : Add a prototype for scalarize_intrinsic_call.
	(gfc_simplify_expr): Use scalarize_intrinsic_call for elemental
	intrinsic function calls.
	(scalarize_intrinsic_call): Add 'init_flag' argument. Check if
	the expression or any of the actual argument expressions are
	NULL. Before calling gfc_check_init_expr, check 'init_flag'.
	Only simplify the scalarized expressions if there are no errors
	on the stack.
	(gfc_check_init_expr): Set 'init_flag' true in the call to
	scalarize_intrinsic_call.

2018-07-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/45305
	* gfortran.dg/scalarize_parameter_array_2.f90: New test.

From-SVN: r262300
parent 87c789f1
2018-07-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82969
PR fortran/86242
* trans-array.c (structure_alloc_comps): Do not explicitly copy
procedure pointer components.
2018-07-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/45305
* expr.c : Add a prototype for scalarize_intrinsic_call.
(gfc_simplify_expr): Use scalarize_intrinsic_call for elemental
......
......@@ -8842,7 +8842,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
break;
case COPY_ALLOC_COMP:
if (c->attr.pointer)
if (c->attr.pointer || c->attr.proc_pointer)
continue;
/* We need source and destination components. */
......
2018-07-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82969
PR fortran/86242
* gfortran.dg/proc_ptr_50.f90: New test.
2018-07-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/45305
* gfortran.dg/scalarize_parameter_array_2.f90: New test.
......
! { dg-do compile }
!
! Test the fix for PR86242, in which the procedure pointer in 'tester'
! was being copied as if it were an allocatable class component.
!
! Contributed by <cfd@mnet-mail.de>
!
module test
implicit none
private
public :: tester
type :: wrapper
integer(4) :: n
end type wrapper
type :: output
real(8) :: dummy
end type output
type :: tester
class(wrapper), allocatable :: wrap
procedure(proc1), pointer :: ptr => null()
end type tester
abstract interface
function proc1(self) result(uc)
import :: tester, output
class(tester), intent(in) :: self
class(output), allocatable :: uc
end function proc1
end interface
end module test
! Comment #2 from Janus Weil <janus@gcc.gnu.org>
module test1
implicit none
type :: output
end type
type :: tester
integer, allocatable :: wrap
procedure(proc1), pointer, nopass :: ptr
end type
interface ! Originally abstract
function proc1() result(uc)
import :: output
class(output), allocatable :: uc ! Works if a pointer
end function
end interface
! PR82969 from Gerhard Steinmetz <gscfq@t-online.de>
type t
real, allocatable :: x(:)
procedure(f), nopass, pointer :: g
end type
contains
function f() result(z)
class(t), allocatable :: z
end
end module test1
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