On April 5, 2017 9:04:00 AM PDT, Tom Lane <t...@sss.pgh.pa.us> wrote: >Joe Conway <m...@joeconway.com> writes: >> On 04/04/2017 09:58 PM, Tom Lane wrote: >>> Another issue is whether you won't get compiler complaints about >>> redefinition of the "true" and "false" macros. But those would >>> likely only be warnings, not flat-out errors. > >> I have not been able to generate warnings or errors around "true" and >> "false". > >Interesting. Poking at it on a Fedora 25 machine, I also see a >bool-type-related warning in sepgsql/label.c, but nothing around macro >redefinitions. In particular, I find that > >#include "postgres.h" > >#include <stdbool.h> > >is completely silent. On the other hand, > >#include "postgres.h" > >#define bool _Bool >#define true 1 >#define false 0 > >generates the warnings I expected about "true" and "false" being >redefined. Which is damn odd, because I copied-and-pasted those >lines out of >/usr/lib/gcc/x86_64-redhat-linux/6.3.1/include/stdbool.h > >Conclusion: Fedora's gcc is playing fast and loose somehow with the >command "#include <stdbool.h>"; that does not include the file >you'd think it does, it does something magic inside the compiler. >The magic evidently includes not complaining about duplicate macro >definitions for true and false. > >Anyway, I'd recommend that we do something like > > #include <selinux/label.h> >+ >+/* >+ * <selinux/label.h> includes <stdbool.h>, which creates an >incompatible >+ * #define for bool. Get rid of that so we can use our own typedef. >+ * (For obscure reasons, the "true" and "false" macros don't cause >issues.) >+ */
GCC generally doesn't warn about macro redefinitions, if both definitions are equivalent. IIRC we have some examples of that in the tree. There's a flag to warn regardless. Andres -- Sent from my Android device with K-9 Mail. Please excuse my brevity. -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers