From: Harald Anlauf Date: Sun, 24 May 2020 19:35:04 +0000 (+0200) Subject: PR fortran/95106 - truncation of long symbol names with EQUIVALENCE X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d176184d98a00ab379ae5959aed1908a79995e6b;p=gcc.git PR fortran/95106 - truncation of long symbol names with EQUIVALENCE For long module names, the generated name-mangled symbol was truncated, leading to bogus warnings about COMMON block mismatches. Provide sufficiently large temporaries. gcc/fortran/ 2020-05-24 Harald Anlauf PR fortran/95106 * trans-common.c (gfc_sym_mangled_common_id): Enlarge temporaries for name-mangling. gcc/testsuite/ 2020-05-24 Harald Anlauf PR fortran/95106 * gfortran.dg/equiv_11.f90: New test. --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 55d5dae3cf5..7ddc2b81945 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2020-05-24 Harald Anlauf + + PR fortran/95106 + * trans-common.c (gfc_sym_mangled_common_id): Enlarge temporaries + for name-mangling. + 2020-05-23 Thomas Koenig PR libfortran/95191 diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c index bf163bc4f52..3775a8bea74 100644 --- a/gcc/fortran/trans-common.c +++ b/gcc/fortran/trans-common.c @@ -242,8 +242,9 @@ static tree gfc_sym_mangled_common_id (gfc_common_head *com) { int has_underscore; - char mangled_name[GFC_MAX_MANGLED_SYMBOL_LEN + 1]; - char name[GFC_MAX_SYMBOL_LEN + 1]; + /* Provide sufficient space to hold "symbol.eq.1234567890__". */ + char mangled_name[GFC_MAX_MANGLED_SYMBOL_LEN + 1 + 16]; + char name[GFC_MAX_SYMBOL_LEN + 1 + 16]; /* Get the name out of the common block pointer. */ strcpy (name, com->name); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80fd33dac18..2710d2ee490 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-05-24 Harald Anlauf + + PR fortran/95106 + * gfortran.dg/equiv_11.f90: New test. + 2020-05-23 Patrick Palka PR c++/94038 diff --git a/gcc/testsuite/gfortran.dg/equiv_11.f90 b/gcc/testsuite/gfortran.dg/equiv_11.f90 new file mode 100644 index 00000000000..0f4a1ab5c32 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/equiv_11.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-fsecond-underscore" } +! PR fortran/95106 + +module m2345678901234567890123456789012345678901234567890123456789_123 + implicit none + real :: a(4), u(3,2) + real :: b(4), v(4,2) + equivalence (a(1),u(1,1)), (b(1),v(1,1)) +end +! { dg-final { scan-assembler {m2345678901234567890123456789012345678901234567890123456789_123.eq.0__} } } +! { dg-final { scan-assembler {m2345678901234567890123456789012345678901234567890123456789_123.eq.1__} } }