AaronBallman wrote:

> @AaronBallman I am a little confused about what is the correct behavior for 
> one the the cases in the test file for c.
> 
> ```c++
> 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
> 
> ```c++
> 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.

I think the enumeration constant type is `int` and not `unsigned int`, per 
6.7.2.2p12 bullet 4: `int, if given explicitly with = and the value of the 
integer constant expression is representable by an int; or,`

```
enum PR4515 {
  PR4515a=1u,             // has type int per 6.7.2.2p12 bullet 4 because 1 is 
representable by an int
  PR4515b=(PR4515a-2)/2   // has type int per 6.7.2.2p12 bullet 4 because (1 - 
2) / 2 is representable by an int
};
```
WDYT?

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