On Thu, Oct 31, 2019 at 2:28 PM David Blaikie <dblai...@gmail.com> wrote: > > > > On Thu, Oct 31, 2019 at 11:19 AM Aaron Ballman <aa...@aaronballman.com> wrote: >> >> On Thu, Oct 31, 2019 at 1:31 PM David Blaikie <dblai...@gmail.com> wrote: >> > >> > >> > >> > On Thu, Oct 31, 2019 at 8:45 AM Aaron Ballman <aa...@aaronballman.com> >> > wrote: >> >> >> >> On Wed, Oct 30, 2019 at 9:23 PM David Blaikie <dblai...@gmail.com> wrote: >> >> > >> >> > Two separate issues here >> >> > >> >> > 1) the fixit hint, as one of a set of alternatives, isn't likely to be >> >> > removed/changed - the (albeit quirky) convention of using extra () to >> >> > indicate an intentional assignment in a condition has been around for a >> >> > while. So if you use the extra parens without writing an assignment, >> >> > the compiler's going to suggest you resolve this "conflict" with the >> >> > style - either you didn't intend the extra (), or you intended to use >> >> > assignment. Those are the two alternative suggestions being made. >> >> > >> >> > 2) automatically applying one fixit hint of several ambiguous ones >> >> > seems like a bug to me - Aaron - do you know anything about this? Is >> >> > this accurate/intended/etc? >> >> >> >> I also think that's a bug. It looks like it's coming from >> >> Sema::DiagnoseEqualityWithExtraParens(). It looks like it presents >> >> both fixits, which strikes me as a bad thing to do when automatically >> >> applying fixits. >> > >> > >> > These fixits should be attached to notes, though, right? & Clang produces >> > all sorts of fixits on notes that are not semantics-preserving, I think? >> > ("oh, I think you meant to write this other thing") >> >> Yes, they're both attached to notes but the notes point to the same >> location as the error. >> >> > My understanding is that the fixits are correct (in the clang diagnostic >> > experience - "here's a warning, here are some ideas of what you might've >> > intended that would address the warning") - but it seems incorrect to >> > automatically apply especially ambiguous suggesitons like this. How would >> > clang-tidy choose between the two alternatives? >> >> I don't think it has a way to select between alternatives; I don't >> think that was a use case we had envisioned for automatically applying >> fix-its. > > > I wasn't thinking a way to select - but I'd expect an automated tool to, when > presented with an ambiguity, decide that not doing anything was the best > course of action (same as if the warning had no notes).
I agree. I've CCed Alex in case he has opinions as well. ~Aaron > >> >> >> ~Aaron >> >> > >> >> >> >> >> >> ~Aaron >> >> >> >> > >> >> > On Tue, Oct 29, 2019 at 10:13 AM Robert Ankeney <rrank...@gmail.com> >> >> > wrote: >> >> >> >> >> >> This was just a example of what I ran into when I used >> >> >> run-clang-tidy.py across a compilation database with a >> >> >> -export-fixes=fix.yaml and then ra >> >> >> clang-apply-replacements. Mainly I object to the suggestion+fixit to >> >> >> switch to an assignment. Most coding standards would disallow >> >> >> assignments >> >> >> in if conditionals. If anything, I would think a suggestion of "if >> >> >> (true == isValid)" would be more appropriate. >> >> >> >> >> >> Thanks for the feedback! >> >> >> Robert >> >> >> >> >> >> On Mon, Oct 28, 2019 at 2:17 PM David Blaikie <dblai...@gmail.com> >> >> >> wrote: >> >> >>> >> >> >>> clang-tidy in the command line you gave didn't seem to modify the >> >> >>> file for me, did it modify the file for you? >> >> >>> >> >> >>> Are you objecting to the suggestion, or that it was automatically >> >> >>> applied? I would think it'd be a bug to apply any fixit/hint if there >> >> >>> are multiple possible suggestions. >> >> >>> >> >> >>> But the existence of the suggestion (without the application of it) >> >> >>> to the user seems right to me. The use of extra () to suppress the >> >> >>> assignment-in-conditional warning (-Wparentheses) has been around for >> >> >>> quite a while, so it's possible that the user intended assignment >> >> >>> rather than comparison when they added the extra parentheses. >> >> >>> >> >> >>> - Dave >> >> >>> >> >> >>> On Sun, Oct 27, 2019 at 11:32 AM Robert Ankeney via cfe-users >> >> >>> <cfe-users@lists.llvm.org> wrote: >> >> >>>> >> >> >>>> For the following code (wrong.cpp): >> >> >>>> >> >> >>>> bool check(bool isValid) >> >> >>>> { >> >> >>>> bool retVal = false; >> >> >>>> >> >> >>>> if (( isValid == true )) >> >> >>>> { >> >> >>>> retVal = true; >> >> >>>> } >> >> >>>> >> >> >>>> return retVal; >> >> >>>> } >> >> >>>> >> >> >>>> when I run: >> >> >>>> clang-tidy -checks=modernize-use-default-member-init wrong.cpp >> >> >>>> >> >> >>>> I get: >> >> >>>> 4 warnings and 1 error generated. >> >> >>>> Error while processing /llvm/match/ctBad/wrong.cpp. >> >> >>>> /llvm/match/ctBad/wrong.cpp:5:19: error: equality comparison with >> >> >>>> extraneous parentheses [clang-diagnostic-parentheses-equality] >> >> >>>> if (( isValid == true )) >> >> >>>> ~ ^~ ~ >> >> >>>> = >> >> >>>> /llvm/match/ctBad/wrong.cpp:5:19: note: remove extraneous >> >> >>>> parentheses around the comparison to silence this warning >> >> >>>> /llvm/match/ctBad/wrong.cpp:5:19: note: use '=' to turn this >> >> >>>> equality comparison into an assignment >> >> >>>> >> >> >>>> Note it turns the if into: >> >> >>>> if ( isValid = true ) >> >> >>>> >> >> >>>> Seems like a very bad idea. Removing the redundant parentheses seems >> >> >>>> fine, but changing the comparison to an assignment does not. Is this >> >> >>>> a bug? >> >> >>>> >> >> >>>> Thanks, >> >> >>>> Robert >> >> >>>> >> >> >>>> _______________________________________________ >> >> >>>> cfe-users mailing list >> >> >>>> cfe-users@lists.llvm.org >> >> >>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users _______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users