diff --git a/clang-tools-extra/clang-tidy/readability/ConstReturnTypeCheck.cpp b/clang-tools-extra/clang-tidy/readability/ConstReturnTypeCheck.cpp --- a/clang-tools-extra/clang-tidy/readability/ConstReturnTypeCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/ConstReturnTypeCheck.cpp @@ -114,7 +114,9 @@ Finder->addMatcher( functionDecl( returns(allOf(isConstQualified(), unless(NonLocalConstType))), - anyOf(isDefinition(), cxxMethodDecl(isPure()))) + anyOf(isDefinition(), cxxMethodDecl(isPure())), + // Overridden functions are not actionable. + unless(cxxMethodDecl(isOverride()))) .bind("func"), this); } diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -166,6 +166,11 @@ ` to not warn about `const` value parameters of declarations inside macros. +- Change the behavior of :doc:`readability-const-return-type + ` to not + warn about `const` return types in overridden functions since the derived + class cannot always choose to change the function signature. + - Fixed crashes in :doc:`readability-braces-around-statements ` and :doc:`readability-simplify-boolean-expr ` diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp --- a/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/const-return-type.cpp @@ -279,11 +279,11 @@ // CHECK-NOT-FIXES: virtual int getC() = 0; }; -class PVDerive : public PVBase { +class NVDerive : public PVBase { public: - const int getC() { return 1; } - // CHECK-MESSAGES: [[@LINE-1]]:3: warning: return type 'const int' is 'const'-qualified at the top level, which may reduce code readability without improving const correctness - // CHECK-NOT-FIXES: int getC() { return 1; } + // Don't warn about overridden methods, because it may be impossible to make + // them non-const as the user may not be able to change the base class. + const int getC() override { return 1; } }; // Don't warn about const auto types, because it may be impossible to make them non-const