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