wheatman wrote:

@AaronBallman I am a little confused about what is the correct behavior for one 
the the cases in the test file for c.
```cpp
enum PR4515 {PR4515a=1u,PR4515b=(PR4515a-2)/2};
int CheckPR4515[PR4515b==0?1:-1];
```
At present since everything is ints this works fine, but some things are not 
clear to me once the enum is allowed to be an unsigned type
https://godbolt.org/z/8bfr8s3n5

```cpp
enum PR4515 {PR4515a=1u,PR4515b=(PR4515a-2)/2};
 auto a = PR4515a;
 auto b = PR4515b;
 auto c = (1 - 2)/2;
 auto d = (1u - 2)/2;
 auto e = (PR4515a-2)/2;
```
values
```
a:
        .long   1                               # 0x1

b:
        .long   0                               # 0x0

c:
        .long   0                               # 0x0

d:
        .long   2147483647                      # 0x7fffffff

e:
        .long   0                               # 0x0
```


specifically around the value for `PR4515b=(PR4515a-2)/2` 
if `PR4515a` has type unsigned int, then the value of this expression is 
2147483647 see `d`, but if it has type int then it has value of 0 see `c` which 
is the expected value for the test.  However, with the new change the enum type 
would be unsigned since it was specified as unsigned, which I believe is the 
new behavior.  

https://github.com/llvm/llvm-project/pull/78742
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to