OSDN Git Service

2012-09-17 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 Sep 2012 17:53:37 +0000 (17:53 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 Sep 2012 17:53:37 +0000 (17:53 +0000)
        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: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191403 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/scan_2.f90 [new file with mode: 0644]

index 3d7e009..3552ffc 100644 (file)
@@ -1,3 +1,9 @@
+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  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/54285
index 5aa2704..1c9dff2 100644 (file)
@@ -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)
index f978693..6bebf2e 100644 (file)
@@ -1,4 +1,9 @@
-2012-09-14  Jason Merrill  <jason@redhat.com>
+2012-09-17  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/54608
+       * gfortran.dg/scan_2.f90: New.
+
+2012-09-17  Jason Merrill  <jason@redhat.com>
 
        PR c++/53661
        * g++.dg/init/aggr9.C: New.
diff --git a/gcc/testsuite/gfortran.dg/scan_2.f90 b/gcc/testsuite/gfortran.dg/scan_2.f90
new file mode 100644 (file)
index 0000000..1e68130
--- /dev/null
@@ -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" } }