https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112701
Bug ID: 112701 Summary: wrong type inference for ternary operator in preprocessing context Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: preprocessor Assignee: unassigned at gcc dot gnu.org Reporter: amonakov at gcc dot gnu.org Target Milestone: --- In the following snippet, the result of the ternary operator is (-1, cast to an unsigned type), so the comparison yields false, and both conditional inclusions must come out empty: #if (0 ? 0u : -1) < 0 int foo = (0 ? 0u : -1) < 0; #endif #if (0 ? 0/0u : -1) < 0 int bar = (0 ? 0/0u : -1) < 0; #endif However, GCC emits: bar: .zero 4 So clearly the evaluation of the second expression is inconsistent between preprocessing context (where it incorrectly yields 1) vs. initializer context (where it is zero as it should be, as seen from the resulting asm).