https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119738

            Bug ID: 119738
           Summary: __builtin_choose_expr(__builtin_constant_p(...), ...,
                    ...) is sometimes incorrect
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: regis.duchesne at broadcom dot com
  Target Milestone: ---

Compiling this code:

===
static inline int foo(int v) { return __builtin_constant_p(v); }
int fooCaller(void) { return foo(42); }

static inline int bar(int v) { return
__builtin_choose_expr(__builtin_constant_p(v), 1, 0); }
int barCaller(void) { return bar(42); }
===

with gcc 15 (targeting x86_64 or arm64) and option -O produces a barCaller
function which returns 0 instead of the expected 1.
(see it in action at https://godbolt.org/z/Tqb9rhfzv ).

This problem might be a duplicate of bug 19449 or bug 79482, I could not tell.

Reply via email to