Commit c2de0c19 by Tobias Burnus

re PR fortran/32088 (ICE (doesn't occur if given function standalone instead on internal))

fortran/
2007-05-27 Paul Thomas  <pault@gcc.gnu.org>
	   Tobias Burnus  <burnus@net-b.de>

	PR fortran/32088
	* symbol.c (gfc_check_function_type): Copy dimensions of
	  result variable.
	* resolve.c (resolve_contained_fntype): Improve symbol output in
 	  the error message.

testsuite/
2007-05-27  Tobias Burnus  <burnus@net-b.de>

	PR fortran/32088
	* gfortran.dg/func_result_3.f90: New.

-- Diese und die falgenden Zeilen werden ignoriert --

M    gcc/testsuite/ChangeLog
A    gcc/testsuite/gfortran.dg/func_result_3.f90
M    gcc/fortran/symbol.c
M    gcc/fortran/ChangeLog
M    gcc/fortran/resolve.c

From-SVN: r125118
parent bcb2d701
2007-05-27 Paul Thomas <pault@gcc.gnu.org>
Tobias Burnus <burnus@net-b.de>
PR fortran/32088
* symbol.c (gfc_check_function_type): Copy dimensions of
result variable.
* resolve.c (resolve_contained_fntype): Improve symbol output in
the error message.
2007-05-26 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/31813
......
......@@ -289,18 +289,20 @@ resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
return;
/* Try to find out of what the return type is. */
if (sym->result != NULL)
sym = sym->result;
if (sym->ts.type == BT_UNKNOWN)
if (sym->result->ts.type == BT_UNKNOWN)
{
t = gfc_set_default_type (sym, 0, ns);
t = gfc_set_default_type (sym->result, 0, ns);
if (t == FAILURE && !sym->attr.untyped)
if (t == FAILURE && !sym->result->attr.untyped)
{
gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
sym->name, &sym->declared_at); /* FIXME */
sym->attr.untyped = 1;
if (sym->result == sym)
gfc_error ("Contained function '%s' at %L has no IMPLICIT type",
sym->name, &sym->declared_at);
else
gfc_error ("Result '%s' of contained function '%s' at %L has "
"no IMPLICIT type", sym->result->name, sym->name,
&sym->result->declared_at);
sym->result->attr.untyped = 1;
}
}
......@@ -310,9 +312,9 @@ resolve_contained_fntype (gfc_symbol *sym, gfc_namespace *ns)
in external functions. Internal function results are not on that list;
ergo, not permitted. */
if (sym->ts.type == BT_CHARACTER)
if (sym->result->ts.type == BT_CHARACTER)
{
gfc_charlen *cl = sym->ts.cl;
gfc_charlen *cl = sym->result->ts.cl;
if (!cl || !cl->length)
gfc_error ("Character-valued internal function '%s' at %L must "
"not be assumed length", sym->name, &sym->declared_at);
......
......@@ -271,13 +271,18 @@ gfc_check_function_type (gfc_namespace *ns)
== SUCCESS)
{
if (proc->result != proc)
proc->ts = proc->result->ts;
{
proc->ts = proc->result->ts;
proc->as = gfc_copy_array_spec (proc->result->as);
proc->attr.dimension = proc->result->attr.dimension;
proc->attr.pointer = proc->result->attr.pointer;
proc->attr.allocatable = proc->result->attr.allocatable;
}
}
else
{
gfc_error ("unable to implicitly type the function result "
"'%s' at %L", proc->result->name,
&proc->result->declared_at);
gfc_error ("Function result '%s' at %L has no IMPLICIT type",
proc->result->name, &proc->result->declared_at);
proc->result->attr.untyped = 1;
}
}
......
2007-05-27 Tobias Burnus <burnus@net-b.de>
PR fortran/32088
* gfortran.dg/func_result_3.f90: New.
2007-05-27 Tobias Burnus <burnus@net-b.de>
PR middle-end/32083
* gfortran.dg/transfer_simplify_3.f90: New.
! { dg-do compile }
! PR fortran/32088
!
! Test implicitly defined result variables
!
subroutine dummy
contains
function quadric(a,b) result(c)
intent(in) a,b; dimension a(0:3),b(0:3),c(0:9)
c(0)=a(0)*b(0); c(1:3)=a(1:)*b(0)+a(0)*b(1:); c(4:6)=a(1:)*b(1:)
c(7:9)=(/a(1)*b(2)+b(1)*a(2),a(1)*b(3)+b(1)*a(3),a(2)*b(3)+b(2)*a(3)/)
end function
end subroutine dummy
subroutine dummy2
implicit none
contains
function quadric(a,b) result(c) ! { dg-error "no IMPLICIT type" }
real :: a, b
intent(in) a,b; dimension a(0:3),b(0:3),c(0:9)
c(0)=a(0)*b(0); c(1:3)=a(1:)*b(0)+a(0)*b(1:); c(4:6)=a(1:)*b(1:)
c(7:9)=(/a(1)*b(2)+b(1)*a(2),a(1)*b(3)+b(1)*a(3),a(2)*b(3)+b(2)*a(3)/)
end function
end subroutine dummy2
end
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