https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95826
anlauf at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2020-06-22 Priority|P3 |P4 CC| |anlauf at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |anlauf at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from anlauf at gcc dot gnu.org --- This is fixed by: diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index c8a98537e87..fd4e1dc2322 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -4095,7 +4095,7 @@ match gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag) { /* Provide sufficient space to hold "pdtsymbol". */ - char name[GFC_MAX_SYMBOL_LEN + 1 + 3]; + char *name = XALLOCAVEC (char, GFC_MAX_SYMBOL_LEN + 1); gfc_symbol *sym, *dt_sym; match m; char c; @@ -4286,8 +4286,10 @@ gfc_match_decl_type_spec (gfc_typespec *ts, int implicit_flag) gcc_assert (!sym->attr.pdt_template && sym->attr.pdt_type); ts->u.derived = sym; const char* lower = gfc_dt_lower_string (sym->name); - size_t len = strnlen (lower, sizeof (name)); - gcc_assert (len < sizeof (name)); + size_t len = strlen (lower); + /* Reallocate with sufficient size. */ + if (len > GFC_MAX_SYMBOL_LEN) + name = XALLOCAVEC (char, len + 1); memcpy (name, lower, len); name[len] = '\0'; }