Commit c9942e5f by Thomas Koenig

re PR fortran/92755 (ICE in gfc_dep_resolver, at fortran/dependency.c:2123)

2019-12-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/92755
	* dependency.c (gfc_dep_resolver):  Move skipping of _data ref
	into the loop.

2019-12-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/92755
	* gfortran.dg/dependency_57.f90: New test.

From-SVN: r279086
parent 9f5836a6
2019-12-08 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/92755
* dependency.c (gfc_dep_resolver): Move skipping of _data ref
into the loop.
2019-12-07 Tobias Burnus <tobias@codesourcery.com> 2019-12-07 Tobias Burnus <tobias@codesourcery.com>
PR fortran/92793 PR fortran/92793
...@@ -28,7 +34,7 @@ ...@@ -28,7 +34,7 @@
2019-12-06 Tobias Burnus <tobias@codesourcery.com> 2019-12-06 Tobias Burnus <tobias@codesourcery.com>
Kwok Cheung Yeung <kcy@codesourcery.com> Kwok Cheung Yeung <kcy@codesourcery.com>
* trans-openmp.c (gfc_build_conditional_assign, * trans-openmp.c (gfc_build_conditional_assign,
gfc_build_conditional_assign_expr): New static functions. gfc_build_conditional_assign_expr): New static functions.
(gfc_omp_finish_clause, gfc_trans_omp_clauses): Handle mapping of (gfc_omp_finish_clause, gfc_trans_omp_clauses): Handle mapping of
absent optional arguments and fix mapping of present optional args. absent optional arguments and fix mapping of present optional args.
......
...@@ -2098,18 +2098,6 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gfc_reverse *reverse, ...@@ -2098,18 +2098,6 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gfc_reverse *reverse,
gfc_dependency this_dep; gfc_dependency this_dep;
bool same_component = false; bool same_component = false;
/* The refs might come in mixed, one with a _data component and one
without. Look at their next reference in order to avoid an
ICE. */
if (lref && lref->type == REF_COMPONENT && lref->u.c.component
&& strcmp (lref->u.c.component->name, "_data") == 0)
lref = lref->next;
if (rref && rref->type == REF_COMPONENT && rref->u.c.component
&& strcmp (rref->u.c.component->name, "_data") == 0)
rref = rref->next;
this_dep = GFC_DEP_ERROR; this_dep = GFC_DEP_ERROR;
fin_dep = GFC_DEP_ERROR; fin_dep = GFC_DEP_ERROR;
/* Dependencies due to pointers should already have been identified. /* Dependencies due to pointers should already have been identified.
...@@ -2117,6 +2105,18 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gfc_reverse *reverse, ...@@ -2117,6 +2105,18 @@ gfc_dep_resolver (gfc_ref *lref, gfc_ref *rref, gfc_reverse *reverse,
while (lref && rref) while (lref && rref)
{ {
/* The refs might come in mixed, one with a _data component and one
without. Look at their next reference in order to avoid an
ICE. */
if (lref && lref->type == REF_COMPONENT && lref->u.c.component
&& strcmp (lref->u.c.component->name, "_data") == 0)
lref = lref->next;
if (rref && rref->type == REF_COMPONENT && rref->u.c.component
&& strcmp (rref->u.c.component->name, "_data") == 0)
rref = rref->next;
/* We're resolving from the same base symbol, so both refs should be /* We're resolving from the same base symbol, so both refs should be
the same type. We traverse the reference chain until we find ranges the same type. We traverse the reference chain until we find ranges
that are not equal. */ that are not equal. */
......
2019-12-08 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/92755
* gfortran.dg/dependency_57.f90: New test.
2019-12-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2019-12-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* g++.dg/cpp0x/gen-attrs-36.C: Update expected diagnostics. * g++.dg/cpp0x/gen-attrs-36.C: Update expected diagnostics.
......
! { dg-do compile }
! PR 92755 - this used to cause an ICE.
! Original test case by Gerhard Steinmetz
program p
type t
end type
type t2
class(t), allocatable :: a(:)
end type
type(t2) :: z
z%a = [z%a]
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