aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/decl.c
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2013-01-04 09:59:47 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2013-01-04 09:59:47 +0100
commit576f6da6398293734bac71fd55bc7aa07c521dbf (patch)
treeb7e6b66499bc59fda10aad5210c9e60158b25d48 /gcc/fortran/decl.c
parent15115f7aa839855a7f30f83b32070cee7f063c6d (diff)
downloadgcc-576f6da6398293734bac71fd55bc7aa07c521dbf.zip
gcc-576f6da6398293734bac71fd55bc7aa07c521dbf.tar.gz
gcc-576f6da6398293734bac71fd55bc7aa07c521dbf.tar.bz2
re PR fortran/55763 (Issues with some simpler CLASS(*) programs)
2014-01-04 Tobias Burnus <burnus@net-b.de> PR fortran/55763 * decl.c (gfc_match_null): Parse and reject MOLD. 2014-01-04 Tobias Burnus <burnus@net-b.de> PR fortran/55763 * gfortran.dg/null_7.f90: New. From-SVN: r194886
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r--gcc/fortran/decl.c38
1 files changed, 33 insertions, 5 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index 5ed8388..fc86efb 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -1,5 +1,6 @@
/* Declaration statement matcher
- Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+ Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+ 2012, 2013
Free Software Foundation, Inc.
Contributed by Andy Vaught
@@ -1671,11 +1672,31 @@ match
gfc_match_null (gfc_expr **result)
{
gfc_symbol *sym;
- match m;
+ match m, m2 = MATCH_NO;
- m = gfc_match (" null ( )");
- if (m != MATCH_YES)
- return m;
+ if ((m = gfc_match (" null ( )")) == MATCH_ERROR)
+ return MATCH_ERROR;
+
+ if (m == MATCH_NO)
+ {
+ locus old_loc;
+ char name[GFC_MAX_SYMBOL_LEN + 1];
+
+ if ((m2 = gfc_match (" null (", name)) != MATCH_YES)
+ return m2;
+
+ old_loc = gfc_current_locus;
+ if ((m2 = gfc_match (" %n ) ", name)) == MATCH_ERROR)
+ return MATCH_ERROR;
+ if (m2 != MATCH_YES
+ && ((m2 = gfc_match (" mold = %n )", name)) == MATCH_ERROR))
+ return MATCH_ERROR;
+ if (m2 == MATCH_NO)
+ {
+ gfc_current_locus = old_loc;
+ return MATCH_NO;
+ }
+ }
/* The NULL symbol now has to be/become an intrinsic function. */
if (gfc_get_symbol ("null", NULL, &sym))
@@ -1694,6 +1715,13 @@ gfc_match_null (gfc_expr **result)
*result = gfc_get_null_expr (&gfc_current_locus);
+ /* Invalid per F2008, C512. */
+ if (m2 == MATCH_YES)
+ {
+ gfc_error ("NULL() initialization at %C may not have MOLD");
+ return MATCH_ERROR;
+ }
+
return MATCH_YES;
}