aaron.ballman added a comment.

In https://reviews.llvm.org/D24349#538098, @alexfh wrote:

> Thank you for the patch!
>
> In https://reviews.llvm.org/D24349#537500, @aaron.ballman wrote:
>
> > In https://reviews.llvm.org/D24349#537350, @Eugene.Zelenko wrote:
> >
> > > Probably check should have options to extend list of containers and also 
> > > to assume all classes with integer type size() const and bool empty() 
> > > const as containers. It may be not trivial to find out all custom 
> > > containers and last option will be helpful to assemble such list.
> >
> >
> > I think this should actually have two options: one is a list of 
> > default-checked containers (default is the list of 
> >  STL containers we previously had), and the other is a Boolean option for 
> > guessing at what might be a 
> >  container based on function signature (default is true). This gives people 
> > a way to silence the diagnostic 
> >  while still being useful.
>
>
> While I understand your concerns, I would suggest to wait for actual bug 
> reports before introducing more options. The duck typing approach worked 
> really well for readability-redundant-smartptr-get and I expect it to work 
> equally well here. The constraints checked here are pretty strict and should 
> make the check safe.


That means there is no way to silence this check on false positives aside from 
disabling it entirely, which is not a particularly good user experience. 
However, I do agree that if we constrain the heuristic appropriately, the 
number of false positives should be low.


================
Comment at: clang-tidy/readability/ContainerSizeEmptyCheck.cpp:33
@@ +32,3 @@
+  const auto validContainer = namedDecl(
+      has(functionDecl(
+          isPublic(), hasName("size"), returns(isInteger()),
----------------
alexfh wrote:
> aaron.ballman wrote:
> > omtcyfz wrote:
> > > Thank you!
> > > 
> > > Blacklisted these types.
> > > 
> > > Actually, I believe if someone has `bool size()` in their codebase 
> > > there's still a problem...
> > > Blacklisted these types.
> > 
> > I'm still not certain this is correct. For instance, if someone wants to do 
> > `uint8_t size() const;`, we shouldn't punish them because `uint8_t` happens 
> > to be `unsigned char` for their platform. But you are correct that we don't 
> > want this to work with char32_t, for instance.
> > 
> > I think the best approach is to make a local matcher for the type 
> > predicate. We want isInteger() unless it's char (that's not explicitly 
> > qualified with signed or unsigned), bool, wchar_t, char16_t, char32_t, or 
> > an enumeration type.
> > 
> > > Actually, I believe if someone has bool size() in their codebase there's 
> > > still a problem...
> > 
> > Agreed, though not as part of this check. ;-)
> Same here, let's wait for a real user asking to support his real container 
> class that defines `uint8_t size() const;`.
I'm not certain I agree with that (I don't like adding new functionality that 
is known to be imprecise, especially when dealing with heuristic-based 
checking), but I don't have that strong of feelings.


Repository:
  rL LLVM

https://reviews.llvm.org/D24349



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

Reply via email to