This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH] proposed fix for bug # 61144
- From: Rich Felker <dalias at libc dot org>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: Jan Hubicka <hubicka at ucw dot cz>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 21 May 2014 23:59:42 -0400
- Subject: Re: [PATCH] proposed fix for bug # 61144
- Authentication-results: sourceware.org; auth=none
- References: <20140521015948 dot GA21600 at brightrain dot aerifal dot cx> <CAFiYyc0qj1Yc+VDchBYqsocT4aoyL01CMEB2LmzV3-=TcnHmBg at mail dot gmail dot com>
On Wed, May 21, 2014 at 11:17:53AM +0200, Richard Biener wrote:
> On Wed, May 21, 2014 at 3:59 AM, Rich Felker <firstname.lastname@example.org> wrote:
> > Bug # 61144 is a regression in 4.9.0 that breaks building of musl libc
> > due to aggressive and semantically-incorrect constant folding of weak
> > aliases. The attached patch seems to fix the issue. A weak alias
> > should never be a candidate for constant folding because it may always
> > be replaced by a strong definition from another translation unit.
> > For details see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61144
> > I do not have a copyright assignment on file but this patch should be
> > sufficiently trivial not to require it.
> Please add a testcase. Also I wonder why it isn't better to generalize
How should a testcase be done? On the PR there's a testcase that shows
the problem in the generated code, but no automated check for it.
Testing this is actually a bit of a pain unless you're allowed to run
the generated program.
> /* Variables declared 'const' without an initializer
> have zero as the initializer if they may not be
> overridden at link or run time. */
> if (!DECL_INITIAL (real_decl)
> && (DECL_EXTERNAL (decl) || decl_replaceable_p (decl)))
> return error_mark_node;
Indeed, this may be a better place to do it as long as
decl_replaceable_p reliably returns true for weak aliases. If so, the
following might work:
if ((!DECL_INITIAL (real_decl) && DECL_EXTERNAL (decl))
|| decl_replaceable_p (decl)))
On the other hand, I might just separate it out into two separate if
statements since they should probably have their own comments.
I would appreciate help from anyone familiar with GCC internals on
getting this right.