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