mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2013-02-02 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/50627
|
PR fortran/50627
|
||||||
|
|
@ -7,7 +16,7 @@
|
||||||
* parse.c (parse_module): Do not put namespace into
|
* parse.c (parse_module): Do not put namespace into
|
||||||
gsymbol on error.
|
gsymbol on error.
|
||||||
|
|
||||||
2012-01-30 Tobias Burnus <burnus@net-b.de>
|
2013-01-30 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR fortran/56138
|
PR fortran/56138
|
||||||
* trans-decl.c (gfc_trans_deferred_vars): Fix deferred-length
|
* trans-decl.c (gfc_trans_deferred_vars): Fix deferred-length
|
||||||
|
|
@ -214,7 +223,7 @@
|
||||||
finalizer_insert_packed_call, generate_finalization_wrapper):
|
finalizer_insert_packed_call, generate_finalization_wrapper):
|
||||||
Clean up by using gfc_build_intrinsic_call.
|
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
|
PR fortran/55763
|
||||||
* resolve.c (resolve_select_type): Reject intrinsic types for
|
* resolve.c (resolve_select_type): Reject intrinsic types for
|
||||||
|
|
|
||||||
|
|
@ -1248,6 +1248,9 @@ typedef struct gfc_symbol
|
||||||
unsigned equiv_built:1;
|
unsigned equiv_built:1;
|
||||||
/* Set if this variable is used as an index name in a FORALL. */
|
/* Set if this variable is used as an index name in a FORALL. */
|
||||||
unsigned forall_index:1;
|
unsigned forall_index:1;
|
||||||
|
/* Used to avoid multiple resolutions of a single symbol. */
|
||||||
|
unsigned resolved:1;
|
||||||
|
|
||||||
int refs;
|
int refs;
|
||||||
struct gfc_namespace *ns; /* namespace containing this symbol */
|
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;
|
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)
|
if (sym->ts.type == BT_CLASS && sym->attr.class_ok)
|
||||||
as = CLASS_DATA (sym)->as;
|
as = CLASS_DATA (sym)->as;
|
||||||
else
|
else
|
||||||
|
|
@ -13170,6 +13165,10 @@ resolve_symbol (gfc_symbol *sym)
|
||||||
gfc_array_spec *as;
|
gfc_array_spec *as;
|
||||||
bool saved_specification_expr;
|
bool saved_specification_expr;
|
||||||
|
|
||||||
|
if (sym->resolved)
|
||||||
|
return;
|
||||||
|
sym->resolved = 1;
|
||||||
|
|
||||||
if (sym->attr.artificial)
|
if (sym->attr.artificial)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -13779,7 +13778,6 @@ resolve_symbol (gfc_symbol *sym)
|
||||||
described in 14.7.5, to those variables that have not already
|
described in 14.7.5, to those variables that have not already
|
||||||
been assigned one. */
|
been assigned one. */
|
||||||
if (sym->ts.type == BT_DERIVED
|
if (sym->ts.type == BT_DERIVED
|
||||||
&& sym->ns == gfc_current_ns
|
|
||||||
&& !sym->value
|
&& !sym->value
|
||||||
&& !sym->attr.allocatable
|
&& !sym->attr.allocatable
|
||||||
&& !sym->attr.alloc_comp)
|
&& !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>
|
2013-02-04 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR lto/56168
|
PR lto/56168
|
||||||
|
|
@ -97,7 +102,7 @@
|
||||||
* lib/target-supports-dg.exp (dg-process-target): Use expr to
|
* lib/target-supports-dg.exp (dg-process-target): Use expr to
|
||||||
evaluate the end index in string range.
|
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
|
PR fortran/56138
|
||||||
* gfortran.dg/allocatable_function_6.f90: New.
|
* gfortran.dg/allocatable_function_6.f90: New.
|
||||||
|
|
|
||||||
|
|
@ -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