re PR fortran/54107 ([F03] Memory hog with abstract interface)
fortran/ PR fortran/54107 PR fortran/54195 * gfortran.h (struct gfc_symbol): New field 'resolved'. * resolve.c (resolve_fl_var_and_proc): Don't skip result symbols. (resolve_symbol): Skip duplicate calls. Don't check the current namespace. testsuite/ PR fortran/54107 * gfortran.dg/recursive_interface_1.f90: New test. From-SVN: r195729
This commit is contained in:
parent
7ac3af3836
commit
4af8d042f8
@ -1,3 +1,12 @@
|
||||
2013-02-04 Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/54107
|
||||
PR fortran/54195
|
||||
* gfortran.h (struct gfc_symbol): New field 'resolved'.
|
||||
* resolve.c (resolve_fl_var_and_proc): Don't skip result symbols.
|
||||
(resolve_symbol): Skip duplicate calls. Don't check the current
|
||||
namespace.
|
||||
|
||||
2013-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/50627
|
||||
@ -7,7 +16,7 @@
|
||||
* parse.c (parse_module): Do not put namespace into
|
||||
gsymbol on error.
|
||||
|
||||
2012-01-30 Tobias Burnus <burnus@net-b.de>
|
||||
2013-01-30 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/56138
|
||||
* trans-decl.c (gfc_trans_deferred_vars): Fix deferred-length
|
||||
@ -214,7 +223,7 @@
|
||||
finalizer_insert_packed_call, generate_finalization_wrapper):
|
||||
Clean up by using gfc_build_intrinsic_call.
|
||||
|
||||
2012-01-07 Tobias Burnus <burnus@net-b.de>
|
||||
2013-01-07 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/55763
|
||||
* resolve.c (resolve_select_type): Reject intrinsic types for
|
||||
|
@ -1248,6 +1248,9 @@ typedef struct gfc_symbol
|
||||
unsigned equiv_built:1;
|
||||
/* Set if this variable is used as an index name in a FORALL. */
|
||||
unsigned forall_index:1;
|
||||
/* Used to avoid multiple resolutions of a single symbol. */
|
||||
unsigned resolved:1;
|
||||
|
||||
int refs;
|
||||
struct gfc_namespace *ns; /* namespace containing this symbol */
|
||||
|
||||
|
@ -11051,11 +11051,6 @@ resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
|
||||
{
|
||||
gfc_array_spec *as;
|
||||
|
||||
/* Avoid double diagnostics for function result symbols. */
|
||||
if ((sym->result || sym->attr.result) && !sym->attr.dummy
|
||||
&& (sym->ns != gfc_current_ns))
|
||||
return SUCCESS;
|
||||
|
||||
if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
|
||||
as = CLASS_DATA (sym)->as;
|
||||
else
|
||||
@ -13170,6 +13165,10 @@ resolve_symbol (gfc_symbol *sym)
|
||||
gfc_array_spec *as;
|
||||
bool saved_specification_expr;
|
||||
|
||||
if (sym->resolved)
|
||||
return;
|
||||
sym->resolved = 1;
|
||||
|
||||
if (sym->attr.artificial)
|
||||
return;
|
||||
|
||||
@ -13779,7 +13778,6 @@ resolve_symbol (gfc_symbol *sym)
|
||||
described in 14.7.5, to those variables that have not already
|
||||
been assigned one. */
|
||||
if (sym->ts.type == BT_DERIVED
|
||||
&& sym->ns == gfc_current_ns
|
||||
&& !sym->value
|
||||
&& !sym->attr.allocatable
|
||||
&& !sym->attr.alloc_comp)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2013-02-04 Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/54107
|
||||
* gfortran.dg/recursive_interface_1.f90: New test.
|
||||
|
||||
2013-02-04 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR lto/56168
|
||||
@ -97,7 +102,7 @@
|
||||
* lib/target-supports-dg.exp (dg-process-target): Use expr to
|
||||
evaluate the end index in string range.
|
||||
|
||||
2012-01-30 Tobias Burnus <burnus@net-b.de>
|
||||
2013-01-30 Tobias Burnus <burnus@net-b.de>
|
||||
|
||||
PR fortran/56138
|
||||
* gfortran.dg/allocatable_function_6.f90: New.
|
||||
|
20
gcc/testsuite/gfortran.dg/recursive_interface_1.f90
Normal file
20
gcc/testsuite/gfortran.dg/recursive_interface_1.f90
Normal file
@ -0,0 +1,20 @@
|
||||
! { dg-do compile }
|
||||
!
|
||||
! PR fortran/54107
|
||||
! The compiler used to ICE on recursive interfaces.
|
||||
|
||||
module m
|
||||
contains
|
||||
function foo() result(r1)
|
||||
procedure(foo), pointer :: r1
|
||||
end function foo
|
||||
|
||||
function bar() result(r2)
|
||||
procedure(baz), pointer :: r2
|
||||
end function bar
|
||||
|
||||
function baz() result(r3)
|
||||
procedure(bar), pointer :: r3
|
||||
end function baz
|
||||
end module m
|
||||
|
Loading…
Reference in New Issue
Block a user