decl.c (gfc_match_structure_decl): Make gfc_structure_id static.
authorFritz Reese <fritzoreese@gmail.com>
Tue, 23 Aug 2016 19:33:46 +0000 (19:33 +0000)
committerFritz Reese <foreese@gcc.gnu.org>
Tue, 23 Aug 2016 19:33:46 +0000 (19:33 +0000)
2016-08-23  Fritz Reese  <fritzoreese@gmail.com>

gcc/fortran/
* decl.c (gfc_match_structure_decl): Make gfc_structure_id static.

gcc/testsuite/gfortran.dg/
* dec_structure_12.f90: New testcase.

From-SVN: r239709

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

index d3273a8d99c0249beaaf22ef3c80960e0b51ac12..6dc44e6f035801c7b04e09dc5846ade0868aecf5 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-23  Fritz Reese  <fritzoreese@gmail.com>
+
+       * decl.c (gfc_match_structure_decl): Make gfc_structure_id static.
+
 2016-08-23  Fritz Reese  <fritzoreese@gmail.com>
 
        * interface.c (compare_components): Fix typo in name check conditional.
index ce5ebb763bae703c4570f076c41e7367a41bc1a5..ce7254f09c8e1448e2fd6c1240687d4e0415f9f5 100644 (file)
@@ -8473,7 +8473,7 @@ match
 gfc_match_structure_decl (void)
 {
     /* Counter used to give unique internal names to anonymous structures.  */
-    int gfc_structure_id = 0;
+    static unsigned int gfc_structure_id = 0;
     char name[GFC_MAX_SYMBOL_LEN + 1];
     gfc_symbol *sym;
     match m;
index 8dcf3d761ed1d378f212cefabf18fb45bb6153f6..4c45e35f50b1ced7beaad91e9234b639b2850af6 100644 (file)
@@ -1,3 +1,7 @@
+2016-08-23  Fritz Reese  <fritzoreese@gmail.com>
+
+       * gfortran.dg/dec_structure_12.f90: New testcase.
+
 2016-08-23  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        * gcc.target/s390/insv-1.c: Fix test when running with -m31.
diff --git a/gcc/testsuite/gfortran.dg/dec_structure_12.f90 b/gcc/testsuite/gfortran.dg/dec_structure_12.f90
new file mode 100644 (file)
index 0000000..b6cc5aa
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do "compile" }
+! { dg-options "-fdec-structure" }
+!
+! Test a regression where multiple anonymous structures failed to
+! receive unique internal names.
+!
+
+implicit none
+
+structure /s/
+
+  structure record0 ! (2)
+    integer i
+  end structure
+
+  structure record1 ! regression: Type definition was already defined at (2)
+    real r
+  end structure
+
+end structure
+
+record /s/ var
+
+var.record0.i = 0
+var.record1.r = 0.0
+
+end