This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch, fortran] PR24227 initialized symbol in COMMON: Missing checks


Jerry DeLisle wrote:
Tobias Burnus wrote:
Jerry DeLisle wrote:
This patch adds back a simplified error message and checks to see if
the symbol is in BLOCK DATA or not.  Allowed if -std=gnu.
Regression tested on x86-64.
OK for trunk?

+ if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE) + goto cleanup;
[...]
+
if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE)
goto cleanup;




The double statement above was there before. I thought it was odd also, but put it back the way it was before. I will take it out and test.


Adding in_common twice looks wrong.


Additionally, the following variant using DATA compiles without giving an error:

program main
 implicit none
 integer, parameter:: nmin = 2
 character(len=3) :: emname(nmin)
 data emname/'bar','baz'/
 common/dd/emname ! { dg-error "can only be COMMON in BLOCK DATA" }
end program main

I will have a look later this evening.


Attached is a revised patch. Regression tested on x86-64. I also compiled all of the Polyhedron test cases, NIST, and LAPACK.


OK for trunk?

Jerry
Index: match.c
===================================================================
--- match.c	(revision 130417)
+++ match.c	(working copy)
@@ -2783,6 +2783,16 @@ gfc_match_common (void)
 	      goto cleanup;
 	    }
 
+	  if (((sym->value != NULL && sym->value->expr_type != EXPR_NULL)
+	       || sym->attr.data) && gfc_current_state () != COMP_BLOCK_DATA)
+	    {
+	      if (gfc_notify_std (GFC_STD_GNU, "Initialized symbol '%s' at %C "
+					       "can only be COMMON in "
+					       "BLOCK DATA", sym->name)
+		  == FAILURE)
+		goto cleanup;
+	    }
+
 	  if (gfc_add_in_common (&sym->attr, sym->name, NULL) == FAILURE)
 	    goto cleanup;
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]