Quuxplusone added a comment.

In https://reviews.llvm.org/D52137#1236053, @rsmith wrote:

> I think we can and should do better about false positives here. If you move 
> this check to SemaChecking, you can produce the warning in a context where 
> you know what the final type is -- I don't think there's any reason to warn 
> if the final type is signed and no wider than the promoted type of the 
> negation.


I share your general concern about false positives, but in the specific case 
you mentioned—

  void use(int16_t x)
  uint8_t u8 = 1;
  use(-u8);

—I think it'd be surprising to maybe 50% of average programmers that `x`'s 
received value wasn't `int16_t(255)` but rather `int16_t(-1)`. The only cases 
I'd personally consider "false positives" would be cases where `-u32` was being 
used as a convenient shorthand for `~u32 + 1` a.k.a. `(0u - u32)`... but maybe 
in those cases it wouldn't be much of a burden for the programmer to just 
accept a fixit to `(0u - u32)` and be done with it.


https://reviews.llvm.org/D52137



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

Reply via email to