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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2024-01-31
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> My bet you could get the same error with:
> _BitInt(129) i;
> 
> void *
> foo(void)
> {
>   void *ret = 0;
>   ret = (void *)(__SIZETYPE__)(i & 1);
>   return ret;
> }

the above works.

The question is there an extra cast in the IR between _BitInt and void*
required or not?

PHIOPT/match-and-simplify does:
```
phiopt match-simplify trying:
        _2 != 0 ? 1B : 0B
Matching expression match.pd:2274, gimple-match-3.cc:23
Matching expression match.pd:2823, gimple-match-2.cc:35
Matching expression match.pd:2826, gimple-match-1.cc:66
Matching expression match.pd:2833, gimple-match-2.cc:96
Matching expression match.pd:2274, gimple-match-3.cc:23
Applying pattern match.pd:3396, gimple-match-6.cc:2527
Applying pattern match.pd:5327, gimple-match-9.cc:17991

phiopt match-simplify back:
_5 = _2 != 0;
_6 = (void *) _2;
result: _6
```

Notice how there is just cast a between _2 and `void*`.

Reply via email to