2012-09-17 Tobias Burnus <burnus@net-b.de>
PR fortran/54608
* simplify.c (gfc_simplify_scan, gfc_simplify_verify):
Fix handling of BACK=variable.
2012-09-17 Tobias Burnus <burnus@net-b.de>
PR fortran/54608
* gfortran.dg/scan_2.f90
@@ -5247,7 +5247,8 @@ gfc_simplify_scan (gfc_expr *e, gfc_expr *c, gfc_expr *b, gfc_expr *kind)
if (k == -1)
return &gfc_bad_expr;
- if (e->expr_type != EXPR_CONSTANT || c->expr_type != EXPR_CONSTANT)
+ if (e->expr_type != EXPR_CONSTANT || c->expr_type != EXPR_CONSTANT
+ || ( b != NULL && b->expr_type != EXPR_CONSTANT))
return NULL;
if (b != NULL && b->value.logical != 0)
@@ -6335,7 +6336,8 @@ gfc_simplify_verify (gfc_expr *s, gfc_expr *set, gfc_expr *b, gfc_expr *kind)
if (k == -1)
return &gfc_bad_expr;
- if (s->expr_type != EXPR_CONSTANT || set->expr_type != EXPR_CONSTANT)
+ if (s->expr_type != EXPR_CONSTANT || set->expr_type != EXPR_CONSTANT
+ || ( b != NULL && b->expr_type != EXPR_CONSTANT))
return NULL;
if (b != NULL && b->value.logical != 0)
@@ -0,0 +1,35 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/54608
+!
+! Contributed by James Van Buskirk
+!
+module m1
+ implicit none
+ contains
+ subroutine s1(A)
+ logical A
+ integer iscan, iverify
+ character(7), parameter :: tf(2) = ['.FALSE.','.TRUE. ']
+
+ iscan = scan('AA','A',back=A)
+ iverify = verify('xx','A',back=A)
+ if (iscan /= 2 .or. iverify /= 2) call abort ()
+ print *, iverify, iscan
+! write(*,'(a)') 'SCAN test: A = '//trim(tf(iscan)) ! should print true
+! write(*,'(a)') 'VERIFY test: A = '//trim(tf(iverify)) ! should print true
+ end subroutine s1
+end module m1
+
+program p1
+ use m1
+ implicit none
+ logical B
+
+ call s1(.TRUE.)
+end program p1
+
+! { dg-final { scan-tree-dump-times "iscan = _gfortran_string_scan \\(2," 1 "original" } }
+! { dg-final { scan-tree-dump-times "iverify = _gfortran_string_verify \\(2," 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }