[clang-tools-extra] d6c9dc3 - [clang-tidy] Remove obsolete checker google-runtime-references
Adam Balogh via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 6 05:01:44 PDT 2020
Author: Adam Balogh
Date: 2020-10-06T14:03:55+02:00
New Revision: d6c9dc3c17e444e007758c01507bb5280532c9f8
URL: https://github.com/llvm/llvm-project/commit/d6c9dc3c17e444e007758c01507bb5280532c9f8
DIFF: https://github.com/llvm/llvm-project/commit/d6c9dc3c17e444e007758c01507bb5280532c9f8.diff
LOG: [clang-tidy] Remove obsolete checker google-runtime-references
The rules which is the base of this checker is removed from the
//Google C++ Style Guide// in May:
[[ https://github.com/google/styleguide/pull/553 | Update C++ styleguide ]].
Now this checker became obsolete.
Differential Revision: https://reviews.llvm.org/D88831
Added:
Modified:
clang-tools-extra/clang-tidy/google/CMakeLists.txt
clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
clang-tools-extra/docs/ReleaseNotes.rst
Removed:
clang-tools-extra/clang-tidy/google/NonConstReferences.cpp
clang-tools-extra/clang-tidy/google/NonConstReferences.h
clang-tools-extra/docs/clang-tidy/checks/google-runtime-references.rst
clang-tools-extra/test/clang-tidy/checkers/google-runtime-references.cpp
################################################################################
diff --git a/clang-tools-extra/clang-tidy/google/CMakeLists.txt b/clang-tools-extra/clang-tidy/google/CMakeLists.txt
index e38ba8abb78d..e1e5fc7a85a7 100644
--- a/clang-tools-extra/clang-tidy/google/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/google/CMakeLists.txt
@@ -16,7 +16,6 @@ add_clang_library(clangTidyGoogleModule
GlobalVariableDeclarationCheck.cpp
GoogleTidyModule.cpp
IntegerTypesCheck.cpp
- NonConstReferences.cpp
OverloadedUnaryAndCheck.cpp
TodoCommentCheck.cpp
UnnamedNamespaceInHeaderCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
index 4c6b791f8cdd..d8fcf3fed94f 100644
--- a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
@@ -23,7 +23,6 @@
#include "GlobalNamesInHeadersCheck.h"
#include "GlobalVariableDeclarationCheck.h"
#include "IntegerTypesCheck.h"
-#include "NonConstReferences.h"
#include "OverloadedUnaryAndCheck.h"
#include "TodoCommentCheck.h"
#include "UnnamedNamespaceInHeaderCheck.h"
@@ -63,8 +62,6 @@ class GoogleModule : public ClangTidyModule {
"google-runtime-int");
CheckFactories.registerCheck<runtime::OverloadedUnaryAndCheck>(
"google-runtime-operator");
- CheckFactories.registerCheck<runtime::NonConstReferences>(
- "google-runtime-references");
CheckFactories
.registerCheck<readability::AvoidUnderscoreInGoogletestNameCheck>(
"google-readability-avoid-underscore-in-googletest-name");
diff --git a/clang-tools-extra/clang-tidy/google/NonConstReferences.cpp b/clang-tools-extra/clang-tidy/google/NonConstReferences.cpp
deleted file mode 100644
index e0fb614dfe8b..000000000000
--- a/clang-tools-extra/clang-tidy/google/NonConstReferences.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-//===--- NonConstReferences.cpp - clang-tidy --------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "NonConstReferences.h"
-#include "../utils/OptionsUtils.h"
-#include "clang/AST/DeclBase.h"
-#include "clang/ASTMatchers/ASTMatchFinder.h"
-#include "clang/ASTMatchers/ASTMatchers.h"
-
-using namespace clang::ast_matchers;
-
-namespace clang {
-namespace tidy {
-namespace google {
-namespace runtime {
-
-NonConstReferences::NonConstReferences(StringRef Name,
- ClangTidyContext *Context)
- : ClangTidyCheck(Name, Context),
- IncludedTypes(
- utils::options::parseStringList(Options.get("IncludedTypes", ""))) {}
-
-void NonConstReferences::storeOptions(ClangTidyOptions::OptionMap &Opts) {
- Options.store(Opts, "IncludedTypes",
- utils::options::serializeStringList(IncludedTypes));
-}
-
-void NonConstReferences::registerMatchers(MatchFinder *Finder) {
- Finder->addMatcher(
- parmVarDecl(
- unless(isInstantiated()),
- hasType(references(
- qualType(unless(isConstQualified())).bind("referenced_type"))),
- unless(hasType(rValueReferenceType())))
- .bind("param"),
- this);
-}
-
-void NonConstReferences::check(const MatchFinder::MatchResult &Result) {
- const auto *Parameter = Result.Nodes.getNodeAs<ParmVarDecl>("param");
- const auto *Function =
- dyn_cast_or_null<FunctionDecl>(Parameter->getParentFunctionOrMethod());
-
- if (Function == nullptr || Function->isImplicit())
- return;
-
- if (Function->getLocation().isMacroID())
- return;
-
- if (!Function->isCanonicalDecl())
- return;
-
- if (const auto *Method = dyn_cast<CXXMethodDecl>(Function)) {
- // Don't warn on implementations of an interface using references.
- if (Method->begin_overridden_methods() != Method->end_overridden_methods())
- return;
- // Don't warn on lambdas, as they frequently have to conform to the
- // interface defined elsewhere.
- if (Method->getParent()->isLambda())
- return;
- }
-
- auto ReferencedType = *Result.Nodes.getNodeAs<QualType>("referenced_type");
-
- if (std::find_if(IncludedTypes.begin(), IncludedTypes.end(),
- [&](llvm::StringRef ExplicitType) {
- return ReferencedType.getCanonicalType().getAsString(
- Result.Context->getPrintingPolicy()) ==
- ExplicitType;
- }) != IncludedTypes.end())
- return;
-
- // Don't warn on function references, they shouldn't be constant.
- if (ReferencedType->isFunctionProtoType())
- return;
-
- // Don't warn on dependent types in templates.
- if (ReferencedType->isDependentType())
- return;
-
- if (Function->isOverloadedOperator()) {
- switch (Function->getOverloadedOperator()) {
- case clang::OO_LessLess:
- case clang::OO_PlusPlus:
- case clang::OO_MinusMinus:
- case clang::OO_PlusEqual:
- case clang::OO_MinusEqual:
- case clang::OO_StarEqual:
- case clang::OO_SlashEqual:
- case clang::OO_PercentEqual:
- case clang::OO_LessLessEqual:
- case clang::OO_GreaterGreaterEqual:
- case clang::OO_PipeEqual:
- case clang::OO_CaretEqual:
- case clang::OO_AmpEqual:
- // Don't warn on the first parameter of operator<<(Stream&, ...),
- // operator++, operator-- and operation+assignment operators.
- if (Function->getParamDecl(0) == Parameter)
- return;
- break;
- case clang::OO_GreaterGreater: {
- auto isNonConstRef = [](clang::QualType T) {
- return T->isReferenceType() &&
- !T.getNonReferenceType().isConstQualified();
- };
- // Don't warn on parameters of stream extractors:
- // Stream& operator>>(Stream&, Value&);
- // Both parameters should be non-const references by convention.
- if (isNonConstRef(Function->getParamDecl(0)->getType()) &&
- (Function->getNumParams() < 2 || // E.g. member operator>>.
- isNonConstRef(Function->getParamDecl(1)->getType())) &&
- isNonConstRef(Function->getReturnType()))
- return;
- break;
- }
- default:
- break;
- }
- }
-
- // Some functions use references to comply with established standards.
- if (Function->getDeclName().isIdentifier() && Function->getName() == "swap")
- return;
-
- // iostream parameters are typically passed by non-const reference.
- if (StringRef(ReferencedType.getAsString()).endswith("stream"))
- return;
-
- if (Parameter->getName().empty()) {
- diag(Parameter->getLocation(), "non-const reference parameter at index %0, "
- "make it const or use a pointer")
- << Parameter->getFunctionScopeIndex();
- } else {
- diag(Parameter->getLocation(),
- "non-const reference parameter %0, make it const or use a pointer")
- << Parameter;
- }
-}
-
-} // namespace runtime
-} // namespace google
-} // namespace tidy
-} // namespace clang
diff --git a/clang-tools-extra/clang-tidy/google/NonConstReferences.h b/clang-tools-extra/clang-tidy/google/NonConstReferences.h
deleted file mode 100644
index ad7d4e4b1bca..000000000000
--- a/clang-tools-extra/clang-tidy/google/NonConstReferences.h
+++ /dev/null
@@ -1,41 +0,0 @@
-//===--- NonConstReferences.h - clang-tidy ----------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_NON_CONST_REFERENCES_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_NON_CONST_REFERENCES_H
-
-#include "../ClangTidyCheck.h"
-
-namespace clang {
-namespace tidy {
-namespace google {
-namespace runtime {
-
-/// Checks the usage of non-constant references in function parameters.
-///
-/// https://google.github.io/styleguide/cppguide.html#Reference_Arguments
-class NonConstReferences : public ClangTidyCheck {
-public:
- NonConstReferences(StringRef Name, ClangTidyContext *Context);
- bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
- return LangOpts.CPlusPlus;
- }
- void registerMatchers(ast_matchers::MatchFinder *Finder) override;
- void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
- void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
-
-private:
- const std::vector<std::string> IncludedTypes;
-};
-
-} // namespace runtime
-} // namespace google
-} // namespace tidy
-} // namespace clang
-
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_NON_CONST_REFERENCES_H
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index ac4802e6d498..1df398c01cab 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -120,6 +120,9 @@ Changes in existing checks
Added an option `GetConfigPerFile` to support including files which use
diff erent naming styles.
+- Removed `google-runtime-references` check because the rule it checks does
+ not exist in the Google Style Guide anymore.
+
Improvements to include-fixer
-----------------------------
diff --git a/clang-tools-extra/docs/clang-tidy/checks/google-runtime-references.rst b/clang-tools-extra/docs/clang-tidy/checks/google-runtime-references.rst
deleted file mode 100644
index 52de1f108738..000000000000
--- a/clang-tools-extra/docs/clang-tidy/checks/google-runtime-references.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. title:: clang-tidy - google-runtime-references
-
-google-runtime-references
-=========================
-
-Checks the usage of non-constant references in function parameters.
-
-The corresponding style guide rule:
-https://google.github.io/styleguide/cppguide.html#Reference_Arguments
-
-
-Options
--------
-
-.. option:: IncludedTypes
-
- A semicolon-separated list of names of types to explicitly include. Default is empty.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/google-runtime-references.cpp b/clang-tools-extra/test/clang-tidy/checkers/google-runtime-references.cpp
deleted file mode 100644
index e70ec3aeddf0..000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/google-runtime-references.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-// RUN: %check_clang_tidy %s google-runtime-references %t -- \
-// RUN: -config="{CheckOptions: \
-// RUN: [{key: google-runtime-references.IncludedTypes, \
-// RUN: value: 'included::A; included::B'}]}"
-
-int a;
-int &b = a;
-int *c;
-void f1(int a);
-void f2(int *b);
-void f3(const int &c);
-void f4(int const &d);
-
-// Don't warn on implicit operator= in c++11 mode.
-class A {
- virtual void f() {}
-};
-// Don't warn on rvalue-references.
-struct A2 {
- A2(A2&&) = default;
- void f(A2&&) {}
-};
-
-// Don't warn on iostream parameters.
-namespace xxx {
-class istream { };
-class ostringstream { };
-}
-void g1(xxx::istream &istr);
-void g1(xxx::ostringstream &istr);
-
-void g1(int &a);
-// CHECK-MESSAGES: [[@LINE-1]]:14: warning: non-const reference parameter 'a', make it const or use a pointer [google-runtime-references]
-
-struct s {};
-void g2(int a, int b, s c, s &d);
-// CHECK-MESSAGES: [[@LINE-1]]:31: warning: non-const reference parameter 'd', {{.*}}
-
-typedef int &ref;
-void g3(ref a);
-// CHECK-MESSAGES: [[@LINE-1]]:13: warning: non-const reference {{.*}}
-
-void g4(int &a, int &b, int &);
-// CHECK-MESSAGES: [[@LINE-1]]:14: warning: non-const reference parameter 'a', {{.*}}
-// CHECK-MESSAGES: [[@LINE-2]]:22: warning: non-const reference parameter 'b', {{.*}}
-// CHECK-MESSAGES: [[@LINE-3]]:30: warning: non-const reference parameter at index 2, {{.*}}
-
-class B {
- B(B& a) {}
-// CHECK-MESSAGES: [[@LINE-1]]:8: warning: non-const reference {{.*}}
- virtual void f(int &a) {}
-// CHECK-MESSAGES: [[@LINE-1]]:23: warning: non-const reference {{.*}}
- void g(int &b);
-// CHECK-MESSAGES: [[@LINE-1]]:15: warning: non-const reference {{.*}}
-
- // Don't warn on the parameter of stream extractors defined as members.
- B& operator>>(int& val) { return *this; }
-};
-
-// Only warn on the first declaration of each function to reduce duplicate
-// warnings.
-void B::g(int &b) {}
-
-// Don't warn on the first parameter of stream inserters.
-A& operator<<(A& s, int&) { return s; }
-// CHECK-MESSAGES: [[@LINE-1]]:25: warning: non-const reference parameter at index 1, {{.*}}
-
-// Don't warn on either parameter of stream extractors. Both need to be
-// non-const references by convention.
-A& operator>>(A& input, int& val) { return input; }
-
-// Don't warn on lambdas.
-auto lambda = [] (int&) {};
-
-// Don't warn on typedefs, as we'll warn on the function itself.
-typedef int (*fp)(int &);
-
-// Don't warn on function references.
-typedef void F();
-void g5(const F& func) {}
-void g6(F& func) {}
-
-template<typename T>
-void g7(const T& t) {}
-
-template<typename T>
-void g8(T t) {}
-
-void f5() {
- g5(f5);
- g6(f5);
- g7(f5);
- g7<F&>(f5);
- g8(f5);
- g8<F&>(f5);
-}
-
-// Don't warn on dependent types.
-template<typename T>
-void g9(T& t) {}
-template<typename T>
-void g10(T t) {}
-
-void f6() {
- int i;
- float f;
- g9<int>(i);
- g9<const int>(i);
- g9<int&>(i);
- g10<int&>(i);
- g10<float&>(f);
-}
-
-// Warn only on the overridden methods from the base class, as the child class
-// only implements the interface.
-class C : public B {
- C();
- virtual void f(int &a) {}
-};
-
-// Don't warn on operator<< with streams-like interface.
-A& operator<<(A& s, int) { return s; }
-
-// Don't warn on swap().
-void swap(C& c1, C& c2) {}
-
-// Don't warn on standalone operator++, operator--, operator+=, operator-=,
-// operator*=, etc. that all need non-const references to be functional.
-A& operator++(A& a) { return a; }
-A operator++(A& a, int) { return a; }
-A& operator--(A& a) { return a; }
-A operator--(A& a, int) { return a; }
-A& operator+=(A& a, const A& b) { return a; }
-A& operator-=(A& a, const A& b) { return a; }
-A& operator*=(A& a, const A& b) { return a; }
-A& operator/=(A& a, const A& b) { return a; }
-A& operator%=(A& a, const A& b) { return a; }
-A& operator<<=(A& a, const A& b) { return a; }
-A& operator>>=(A& a, const A& b) { return a; }
-A& operator|=(A& a, const A& b) { return a; }
-A& operator^=(A& a, const A& b) { return a; }
-A& operator&=(A& a, const A& b) { return a; }
-
-namespace included {
-class A {};
-class B {};
-void f7(A &);
-void f8(B &);
-}
-void f9(included::A &);
-void f10(included::B &);
-
-#define DEFINE_F(name) void name(int& a)
-
-DEFINE_F(func) {}
More information about the cfe-commits
mailing list