https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99156
Bug ID: 99156
Summary: __builtin_expect affects the interpretation of its
first operand
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: zhan3299 at purdue dot edu
Target Milestone: ---
I hope it does not bother. I try to refer to a bug in llvm which may also
affect gcc.
Following are copied-and-pasted from the discussion about a similar bug in
clang (https://bugs.llvm.org/show_bug.cgi?id=49239#c3).
Specifically,
> int maybe_vla(int n) {
> goto label;
> int arr[({0;})];
> label:
> return sizeof(arr);
> }
>
> ... is rejected by both Clang and GCC because the statement-expression is not
> an ICE, but
>
> int maybe_vla(int n) {
> goto label;
> int arr[__builtin_expect(({0;}), 0)];
> label:
> return sizeof(arr);
> }
>
> ... is accepted. This seems like a bug in both compilers to me:
> __builtin_expect isn't supposed to affect the interpretation of its first
> operand, and presumably shouldn't be weakening the strict ICE checks.
case 1: https://godbolt.org/z/zWGEfx
case 2: https://godbolt.org/z/bejfcc