shafik added a comment.

In D150226#4353911 <https://reviews.llvm.org/D150226#4353911>, @aaron.ballman 
wrote:

> In D150226#4353905 <https://reviews.llvm.org/D150226#4353905>, @dim wrote:
>
>> I submitted a similar workaround for the FreeBSD devel/gdb port, via 
>> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=271045 that also applies 
>> `-Wno-enum-constexpr-conversion`. As the upstream commit message said, they 
>> didn't see any other good way to get rid of the warning, so if there is a 
>> workaround clang is OK with, that would be nice. Still, I don't really 
>> understand what the value is of making this warning into an error, that is 
>> not suppressible?
>
> One of the major selling points to `constexpr` functions in C++ is that they 
> cannot contain UB -- if your code compiles, it is correct. This bug that 
> we've fixed was another instance of us accidentally allowing UB in a constant 
> expression context when we shouldn't have. FWIW, I pointed out a reasonable 
> workaround for the freebsd issue: https://reviews.llvm.org/D150226#4342516

Also note, one of the bugs I reference shows how this breaks SFINAE: 
https://github.com/llvm/llvm-project/issues/57176 and that is not easily 
fixable. So this is non-conforming since it breaks valid code.

There are two basic work arounds. One give the enum a fixed underlying type:

  enum E : int {}

which will give the whole range of values to work with or if there is a one 
specific error value they want they can explicitly add an error enumerator and 
make the error value explicit.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D150226/new/

https://reviews.llvm.org/D150226

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to