[PATCH B2/2] Use builtin_unreachable in assert
Marek Polacek
polacek@redhat.com
Mon Mar 2 17:28:00 GMT 2015
On Mon, Mar 02, 2015 at 09:18:31AM -0800, Richard Henderson wrote:
> On 03/01/2015 11:43 PM, Mike Frysinger wrote:
> > On 09 Jan 2015 10:16, Richard Henderson wrote:
> >> Finally, use __builtin_unreachable to tell the compiler about
> >> impossible paths.
> >
> > i'm not sure this is the way to go. the expectation (as required by POSIX)
> > is that you're guaranteed there are no side-effects when NDEBUG is applied
> > to assert. by using __builtin_unreachable, that is no longer the case.
>
> I wonder if, during the gcc 6 development cycle, we should experiment with a
> __builtin_side_effects_p, akin to __builtin_constant_p. Then we could still
> follow POSIX re no side effects but even in the external context provide the
> information derivable from __builtin_unreachable. I.e.
>
> #define assert(X) \
> (__builtin_side_effects_p (X) || !(X) ? 0 : __builtin_unreachable ())
Tom wrote a patch implementing something like that a while back (for C
only) <https://gcc.gnu.org/ml/gcc-patches/2014-04/msg01984.html>, but
the patch never made it in. Maybe I could revive and adjust it during
gcc 6 stage 1 if it would help you.
Marek
More information about the Libc-alpha
mailing list