[clang-tools-extra] r321363 - [clang-tidy] Adding Fuchsia checker for overloaded operators

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 3 06:37:50 PST 2018


There was a recent bug report related to this check. Could you take a look?
http://llvm.org/PR35803

On Fri, Dec 22, 2017 at 5:52 PM, Julie Hockett via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: juliehockett
> Date: Fri Dec 22 08:52:25 2017
> New Revision: 321363
>
> URL: http://llvm.org/viewvc/llvm-project?rev=321363&view=rev
> Log:
> [clang-tidy] Adding Fuchsia checker for overloaded operators
>
> Adds a check to the Fuchsia module to warn if an operator is overloaded,
> except move and copy operators.
>
> See https://fuchsia.googlesource.com/zircon/+/master/docs/cxx.md for
> reference.
>
> Differential Revision: https://reviews.llvm.org/D41363
>
> Added:
>     clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp
>     clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.h
>     clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-
> overloaded-operator.rst
>     clang-tools-extra/trunk/test/clang-tidy/fuchsia-overloaded-
> operator.cpp
> Modified:
>     clang-tools-extra/trunk/clang-tidy/fuchsia/CMakeLists.txt
>     clang-tools-extra/trunk/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
>     clang-tools-extra/trunk/docs/ReleaseNotes.rst
>     clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst
>
> Modified: clang-tools-extra/trunk/clang-tidy/fuchsia/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/clang-tidy/fuchsia/CMakeLists.txt?rev=321363&r1=
> 321362&r2=321363&view=diff
> ============================================================
> ==================
> --- clang-tools-extra/trunk/clang-tidy/fuchsia/CMakeLists.txt (original)
> +++ clang-tools-extra/trunk/clang-tidy/fuchsia/CMakeLists.txt Fri Dec 22
> 08:52:25 2017
> @@ -3,6 +3,7 @@ set(LLVM_LINK_COMPONENTS support)
>  add_clang_library(clangTidyFuchsiaModule
>    DefaultArgumentsCheck.cpp
>    FuchsiaTidyModule.cpp
> +  OverloadedOperatorCheck.cpp
>    VirtualInheritanceCheck.cpp
>
>    LINK_LIBS
>
> Modified: clang-tools-extra/trunk/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/clang-tidy/fuchsia/FuchsiaTidyModule.cpp?rev=
> 321363&r1=321362&r2=321363&view=diff
> ============================================================
> ==================
> --- clang-tools-extra/trunk/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
> (original)
> +++ clang-tools-extra/trunk/clang-tidy/fuchsia/FuchsiaTidyModule.cpp Fri
> Dec 22 08:52:25 2017
> @@ -11,6 +11,7 @@
>  #include "../ClangTidyModule.h"
>  #include "../ClangTidyModuleRegistry.h"
>  #include "DefaultArgumentsCheck.h"
> +#include "OverloadedOperatorCheck.h"
>  #include "VirtualInheritanceCheck.h"
>
>  using namespace clang::ast_matchers;
> @@ -25,6 +26,8 @@ public:
>    void addCheckFactories(ClangTidyCheckFactories &CheckFactories)
> override {
>      CheckFactories.registerCheck<DefaultArgumentsCheck>(
>          "fuchsia-default-arguments");
> +    CheckFactories.registerCheck<OverloadedOperatorCheck>(
> +        "fuchsia-overloaded-operator");
>      CheckFactories.registerCheck<VirtualInheritanceCheck>(
>          "fuchsia-virtual-inheritance");
>    }
>
> Added: clang-tools-extra/trunk/clang-tidy/fuchsia/
> OverloadedOperatorCheck.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp?rev=321363&view=auto
> ============================================================
> ==================
> --- clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp
> (added)
> +++ clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp
> Fri Dec 22 08:52:25 2017
> @@ -0,0 +1,39 @@
> +//===--- OverloadedOperatorCheck.cpp - clang-tidy--------------------
> ------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------
> ----------------===//
> +
> +#include "OverloadedOperatorCheck.h"
> +
> +using namespace clang::ast_matchers;
> +
> +namespace clang {
> +namespace tidy {
> +namespace fuchsia {
> +
> +AST_MATCHER(FunctionDecl, isFuchsiaOverloadedOperator) {
> +  if (const auto *CXXMethodNode = dyn_cast<CXXMethodDecl>(&Node)) {
> +    if (CXXMethodNode->isCopyAssignmentOperator() ||
> +        CXXMethodNode->isMoveAssignmentOperator())
> +      return false;
> +  }
> +  return Node.isOverloadedOperator();
> +}
> +
> +void OverloadedOperatorCheck::registerMatchers(MatchFinder *Finder) {
> +  Finder->addMatcher(functionDecl(isFuchsiaOverloadedOperator())
> .bind("decl"),
> +                     this);
> +}
> +
> +void OverloadedOperatorCheck::check(const MatchFinder::MatchResult
> &Result) {
> +  if (const auto *D = Result.Nodes.getNodeAs<FunctionDecl>("decl"))
> +    diag(D->getLocStart(), "cannot overload %0") << D;
> +}
> +
> +} // namespace fuchsia
> +} // namespace tidy
> +} // namespace clang
>
> Added: clang-tools-extra/trunk/clang-tidy/fuchsia/
> OverloadedOperatorCheck.h
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.h?rev=321363&view=auto
> ============================================================
> ==================
> --- clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.h
> (added)
> +++ clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.h
> Fri Dec 22 08:52:25 2017
> @@ -0,0 +1,35 @@
> +//===--- OverloadedOperatorCheck.h - clang-tidy------------------*- C++
> -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===------------------------------------------------------
> ----------------===//
> +
> +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_OVERLOADED_OPERATOR_H
> +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_OVERLOADED_OPERATOR_H
> +
> +#include "../ClangTidy.h"
> +
> +namespace clang {
> +namespace tidy {
> +namespace fuchsia {
> +
> +/// Overloading operators is disallowed by the Fuchsia coding standard.
> +///
> +/// For the user-facing documentation see:
> +/// http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-
> overloaded-operator.html
> +class OverloadedOperatorCheck : public ClangTidyCheck {
> +public:
> +  OverloadedOperatorCheck(StringRef Name, ClangTidyContext *Context)
> +      : ClangTidyCheck(Name, Context) {}
> +  void registerMatchers(ast_matchers::MatchFinder *Finder) override;
> +  void check(const ast_matchers::MatchFinder::MatchResult &Result)
> override;
> +};
> +
> +} // namespace fuchsia
> +} // namespace tidy
> +} // namespace clang
> +
> +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_FUCHSIA_OVERLOADED_OPERATOR_H
>
> Modified: clang-tools-extra/trunk/docs/ReleaseNotes.rst
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/docs/ReleaseNotes.rst?rev=321363&r1=321362&r2=321363&view=diff
> ============================================================
> ==================
> --- clang-tools-extra/trunk/docs/ReleaseNotes.rst (original)
> +++ clang-tools-extra/trunk/docs/ReleaseNotes.rst Fri Dec 22 08:52:25 2017
> @@ -134,7 +134,12 @@ Improvements to clang-tidy
>    <http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-
> default-arguments.html>`_ check
>
>    Warns if a function or method is declared or called with default
> arguments.
> -
> +
> +- New `fuchsia-overloaded-operator
> +  <http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-
> overloaded-operator.html>`_ check
> +
> +  Warns if an operator is overloaded, except for the assignment (copy and
> move) operators.
> +
>  - New `fuchsia-virtual-inheritance
>    <http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-
> virtual-inheritance.html>`_ check
>
>
> Added: clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-
> overloaded-operator.rst
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/docs/clang-tidy/checks/fuchsia-overloaded-operator.
> rst?rev=321363&view=auto
> ============================================================
> ==================
> --- clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-overloaded-operator.rst
> (added)
> +++ clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-overloaded-operator.rst
> Fri Dec 22 08:52:25 2017
> @@ -0,0 +1,18 @@
> +.. title:: clang-tidy - fuchsia-overloaded-operator
> +
> +fuchsia-overloaded-operator
> +===========================
> +
> +Warns if an operator is overloaded, except for the assignment (copy and
> move)
> +operators.
> +
> +For example:
> +
> +.. code-block:: c++
> +
> +  int operator+(int);     // Warning
> +
> +  B &operator=(const B &Other);  // No warning
> +  B &operator=(B &&Other) // No warning
> +
> +See the features disallowed in Fuchsia at https://fuchsia.googlesource.
> com/zircon/+/master/docs/cxx.md
>
> Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/docs/clang-tidy/checks/list.rst?rev=321363&r1=321362&
> r2=321363&view=diff
> ============================================================
> ==================
> --- clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst (original)
> +++ clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst Fri Dec 22
> 08:52:25 2017
> @@ -69,6 +69,7 @@ Clang-Tidy Checks
>     cppcoreguidelines-slicing
>     cppcoreguidelines-special-member-functions
>     fuchsia-default-arguments
> +   fuchsia-overloaded-operator
>     fuchsia-virtual-inheritance
>     google-build-explicit-make-pair
>     google-build-namespaces
>
> Added: clang-tools-extra/trunk/test/clang-tidy/fuchsia-overloaded-
> operator.cpp
> URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/
> trunk/test/clang-tidy/fuchsia-overloaded-operator.cpp?rev=321363&view=auto
> ============================================================
> ==================
> --- clang-tools-extra/trunk/test/clang-tidy/fuchsia-overloaded-operator.cpp
> (added)
> +++ clang-tools-extra/trunk/test/clang-tidy/fuchsia-overloaded-operator.cpp
> Fri Dec 22 08:52:25 2017
> @@ -0,0 +1,18 @@
> +// RUN: %check_clang_tidy %s fuchsia-overloaded-operator %t
> +
> +class A {
> +public:
> +  int operator+(int);
> +  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: cannot overload 'operator+'
> [fuchsia-overloaded-operator]
> +};
> +
> +class B {
> +public:
> +  B &operator=(const B &Other);
> +  // CHECK-MESSAGES-NOT: [[@LINE-1]]:3: warning: cannot overload
> 'operator=' [fuchsia-overloaded-operator]
> +  B &operator=(B &&Other);
> +  // CHECK-MESSAGES-NOT: [[@LINE-1]]:3: warning: cannot overload
> 'operator=' [fuchsia-overloaded-operator]
> +};
> +
> +A operator-(const A& AA, const A& BB);
> +// CHECK-MESSAGES: [[@LINE-1]]:1: warning: cannot overload 'operator-'
> [fuchsia-overloaded-operator]
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180103/f6fa753e/attachment-0001.html>


More information about the cfe-commits mailing list