aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2018-03-06 19:05:48 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2018-03-06 19:05:48 +0000
commit284ee475e1c239b9d74bd2c5fc7dde457c9db4f7 (patch)
treee7ee124f6dfec76895093567e821277038a6f4dc /gcc
parent2128896318a0e71a002566d2150a54dd6a44765d (diff)
downloadgcc-284ee475e1c239b9d74bd2c5fc7dde457c9db4f7.zip
gcc-284ee475e1c239b9d74bd2c5fc7dde457c9db4f7.tar.gz
gcc-284ee475e1c239b9d74bd2c5fc7dde457c9db4f7.tar.bz2
re PR fortran/56667 (Syntax error causes misleading message: "Expected PARAMETER symbol in complex constant")
2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/56667 * primary.c (match_sym_complex_part): Give the matcher for an implied do-loop a chance to run. 2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/56667 * gfortran.dg/implied_do_2.f90: New test. * gfortran.dg/coarray_8.f90: Update for new error message. From-SVN: r258281
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/primary.c18
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_8.f904
-rw-r--r--gcc/testsuite/gfortran.dg/implied_do_2.f907
5 files changed, 37 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 9a5b567..f5b990d 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/56667
+ * primary.c (match_sym_complex_part): Give the matcher for an implied
+ do-loop a chance to run.
+
2018-03-03 Harald Anlauf <anlauf@gmx.de>
PR fortran/71085
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index d889ed1..702010a 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -1248,8 +1248,22 @@ match_sym_complex_part (gfc_expr **result)
if (sym->attr.flavor != FL_PARAMETER)
{
- gfc_error ("Expected PARAMETER symbol in complex constant at %C");
- return MATCH_ERROR;
+ /* Give the matcher for implied do-loops a chance to run. This yields
+ a much saner error message for "write(*,*) (i, i=1, 6" where the
+ right parenthesis is missing. */
+ char c;
+ gfc_gobble_whitespace ();
+ c = gfc_peek_ascii_char ();
+ if (c == '=' || c == ',')
+ {
+ m = MATCH_NO;
+ }
+ else
+ {
+ gfc_error ("Expected PARAMETER symbol in complex constant at %C");
+ m = MATCH_ERROR;
+ }
+ return m;
}
if (!sym->value)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index edce5a5..46a329a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-06 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/56667
+ * gfortran.dg/implied_do_2.f90: New test.
+ * gfortran.dg/coarray_8.f90: Update for new error message.
+
2018-03-06 Jakub Jelinek <jakub@redhat.com>
PR inline-asm/84683
diff --git a/gcc/testsuite/gfortran.dg/coarray_8.f90 b/gcc/testsuite/gfortran.dg/coarray_8.f90
index db6eb6c..060f941 100644
--- a/gcc/testsuite/gfortran.dg/coarray_8.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_8.f90
@@ -145,7 +145,7 @@ end module mmm4
subroutine tfgh()
integer :: i(2)
- DATA i/(i, i=1,2)/ ! { dg-error "Expected PARAMETER symbol" }
+ DATA i/(i, i=1,2)/ ! { dg-error "Syntax error in DATA" }
do i = 1, 5 ! { dg-error "cannot be an array" }
end do ! { dg-error "Expecting END SUBROUTINE" }
end subroutine tfgh
@@ -153,7 +153,7 @@ end subroutine tfgh
subroutine tfgh2()
integer, save :: x[*]
integer :: i(2)
- DATA i/(x, x=1,2)/ ! { dg-error "Expected PARAMETER symbol" }
+ DATA i/(x, x=1,2)/ ! { dg-error "Syntax error in DATA" }
do x = 1, 5 ! { dg-error "cannot be a coarray" }
end do ! { dg-error "Expecting END SUBROUTINE" }
end subroutine tfgh2
diff --git a/gcc/testsuite/gfortran.dg/implied_do_2.f90 b/gcc/testsuite/gfortran.dg/implied_do_2.f90
new file mode 100644
index 0000000..5078ac8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/implied_do_2.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! PR fortran/56667
+program error_message
+ implicit none
+ integer :: ir
+ write(*,*) ( ir, ir = 1,10 ! { dg-error "Expected a right parenthesis" }
+end program error_message