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

Reply via email to