[m-dev.] promoted ROTDs
Zoltan Somogyi
zoltan.somogyi at runbox.com
Wed Jul 25 13:30:01 AEST 2018
On Wed, 25 Jul 2018 11:08:27 +1000, Peter Wang <novalazy at gmail.com> wrote:
> On Wed, 25 Jul 2018 02:47:22 +0200 (CEST), "Zoltan Somogyi" <zoltan.somogyi at runbox.com> wrote:
> > I added -Werror to the .mgnuc_copts file in all the directories
> > (runtime, library, compiler etc) and got a clean bootcheck in hlc.gc.
> > However, the bootcheck in asm_fast.gc was anything but clean.
> > First, you get errors (originally warnings) in mercury_context.c
> > for its use of the system-provided FD_SET macro. After several layers,
> > it expands to a conditional expression that contains a call to a function
> > with a __warnattr. The call should never be made (the condition *should*
> > prevent it), but gcc either doesn't know this or doesn't care. I have found
> > no way to shut this off.
>
> What is the warning?
mercury_context.c: In function ‘MR_check_pending_contexts.constprop.0’:
mercury_context.c:1632:13: warning: call to ‘__fdelt_warn’ declared with attribute warning: bit outside of fd_set selected [enabled by default]
mercury_context.c:1638:13: warning: call to ‘__fdelt_warn’ declared with attribute warning: bit outside of fd_set selected [enabled by default]
mercury_context.c:1644:13: warning: call to ‘__fdelt_warn’ declared with attribute warning: bit outside of fd_set selected [enabled by default]
mercury_context.c:1680:20: warning: call to ‘__fdelt_warn’ declared with attribute warning: bit outside of fd_set selected [enabled by default]
mercury_context.c:1682:20: warning: call to ‘__fdelt_warn’ declared with attribute warning: bit outside of fd_set selected [enabled by default]
mercury_context.c:1684:20: warning: call to ‘__fdelt_warn’ declared with attribute warning: bit outside of fd_set selected [enabled by default]
The calls to FD_SET and FD_ISSET expand to __FD_ELT(d) in /usr/include/bits/select2.h,
which on my laptop looks like this:
/* Helper functions to issue warnings and errors when needed. */
extern long int __fdelt_chk (long int __d);
extern long int __fdelt_warn (long int __d)
__warnattr ("bit outside of fd_set selected");
#undef __FD_ELT
#define __FD_ELT(d) \
__extension__ \
({ long int __d = (d); \
(__builtin_constant_p (__d) \
? (0 <= __d && __d < __FD_SETSIZE \
? (__d / __NFDBITS) \
: __fdelt_warn (__d)) \
: __fdelt_chk (__d)); })
I don't know what the ".constprop.0" part of the function name is about.
Zoltan.
More information about the developers
mailing list