<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/139536>139536</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Handle comma operator for implicit int->enum conversions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
asmok-g
</td>
</tr>
</table>
<pre>
[PR](https://github.com/llvm/llvm-project/pull/137658) introduces a new diagnostic group to diagnose implicit casts from int to an enumeration type. In C, this is valid, but it is not compatible with C++.
However, in a case like the following
```
void free ();
typedef enum {REG_EBRACE, REG_BADBR} reg_errcode_t;
typedef struct {int *stack;} compile_stack_type;
reg_errcode_t byte_regex_compile () {
const char *p;
const char *pend;
compile_stack_type compile_stack;
return (free (compile_stack.stack), p == pend ? REG_EBRACE : REG_BADBR));
}
```
cmd: `clang -Wimplicit-int-enum-cast -c pre.i`
The warning is emitted.
```
pre.i:8:39: warning: implicit conversion from 'int' to enumeration type 'reg_errcode_t' is invalid in C++ [-Wimplicit-int-enum-cast]
8 | return (free (compile_stack.stack), p == pend ? REG_EBRACE : REG_BADBR));
| ~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pre.i:8:74: error: expected ';' after return statement
8 | return (free (compile_stack.stack), p == pend ? REG_EBRACE : REG_BADBR));
| ^
| ;
1 warning and 1 error generated.
```
While there actually is an implicit conversion happening in C, it's not happening in C++. The warning is emitted for cpp compatibility, so it should not be emitted in this case.
[A fix](https://github.com/llvm/llvm-project/pull/138752) was introduced for the case:
```
void free ();
typedef enum {REG_EESCAPE} reg_errcode_t;
typedef struct {int *stack;} compile_stack_type;
reg_errcode_t byte_regex_compile () {
compile_stack_type compile_stack;
return (free (compile_stack.stack), REG_EESCAPE);
}
```
But we probably need a more generic fix maybe ?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMls-P4jYUx_8ac3kCBYcQOHAIA3R7W00r7RE59kvirmNHtgPDZf_26iUwLOy2VVv1BxppwPb76c_7JiIEXVvEDcu2LNtNRB8b5zcitO7ztJ6UTl1o6-Mry3aMr5oYu8DSgvED44dax6YvZ9K1jB-MOd3-TTvvfkEZGT90vTGMH-ZpvsxWjK9B2-id6iUGEGDxDEqL2roQtYTau76D6G5rCLrtjJY6ghQhBqi8a8kDnREW0PYtehG1sxAvHc7gRwsvjL9AbHQAHeAkjFa0UPYRdKQl6yJI13Yi6tIgnHVsyGbL-HbGkoIlxQd3xhN6MtMWBMVGMPozQmwQKmeMO2tb0-Flcv1LipPTCiqPCIxTpSzdsqSgtBRWQ6rA8u3r_ofjfvtavOzJPf3aFrvtK8t34LE-ovfSKTzGR-sQfS8j2VPxjBchCvmZzuS7oRht8DisHclkNH7wB-Ul4tFjjW_Hq8E1T_LKkgJAOhsiyEZ4itCNTr5ZRqvuO8-BH5du5zzG3lsKd2vPw7HZeJivqSMdsHTH0h1QIGDpAe4dA5YWX7WMDKjLQBeR756uQ7aKjrNlIo2wNUw_3ViaahundB9TggqmEjqPMz2a_dwgnIW32tYEC7Y6RlSzJ-ejQVqsWFqka4pztaGvd2adPaEPROcALuO5tpHxnPB9Zpd2HwngOWWg7cAwkXilFFi2_a1qaEqp5QArYPkL_CvNh-FD4b4Ay_Zf_ujz1MB8Qa7Re-eHL28dyoiKGkIE8RxEFdHfKglRRGzRxv-gUIrEsv1DzSPl83dqhFUwH8uBGi3d8bcAsaT41NAMxgY9gpCxF8Zc6MKF_S5Bjeg6HLG8apwmREY9e94cxAy-zzJUzoPsuncR1EbHCzkMjiQyNK43anBb4ruRtqOmkhbOYKyAZdsCKv32dx8NqzzjJERnEe6PhzFPElwKOYzyX9bb_U8vxcf9_0Bj_wnF_LrC39FDlhTbPsIZofOuFKW5gEVUIKB1HkdStaTrhFZcSqSpmKhNqtbpWkxwM88XeZIlaZZNmo1SyTLnVZWkeVIJVDxfZVJkpVRcVrwSE73hCc-SbM7n80WWZbNlNpeLdI0qwdU6FYItEmyFNjOCYuZ8PdEh9LiZp-ssXU6MKNGE4aWEc3pLGHYZ5_SO4jcDSWVfB7ZIjA4x3N1EHQ1uPgirzNDcVoDraAidH4h6ny3STZbuB1DucxYmvTebP83ykF4YaB7yP234rwEAAP__9GL2Iw">