[Bug lto/40903] LTO doesn't merge common sections properly

rth at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Wed Jul 29 17:56:00 GMT 2009

------- 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.



More information about the Gcc-bugs mailing list