5chmidti wrote:

The move to bugprone makes sense to me. 

However, I'm not sure that conversions of integers to signed integers should be 
ignored-by-default since C++20. It may be well-defined behavior w.r.t. the 
resulting value, but the pattern is still prone to bugs. You will get a 
well-defined wrong value from C++20 on, instead of an implementation-defined 
wrong value.

---

> 1. really implement defined behavior -> The above example about float to 
> unsigned
For the first level, we emit warning for explicit and implicit cast.

That sounds like a good idea.

> 2. standard implement defined behavior but at least gcc and clang in each 
> target has same behavior <- default

... and MSVC, and NVCC? I'd drop condition on the compilers behaving the same 
for targets. All implementation-defined behavior according to the standard 
sounds better than only those that are not agreed upon. There are also 
downstream versions of compilers for a few architectures (e.g., 
microcontrollers), and those may or may not follow the practice of their 
upstream counterparts (different targets).

> 3. most strictly check according to cppcodingguideline. <- create alias in 
> this level

I think that the bugprone check should also detect narrowing conversions for 
well-defined conversions because the check is primarily about loosing 
information (in my opinion), not that these narrowing conversions are 
implementation defined. Though that is also a core part of this check.

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

Reply via email to