public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "rguenther at suse dot de" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug lto/40903] LTO doesn't merge common sections properly
Date: Wed, 29 Jul 2009 18:01:00 -0000	[thread overview]
Message-ID: <20090729180123.31293.qmail@sourceware.org> (raw)
In-Reply-To: <bug-40903-10053@http.gcc.gnu.org/bugzilla/>



------- Comment #3 from rguenther at suse dot de  2009-07-29 18:01 -------
Subject: Re:  LTO doesn't merge common sections properly

On Wed, 29 Jul 2009, rth at gcc dot gnu dot org wrote:

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

That's another possibility.  Though it would be only necessary if
you want to support punning between the entries.

Just keeping the decls and uses unmerged will get the exact same
effects as with non-LTO.  Apart from that if there _are_ overlapping
uses those would be disambiguated by the alias-oracle and you'd
eventually get different behavior than from non-LTO mode (though
arguably the behavior is just undefined in that case).

Keeping the decls unmerged is certainly the less invasive approach.

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

That should work indeed.

> I believe there are Fortran common blocks that expect union-like
> semantics as well.

Yes, they are marked as DECL_COMMON as well.

Richard.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40903


  parent reply	other threads:[~2009-07-29 18:01 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-29 13:39 [Bug lto/40903] New: " rguenth at gcc dot gnu dot org
2009-07-29 13:39 ` [Bug lto/40903] " rguenth at gcc dot gnu dot org
2009-07-29 17:56 ` rth at gcc dot gnu dot org
2009-07-29 18:01 ` rguenther at suse dot de [this message]
2009-07-29 18:10 ` rth at gcc dot gnu dot org
2009-07-29 18:18 ` rguenther at suse dot de
2009-07-29 19:20 ` rguenth at gcc dot gnu dot org
2009-07-30 16:24 ` rguenth at gcc dot gnu dot org
2009-07-30 16:25 ` rguenth at gcc dot gnu dot org
2009-07-30 16:25 ` rguenth at gcc dot gnu dot org
2009-08-03  8:46 ` rguenth at gcc dot gnu dot org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090729180123.31293.qmail@sourceware.org \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).