re PR fortran/56520 (Syntax error causes misleading message: "Invalid character in...
authorSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 2 Jul 2015 17:29:04 +0000 (17:29 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Thu, 2 Jul 2015 17:29:04 +0000 (17:29 +0000)
2015-07-02  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/56520
* match.c (gfc_match_name): Special case unary minus and plus.

2015-07-02  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/56520
* gfortran.dg/pr56520.f90: New test.

From-SVN: r225349

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

index b9777272ad9c9d6bb8b2725e3c0a98091fbeb196..fc946c14d97f50f1e01780de769f43e4df3ee492 100644 (file)
@@ -1,3 +1,8 @@
+2015-07-02  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/56520
+       * match.c (gfc_match_name): Special case unary minus and plus.
+
 2015-07-02  Steven G. Kargl   <kargl@gcc.gnu.org>
 
        PR fortran/66545
index e7fe8318164f62aad02a6ecec06f2d4d626934df..c66addb180e1f1d9c9ce0e27fc2142ab99ab046d 100644 (file)
@@ -537,7 +537,10 @@ gfc_match_name (char *buffer)
   c = gfc_next_ascii_char ();
   if (!(ISALPHA (c) || (c == '_' && flag_allow_leading_underscore)))
     {
-      if (!gfc_error_flag_test () && c != '(')
+      /* Special cases for unary minus and plus, which allows for a sensible
+        error message for code of the form 'c = exp(-a*b) )' where an
+        extra ')' appears at the end of statement.  */
+      if (!gfc_error_flag_test () && c != '(' && c != '-' && c != '+')
        gfc_error ("Invalid character in name at %C");
       gfc_current_locus = old_loc;
       return MATCH_NO;
index 9e92aae125c6a7c6f7353838ad689c35dcdc8275..21ba2faf60f25317ba851fb577c85493752e4465 100644 (file)
@@ -1,3 +1,8 @@
+2015-07-02  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/56520
+       * gfortran.dg/pr56520.f90: New test.
+
 2015-07-02  Steven G. Kargl   <kargl@gcc.gnu.org>
 
        PR fortran/66545
diff --git a/gcc/testsuite/gfortran.dg/pr56520.f90 b/gcc/testsuite/gfortran.dg/pr56520.f90
new file mode 100644 (file)
index 0000000..b074b80
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! PR fortran/56520
+!
+program misleading
+    implicit none
+    real a, c
+    a = 1.0
+    c = exp(+a) )    ! { dg-error "Unclassifiable statement" }
+    c = exp(-a) )    ! { dg-error "Unclassifiable statement" }
+    c = exp((a)) )   ! { dg-error "Unclassifiable statement" }
+    c = exp(a) )     ! { dg-error "Unclassifiable statement" }
+    c = exp(a)
+end program misleading