aaron.ballman 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();
----------------
ymandel wrote:
> 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?
> 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'm not opposed to it, but I worry about people getting hung up on "rarely 
having an effect". For instance, a const return type will definitely have an 
impact on code using template metaprogramming to inspect the return type of a 
Callable. How about:

"top-level 'const' qualifier on a return type may reduce code readability 
without improving const correctness"

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

Sounds good to me!


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