aaron.ballman added inline comments.

================
Comment at: test/clang-tidy/cppcoreguidelines-narrowing-conversions.cpp:79-81
+  // TODO: Provide an automatic fix if the number is exactly representable in 
the destination type.
+  f += 2.0;
+  // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: narrowing conversion from 
constant 'double' to 'float' [cppcoreguidelines-narrowing-conversions]
----------------
gchatelet wrote:
> aaron.ballman wrote:
> > This is not a narrowing conversion -- there should be no diagnostic here. 
> > See [dcl.init.list]p7.
> Thx for pointing this out.
> I would like to keep the diagnostic (without mentioning the narrowing) 
> because there is no reason to write `2.0` instead of `2.0f`. WDYT?
I see no reason to warn on a literal value that isn't changed as a result of 
the notional narrowing. The standard clearly defines the behavior, so I think 
that would be needlessly chatty.


================
Comment at: test/clang-tidy/cppcoreguidelines-narrowing-conversions.cpp:99
+void narrow_integer_to_floating() {
+  {
+    long long ll; // 64 bits
----------------
gchatelet wrote:
> aaron.ballman wrote:
> > Missing tests involving literals, which are not narrowing conversions. 
> > e.g., `float f = 1ULL;` should not diagnose.
> This is handled on l.262
Ah, I missed that, thank you!


================
Comment at: test/clang-tidy/cppcoreguidelines-narrowing-conversions.cpp:174
+  c = uc;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: narrowing conversion from 
'unsigned char' to 'char' is implementation-defined 
[cppcoreguidelines-narrowing-conversions]
+  c = us;
----------------
gchatelet wrote:
> aaron.ballman wrote:
> > This is only true on architectures where `char` is defined to be `signed 
> > char` rather than `unsigned char`.
> This is taken care of. The test fails when adding `-funsigned-char`.
> The current test is executed with `-target x86_64-unknown-linux` which should 
> imply `-fsigned-char`. Anyways, I'll add `-fsigned-char` to make sure this is 
> obvious.
Ah, thank you! Can you also pass `-funsigned-char` to test the behavior is as 
expected?


================
Comment at: test/clang-tidy/cppcoreguidelines-narrowing-conversions.cpp:188
+  i = l;
+  // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: narrowing conversion from 'long' 
to 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions]
+  i = ll;
----------------
gchatelet wrote:
> aaron.ballman wrote:
> > This is only narrowing if `sizeof(int) < sizeof(long)` which is not the 
> > case on all architectures.
> Yes this is taken care of in the code, the size of the type must be smaller.
> It works here because the test runs with `-target x86_64-unknown-linux`
Please add a test for another target where this is not the case.


================
Comment at: test/clang-tidy/cppcoreguidelines-narrowing-conversions.cpp:211
+  ll = ul;
+  // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: narrowing conversion from 
'unsigned long' to 'long long' is implementation-defined 
[cppcoreguidelines-narrowing-conversions]
+  ll = ull;
----------------
gchatelet wrote:
> aaron.ballman wrote:
> > Whatttt? How does one narrow from an unsigned 32-bit number to a signed 
> > 64-bit number?
> `unsigned long` is unsigned 64-bit so it does not fit in signed 64-bit.
> https://godbolt.org/z/VnmG0s
unsigned long is not 64-bit on all targets, and that should be tested. 
https://godbolt.org/z/VQx-Yy


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53488



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

Reply via email to