aaron.ballman added a comment.

In https://reviews.llvm.org/D44231#1031503, @pfultz2 wrote:

> > Can you point to some real world code that would benefit from this check?
>
> Yes, here:
>
> https://github.com/ROCmSoftwarePlatform/MIOpen/blob/master/src/convolution.cpp#L184
>
> It is erroneously calling `sizeof(yDesc.GetType())`. The `GetType` function 
> returns an enum that represents the float type. In this case it wants to 
> compute the size of the float type not the size of the enum that represents 
> the float type. There's actually many instances of this error in the codebase.


Thank you for the example.

>> I don't see this as being a common issue with code and I am concerned about 
>> false positives.
> 
> I have seen it as a common issue. It only runs for a function that returns an 
> integer type. Another possibility is to not warn for function calls that are 
> dependent on a template parameter.
> 
> Of course, there is still the option to disable it.
> 
>> For instance, it's reasonable to write sizeof(func_call()) in a context 
>> where you don't want to repeat the type name in multiple places.
> 
> Generally, a typedef is used to avoid repeating the type.

The typedef doesn't avoid the repeating type.

  uint16_t foo();
  ...
  size_t s1 = sizeof(foo()); // No repeated type
  size_t s2 = sizeof(uint16_t); // Repeated type

If the return type of `foo()` is changed, then the use for `s1` will be 
automatically updated while the use for `s2` will not. Your example of how to 
work around it using `decltype` isn't obvious and won't work for C users.

>> I've seen this construct used in LLVM's code base (see Prologue::getLength() 
>> in DWARFDebugLine.h for one such instance).
> 
> This is the first time I have seen this used legitimately outside of template 
> metaprogramming. Alternatively, you could also write `sizeof(decltype(expr))`.

I think we need some data measurements over several large (>500k LoC) C and C++ 
code bases to see how frequently this check yields false positives. I have a 
hard time imagining that the true positives will outweigh the false positives, 
but without concrete data, it's just guesswork.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D44231



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

Reply via email to