On April 5, 2017 9:04:00 AM PDT, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>Joe Conway <mail@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
ofthat in the tree. There's a flag to warn regardless.
Andres
--
Sent from my Android device with K-9 Mail. Please excuse my brevity.