[PATCH] D63423: [Diagnostics] Diagnose misused xor as pow
Arthur O'Dwyer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 17 15:06:41 PDT 2019
Quuxplusone added inline comments.
================
Comment at: lib/Sema/SemaExpr.cpp:10931
+ // Do not diagnose hexadecimal literals
+ if (ExprStr.find("0x") != llvm::StringRef::npos)
+ return;
----------------
Can you use `starts_with` (or the LLVM equivalent) in both of these cases? It'll be faster and also more correct.
Hex and binary are handled up here on line 10927, but octal is handled down on line 10955; why? Can't they be combined into one place in the code?
================
Comment at: lib/Sema/SemaExpr.cpp:10982
+ S.Diag(Loc, diag::note_xor_used_as_pow_silence) << ("0x2 ^ " + RHSStr);
+ } else if (LeftSideValue == 10 && RightSideIntValue != 0) {
+ std::string SuggestedValue;
----------------
Suppressing the warning specifically on `10 ^ 0` (which means `10`) seems like an anti-feature.
================
Comment at: lib/Sema/SemaExpr.cpp:10988
+ } else {
+ SuggestedValue = "1" + std::string(RightSideIntValue, '0');
+ }
----------------
I suggest at least one unit test case that involves `10 ^ 100`, and considering the user-friendliness of the resulting error message. How about suggesting `"1e" + std::to_string(RightSideIntValue)` as the fixit in both cases?
================
Comment at: test/SemaCXX/warn-xor-as-pow.cpp:52
+ res = FOOBAR(2, 16);
+ res = EPSILON;
+ res = 0b10 ^ 16;
----------------
I still expect to see a warning either on this line, or on the line where the macro is defined. I don't see why we'd want to be silent in this case.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D63423/new/
https://reviews.llvm.org/D63423
More information about the cfe-commits
mailing list