This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/59016] f951: internal compiler error: Segmentation fault
- From: "dominiq at lps dot ens.fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 05 Apr 2015 14:37:53 +0000
- Subject: [Bug fortran/59016] f951: internal compiler error: Segmentation fault
- Auto-submitted: auto-generated
- References: <bug-59016-4 at http dot gcc dot gnu dot org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59016
--- Comment #18 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
With an additional filtering on (m == MATCH_ERROR), i.e. with the following
patch, the ICEs are fixed without regression
--- ../_clean/gcc/fortran/decl.c 2015-03-25 14:07:04.000000000 +0100
+++ gcc/fortran/decl.c 2015-04-05 16:17:34.000000000 +0200
@@ -4427,6 +4437,32 @@ ok:
gfc_free_data_all (gfc_current_ns);
cleanup:
+ //<pr59016> in gfc_match_data_decl; cleanup the garbages
+ gfc_symbol *csym = NULL;
+ if ((m == MATCH_ERROR) && current_ts.u.derived
+ && current_ts.u.derived->name)
+ {
+ char iname[129];
+ iname[128] = 0;
+ for (int i = 0; i < 128; i++)
+ {
+ iname[i] = current_ts.u.derived->name[i];
+ if (current_ts.u.derived->name[i] == 0)
+ break;
+ }
+ iname[0] = TOLOWER(iname[0]);
+ for (int i = 0; i < 4; i++)
+ {
+ gfc_find_symbol (iname, NULL, i, &csym) ;
+ if (csym && csym->generic
+ && (csym->generic->sym == current_ts.u.derived))
+ {
+ csym->generic = NULL;
+ break;
+ }
+ }
+ }
+ //</pr59016>
gfc_free_array_spec (current_as);
current_as = NULL;
return m;
Further testing in progress. A few comments:
(1) The patch could probably be simplified,
(2) Its conformity with the GNU coding style has to be checked.
(3) It has to go to fortran@gcc.gnu.org and gcc-patches@gcc.gnu.org for review.