On Fri, Apr 19, 2024 at 8:06 AM Bruno Haible <[email protected]> wrote:
> ...
>
> +/* Returns - x, implemented by inverting the sign bit,
> + so that it works also on 'float' NaN values. */
> +_GL_UNUSED static float
> +minus_NaNf (float x)
> +{
> +#if defined __mips__
> + /* The mips instruction neg.s may have no effect on NaNs.
> + Therefore, invert the sign bit using integer operations. */
> + union { unsigned int i; float value; } u;
> + u.value = x;
> + u.i ^= 1U << 31;
> + return u.value;
> +#else
> + return - x;
> +#endif
> +}
>
Accessing the union first though 'value' and then through 'i' may be
undefined behavior. I don't think you can legally access the union through
the inactive member.
Jeff