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 <ale...@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@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@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits