This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 5/5] Remove const attribute on get_log2
- From: Peter Collingbourne <pcc at google dot com>
- To: Richard Henderson <rth at twiddle dot net>
- Cc: libc-alpha at sourceware dot org
- Date: Mon, 13 May 2013 19:26:16 +0200
- Subject: Re: [PATCH 5/5] Remove const attribute on get_log2
- References: <1368459372-2415-1-git-send-email-pcc at google dot com> <1368459372-2415-6-git-send-email-pcc at google dot com> <519114FF dot 9030501 at twiddle dot net>
On Mon, May 13, 2013 at 6:29 PM, Richard Henderson <rth@twiddle.net> wrote:
>
> On 05/13/2013 08:36 AM, Peter Collingbourne wrote:
> > This function is not const, as it can modify log2_m and log2_m_inited.
>
> So? The const attribute gets gcc to treat it as const, which means
> that the call of get_log2 can be deleted if unused, or the call moved
> outside of a loop. IMO this would be a bug in LLVM if it errors for this.
Those aren't necessarily the only optimisations that can be performed on a
const function call. The issue in this particular case is that LLVM's
optimiser will
replace the call to the function with a reference to its return value, log2_m
(thereby skipping its initialisation). Given that the source code is
lying to the
compiler about the constness of the function, this isn't entirely unreasonable.
While one could in theory detect such cases in LLVM, I consider it to be a bug
in glibc that it is lying to the compiler.
> That said, you may be right that the attribute isn't useful, as there
> may be no case within this file where the const distinction is useful.
That's true.
Peter