The GET_VAL macro in src/builtin.cmod is invoked like this:

> GET_VAL (true)
> GET_VAL (false)
> GET_VAL (null)

If you happen to include <stdbool.h>, the macro expansion might result
in these functions:

    get_val_1
    get_val_0
    get_val_null

This is because true is defined as 1 and false as 0.

This isn't a big issue for two reasons:

 - src/builtin.cmod does not actually invoke <stdbool.h>
 - as far as I can see, nothing actually uses get_val_true and
   get_val_false (but I may be overlooking something)

This could be fixed by ## and # directly in the GET_VAL macro, instead
of going via PIKE_CONCAT and TOSTR.  Of course, that breaks on older
compilers that don't support ## and #; I don't know if the Pike
community still cares about them.

One could also argue that "if it ain't broke, don't fix it".  That is
a valid point of view.  But the code is a bit fragile; sooner or later
somebody might add <stdbool.h> without that it affects the GET_VAL
expansion.
  • The GET_VAL macro ... ceder (-) Per Cederqvist @ Pike (-) developers forum
    • The GET_VAL m... Martin Nilsson (Coppermist) @ Pike (-) developers forum
      • The GET_V... ceder (-) Per Cederqvist @ Pike (-) developers forum

Reply via email to