aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2015-07-02 17:29:04 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2015-07-02 17:29:04 +0000
commit83eb71f4e4a081e25a5e953acfc8757c5f4e85fb (patch)
treec1ce8d641c402a7a9ef7ff2f282e02c7943f8a26 /gcc
parent70db5f0228d943a1deb37e0210ce6bbc0ac913c6 (diff)
downloadgcc-83eb71f4e4a081e25a5e953acfc8757c5f4e85fb.zip
gcc-83eb71f4e4a081e25a5e953acfc8757c5f4e85fb.tar.gz
gcc-83eb71f4e4a081e25a5e953acfc8757c5f4e85fb.tar.bz2
re PR fortran/56520 (Syntax error causes misleading message: "Invalid character in name")
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/match.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr56520.f9013
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b977727..fc946c1 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index e7fe831..c66addb 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -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;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9e92aae..21ba2fa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..b074b80
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr56520.f90
@@ -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