ymandel marked 2 inline comments as done.
ymandel added inline comments.

================
Comment at: clang-tidy/readability/ConstValueReturnCheck.cpp:107
+        diag(Def->getInnerLocStart(), "return type %0 is 'const'-qualified "
+                                      "hindering compiler optimizations")
+        << Def->getReturnType();
----------------
aaron.ballman wrote:
> ymandel wrote:
> > aaron.ballman wrote:
> > > ymandel wrote:
> > > > aaron.ballman wrote:
> > > > > It seems strange to me that this is in the readability module but the 
> > > > > diagnostic here is about compiler optimizations. Should this be in 
> > > > > the performance module instead? Or should this diagnostic be reworded 
> > > > > about the readability concerns?
> > > > Good point. The readability angle is that the const clutters the code 
> > > > to no benefit.  That is, even if it was performance neutral, I'd still 
> > > > want to discourage this practice.  But, it does seem like the primary 
> > > > impact is performance. 
> > > > 
> > > > I'm fine either way -- moving it to performance or emphasizing the 
> > > > clutter of the unhelpful "const".  I'm inclined to moving it, but don't 
> > > > have good sense of how strict these hierarchies are. What do you think?
> > > I'm not sold that `const`-qualified return types always pessimize 
> > > optimizations. However, I'm also not sold that it's *always* a bad idea 
> > > to have a top-level cv-qualifier on a return type either (for instance, 
> > > this is one way to prevent callers from modifying a temp returned by a 
> > > function). How about leaving this in readability and changing the 
> > > diagnostic into: "top-level 'const' qualifier on a return type may reduce 
> > > code readability with limited benefit" or something equally weasely?
> > I talked this over with other google folks and seems like the consensus is:
> > 
> > 1.  The readability benefits may be controversial.  Some folks might not 
> > view `const` as clutter and there are some corner cases where the qualifier 
> > may prevent something harmful.
> > 2.  The performance implication is real, if not guaranteed to be a problem.
> > 
> > Based on this, seems best to move it to performance, but water down the 
> > performance claims.  That keeps the focus to an issue we can assume nearly 
> > everyone agrees on.
> I'm not convinced the performance implications are real compared to how the 
> check is currently implemented. I know there are performance concerns when 
> you return a const value of class type because it pessimizes the ability to 
> use move constructors, but that's a very specific performance concern that I 
> don't believe is present in general. For instance, I don't know of any 
> performance concerns regarding `const int f();` as a declaration. I'd be fine 
> moving this to the performance module, but I think the check would need to be 
> tightened to only focus on actual performance concerns.
> 
> FWIW, I do agree that the readability benefits may be controversial, but I 
> kind of thought that was the point to the check and as such, it's a very 
> reasonable check. Almost everything in readability is subjective to some 
> degree and our metric has always been "if you agree with a style check, don't 
> enable it".
> 
> It's up to you how you want to proceed, but I see two ways forward: 1) keep 
> this as a readability check that broadly finds top-level const qualifiers and 
> removes them, 2) move this to the performance module and rework the check to 
> focus on only the scenarios that have concrete performance impact.
> It's up to you how you want to proceed, but I see two ways forward: 1) keep 
> this as a readability check that broadly finds top-level const qualifiers and 
> removes them, 2) move this to the performance module and rework the check to 
> focus on only the scenarios that have concrete performance impact.

Aaron, thank you for the detailed response. I'm inclined to agree with you that 
this belongs in readabilty and I spoke with sbenza who feels the same.  The 
high-level point is that the `const` is noise in most cases.

You suggested above a warning along the lines of:
 "top-level 'const' qualifier on a return type may reduce code readability with 
limited benefit"

I like this, but think it should be a little stronger. Perhaps:
 "top-level 'const' qualifier on a return type may reduce code readability 
while rarely having an effect"

I also propose updating the explanation in the documentation file from:

Such use of ``const`` is superfluous, and
prevents valuable compiler optimizations. 

to the weaker

Such use of ``const`` is usually superfluous, and can
prevent valuable compiler optimizations. 

WDYT?


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53025



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

Reply via email to