diff options
author | Tobias Burnus <burnus@net-b.de> | 2013-01-04 09:59:47 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2013-01-04 09:59:47 +0100 |
commit | 576f6da6398293734bac71fd55bc7aa07c521dbf (patch) | |
tree | b7e6b66499bc59fda10aad5210c9e60158b25d48 /gcc/fortran/decl.c | |
parent | 15115f7aa839855a7f30f83b32070cee7f063c6d (diff) | |
download | gcc-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.c | 38 |
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; } |