Commit 69597e2f by Paul Thomas

re PR fortran/87881 (gfortran.dg/inquiry_type_ref_(1.f08|3.f90) fail on darwin)

2018-12-21  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/87881
	* expr.c (find_inquiry_ref): Loop through the inquiry refs in
	case there are two of them.
	(simplify_ref_chain): Return true after a successful call to
	find_inquiry_ref.

2018-12-21  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/87881
	* gfortran.dg/inquiry_part_ref_4.f90: New test.

From-SVN: r267337
parent 2f8df14d
2018-12-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/87881
* expr.c (find_inquiry_ref): Loop through the inquiry refs in
case there are two of them.
(simplify_ref_chain): Return true after a successful call to
find_inquiry_ref.
2018-12-19 Steven G. Kargl <kargl@gcc.gnu.org> 2018-12-19 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/87992 PR fortran/87992
...@@ -125,7 +133,7 @@ ...@@ -125,7 +133,7 @@
2018-12-08 Steven G. Kargl <kargl@gcc.gnu.org> 2018-12-08 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88357 PR fortran/88357
* class.c (insert_component_ref): Check for NULL pointer and * class.c (insert_component_ref): Check for NULL pointer and
previous error message issued. previous error message issued.
* parse.c (parse_associate): Check for NULL pointer. * parse.c (parse_associate): Check for NULL pointer.
* resolve.c (resolve_assoc_var): Check for NULL pointer. * resolve.c (resolve_assoc_var): Check for NULL pointer.
...@@ -2848,7 +2856,7 @@ notice and this notice are preserved. ...@@ -2848,7 +2856,7 @@ notice and this notice are preserved.
2018-12-08 Steven G. Kargl <kargl@gcc.gnu.org> 2018-12-08 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88357 PR fortran/88357
* class.c (insert_component_ref): Check for NULL pointer and * class.c (insert_component_ref): Check for NULL pointer and
previous error message issued. previous error message issued.
* parse.c (parse_associate): Check for NULL pointer. * parse.c (parse_associate): Check for NULL pointer.
* resolve.c (resolve_assoc_var): Check for NULL pointer. * resolve.c (resolve_assoc_var): Check for NULL pointer.
......
...@@ -1730,56 +1730,61 @@ find_inquiry_ref (gfc_expr *p, gfc_expr **newp) ...@@ -1730,56 +1730,61 @@ find_inquiry_ref (gfc_expr *p, gfc_expr **newp)
gfc_resolve_expr (tmp); gfc_resolve_expr (tmp);
switch (inquiry->u.i) /* In principle there can be more than one inquiry reference. */
for (; inquiry; inquiry = inquiry->next)
{ {
case INQUIRY_LEN: switch (inquiry->u.i)
if (tmp->ts.type != BT_CHARACTER) {
goto cleanup; case INQUIRY_LEN:
if (tmp->ts.type != BT_CHARACTER)
goto cleanup;
if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C")) if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C"))
goto cleanup; goto cleanup;
if (!tmp->ts.u.cl->length if (!tmp->ts.u.cl->length
|| tmp->ts.u.cl->length->expr_type != EXPR_CONSTANT) || tmp->ts.u.cl->length->expr_type != EXPR_CONSTANT)
goto cleanup; goto cleanup;
*newp = gfc_copy_expr (tmp->ts.u.cl->length); *newp = gfc_copy_expr (tmp->ts.u.cl->length);
break; break;
case INQUIRY_KIND: case INQUIRY_KIND:
if (tmp->ts.type == BT_DERIVED || tmp->ts.type == BT_CLASS) if (tmp->ts.type == BT_DERIVED || tmp->ts.type == BT_CLASS)
goto cleanup; goto cleanup;
if (!gfc_notify_std (GFC_STD_F2003, "KIND part_ref at %C")) if (!gfc_notify_std (GFC_STD_F2003, "KIND part_ref at %C"))
goto cleanup; goto cleanup;
*newp = gfc_get_int_expr (gfc_default_integer_kind, *newp = gfc_get_int_expr (gfc_default_integer_kind,
NULL, tmp->ts.kind); NULL, tmp->ts.kind);
break; break;
case INQUIRY_RE: case INQUIRY_RE:
if (tmp->ts.type != BT_COMPLEX || tmp->expr_type != EXPR_CONSTANT) if (tmp->ts.type != BT_COMPLEX || tmp->expr_type != EXPR_CONSTANT)
goto cleanup; goto cleanup;
if (!gfc_notify_std (GFC_STD_F2008, "RE part_ref at %C")) if (!gfc_notify_std (GFC_STD_F2008, "RE part_ref at %C"))
goto cleanup; goto cleanup;
*newp = gfc_get_constant_expr (BT_REAL, tmp->ts.kind, &tmp->where); *newp = gfc_get_constant_expr (BT_REAL, tmp->ts.kind, &tmp->where);
mpfr_set ((*newp)->value.real, mpfr_set ((*newp)->value.real,
mpc_realref (p->value.complex), GFC_RND_MODE); mpc_realref (p->value.complex), GFC_RND_MODE);
break; break;
case INQUIRY_IM: case INQUIRY_IM:
if (tmp->ts.type != BT_COMPLEX || tmp->expr_type != EXPR_CONSTANT) if (tmp->ts.type != BT_COMPLEX || tmp->expr_type != EXPR_CONSTANT)
goto cleanup; goto cleanup;
if (!gfc_notify_std (GFC_STD_F2008, "IM part_ref at %C")) if (!gfc_notify_std (GFC_STD_F2008, "IM part_ref at %C"))
goto cleanup; goto cleanup;
*newp = gfc_get_constant_expr (BT_REAL, tmp->ts.kind, &tmp->where); *newp = gfc_get_constant_expr (BT_REAL, tmp->ts.kind, &tmp->where);
mpfr_set ((*newp)->value.real, mpfr_set ((*newp)->value.real,
mpc_imagref (p->value.complex), GFC_RND_MODE); mpc_imagref (p->value.complex), GFC_RND_MODE);
break; break;
}
tmp = gfc_copy_expr (*newp);
} }
if (!(*newp)) if (!(*newp))
...@@ -1970,7 +1975,7 @@ simplify_ref_chain (gfc_ref *ref, int type, gfc_expr **p) ...@@ -1970,7 +1975,7 @@ simplify_ref_chain (gfc_ref *ref, int type, gfc_expr **p)
gfc_replace_expr (*p, newp); gfc_replace_expr (*p, newp);
gfc_free_ref_list ((*p)->ref); gfc_free_ref_list ((*p)->ref);
(*p)->ref = NULL; (*p)->ref = NULL;
break; return true;;
default: default:
break; break;
......
2018-12-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/87881
* gfortran.dg/inquiry_part_ref_4.f90: New test.
2018-12-21 Andreas Krebbel <krebbel@linux.ibm.com> 2018-12-21 Andreas Krebbel <krebbel@linux.ibm.com>
* gcc.target/s390/vector/fp-signedint-convert-1.c: New test. * gcc.target/s390/vector/fp-signedint-convert-1.c: New test.
......
! { dg-do compile }
! { dg-options "-fdump-tree-original" }
!
! Check the fix for PR87881.
!
complex(8) :: zi = (0,-1_8)
character(2) :: chr ='ab'
if (zi%re%kind .ne. kind (real (zi))) stop 1
if (chr%len%kind .ne. kind (len (chr))) stop 2
! After simplification there should only be the delarations for 'zi' and 'chr'
! { dg-final { scan-tree-dump-times "zi" 1 "original" } }
! { dg-final { scan-tree-dump-times "chr" 1 "original" } }
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