This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/40903] LTO doesn't merge common sections properly
- From: "rth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 Jul 2009 17:56:00 -0000
- Subject: [Bug lto/40903] LTO doesn't merge common sections properly
- References: <bug-40903-10053@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from rth at gcc dot gnu dot org 2009-07-29 17:55 -------
I believe a "proper" way to handle this, preserving the semantics that
the linker provides, is to transform this into
union {
double _1;
int _2;
} i;
and replace occurrences with i._1, i._2, etc.
Perhaps a more interesting example to look at, besides the arguable
coding errors in SPEC, is the usages
core_cia.c:} saved_config __attribute((common));
core_t2.c:} t2_saved_config __attribute((common));
core_titan.c:} saved_config[4] __attribute__((common));
core_tsunami.c:} saved_config[2] __attribute__((common));
sys_sio.c:} saved_config __attribute((common));
in linux/arch/alpha/kernel/. Each usage is for a different hardware
type, and therefore mutually exclusive.
I believe there are Fortran common blocks that expect union-like
semantics as well.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40903