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

Julie Hockett via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 3 12:18:33 PST 2018


I put up a patch to fix it at https://reviews.llvm.org/D41708 . Thanks for
pointing it out!

On Wed, Jan 3, 2018 at 6:37 AM, Alexander Kornienko <alexfh at google.com>
wrote:

> 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/OverloadedOperato
>> rCheck.cpp
>>     clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.h
>>     clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-overl
>> oaded-operator.rst
>>     clang-tools-extra/trunk/test/clang-tidy/fuchsia-overloaded-o
>> perator.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/OverloadedOperato
>> rCheck.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/OverloadedOperato
>> rCheck.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-overlo
>> aded-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_OPERATO
>> R_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-defa
>> ult-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-overl
>> oaded-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-virt
>> ual-inheritance.html>`_ check
>>
>>
>> Added: clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-overl
>> oaded-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.c
>> om/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-o
>> perator.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/5edb16e9/attachment-0001.html>


More information about the cfe-commits mailing list