mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/52469 (-fwhole-file bug: Wrong backend_decl for result of PPC function)
2012-03-08 Tobias Burnus <burnus@net-b.de> PR fortran/52469 * trans-types.c (gfc_get_function_type): Handle backend_decl of a procedure pointer. 2012-03-08 Tobias Burnus <burnus@net-b.de> PR fortran/52469 * gfortran.dg/proc_ptr_34.f90 From-SVN: r185109
This commit is contained in:
parent
a3299120f3
commit
232d1950fd
|
@ -1,3 +1,9 @@
|
||||||
|
2012-03-08 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
|
PR fortran/52469
|
||||||
|
* trans-types.c (gfc_get_function_type): Handle backend_decl
|
||||||
|
of a procedure pointer.
|
||||||
|
|
||||||
2012-03-06 Steven Bosscher <steven@gcc.gnu.org>
|
2012-03-06 Steven Bosscher <steven@gcc.gnu.org>
|
||||||
|
|
||||||
* f95-lang.c (yyerror, yylex): Remove.
|
* f95-lang.c (yyerror, yylex): Remove.
|
||||||
|
|
|
@ -2678,7 +2678,11 @@ gfc_get_function_type (gfc_symbol * sym)
|
||||||
|| sym->attr.flavor == FL_PROGRAM);
|
|| sym->attr.flavor == FL_PROGRAM);
|
||||||
|
|
||||||
if (sym->backend_decl)
|
if (sym->backend_decl)
|
||||||
return TREE_TYPE (sym->backend_decl);
|
{
|
||||||
|
if (sym->attr.proc_pointer)
|
||||||
|
return TREE_TYPE (TREE_TYPE (sym->backend_decl));
|
||||||
|
return TREE_TYPE (sym->backend_decl);
|
||||||
|
}
|
||||||
|
|
||||||
alternate_return = 0;
|
alternate_return = 0;
|
||||||
typelist = NULL;
|
typelist = NULL;
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2012-03-08 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
|
PR fortran/52469
|
||||||
|
* gfortran.dg/proc_ptr_34.f90
|
||||||
|
|
||||||
2012-03-07 Jason Merrill <jason@redhat.com>
|
2012-03-07 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/52521
|
PR c++/52521
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! PR fortran/52469
|
||||||
|
!
|
||||||
|
! This was failing as the DECL of the proc pointer "func"
|
||||||
|
! was used for the interface of the proc-pointer component "my_f_ptr"
|
||||||
|
! rather than the decl of the proc-pointer target
|
||||||
|
!
|
||||||
|
! Contributed by palott@gmail.com
|
||||||
|
!
|
||||||
|
|
||||||
|
module ExampleFuncs
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
! NOTE: "func" is a procedure pointer!
|
||||||
|
pointer :: func
|
||||||
|
interface
|
||||||
|
function func (z)
|
||||||
|
real :: func
|
||||||
|
real, intent (in) :: z
|
||||||
|
end function func
|
||||||
|
end interface
|
||||||
|
|
||||||
|
type Contains_f_ptr
|
||||||
|
procedure (func), pointer, nopass :: my_f_ptr
|
||||||
|
end type Contains_f_ptr
|
||||||
|
contains
|
||||||
|
|
||||||
|
function f1 (x)
|
||||||
|
real :: f1
|
||||||
|
real, intent (in) :: x
|
||||||
|
|
||||||
|
f1 = 2.0 * x
|
||||||
|
|
||||||
|
return
|
||||||
|
end function f1
|
||||||
|
|
||||||
|
function f2 (x)
|
||||||
|
real :: f2
|
||||||
|
real, intent (in) :: x
|
||||||
|
|
||||||
|
f2 = 3.0 * x**2
|
||||||
|
|
||||||
|
return
|
||||||
|
end function f2
|
||||||
|
|
||||||
|
function fancy (func, x)
|
||||||
|
real :: fancy
|
||||||
|
real, intent (in) :: x
|
||||||
|
|
||||||
|
interface AFunc
|
||||||
|
function func (y)
|
||||||
|
real :: func
|
||||||
|
real, intent (in) ::y
|
||||||
|
end function func
|
||||||
|
end interface AFunc
|
||||||
|
|
||||||
|
fancy = func (x) + 3.3 * x
|
||||||
|
end function fancy
|
||||||
|
|
||||||
|
end module ExampleFuncs
|
||||||
|
|
||||||
|
|
||||||
|
program test_proc_ptr
|
||||||
|
use ExampleFuncs
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
type (Contains_f_ptr), dimension (2) :: NewType
|
||||||
|
|
||||||
|
!NewType(1) % my_f_ptr => f1
|
||||||
|
NewType(2) % my_f_ptr => f2
|
||||||
|
|
||||||
|
!write (*, *) NewType(1) % my_f_ptr (3.0), NewType(2) % my_f_ptr (3.0)
|
||||||
|
write (6, *) NewType(2) % my_f_ptr (3.0) ! < Shall print '27.0'
|
||||||
|
|
||||||
|
stop
|
||||||
|
end program test_proc_ptr
|
||||||
|
|
||||||
|
! { dg-final { cleanup-modules "examplefuncs" } }
|
Loading…
Reference in New Issue