5chmidti wrote:

It looks like GitHub decided to not list all new commits in the conversation 
view... there are a few more in the commits tab.
The newly pushed changes start at commit [refactor from using transformer to a 
normal 
check](https://github.com/llvm/llvm-project/pull/66583/commits/b1adc10d5a0b1456725979a1f480a517b37b6b2f).

The reason I found the issue I have created is what I had to change/remove in 
this commit:
[fix literal in template problem in exchange for not resolving implicit 
casts](https://github.com/llvm/llvm-project/pull/66583/commits/01d6b2e4e01e06e894710756ee83c668995bafbb)
I wanted the replacements to resolve implicit casts, like they do for explicit 
casts currently. The test shows the (IMO) degraded quality of the replacements.
After my findings/comment in that issue, I decided to push my changes this way 
to maybe move forward with this check and leave the implicit cast matching for 
another pr in the future. What do you think?

> Looks like having this check implemented as an multiple matchers isn't a good 
> idea, simply because we pickup first one that match instead a nearest one. 
> This leads to bugs when dealing with proper values.

There is a single matcher that matches literals and formulas. Formulas are 
applied as soon as a matched pattern is found. All matched literals are 
collected and sorted, if no formula was matched and the literal that differs 
the least from its constant is selected. 

> In ideal conditions something like x* 3.14 should be even detected as PI.

and

> also this precision 0.001 should be put into configuration option.

This is now configurable with the config value `DiffThreshold`. The default 
value is `0.001`, like it was before. Should this default be lower to detect 
your `3.14` example?

> Also warning message should already say what from std::numbers should be used 
> and how far are current and proposed values from them self.

The messages now follow the following format:

- `prefer 'std::numbers::pi' to this literal, differs by '2.34e-2'` (using 
scientific notation to be more compact than printing `0.00000000123456789`)
- `prefer 'std::numbers::pi_v<float>' to this formula` (the message uses the 
replacement code from the fix-it hint)
- `prefer 'std::numbers::pi' to this macro, differs by '2.34e-2'` (if we are 
replacing a macro that is just a literal)
- `prefer 'std::numbers::inv_sqrt3' to this macro` (for things like `#define 
INV_SQRT3 1 / bar::sqrt(3)`)

So the messages include what kind of symbol/code is being replaced, the 
inserted code, and the difference to the inserted value if the replaced code is 
a literal or a macro that is a literal. The difference that is being printed is 
the absolute difference. Does the sign matter?

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

Reply via email to