<div dir="ltr">I put up a patch to fix it at <a href="https://reviews.llvm.org/D41708">https://reviews.llvm.org/D41708</a> . Thanks for pointing it out!</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 3, 2018 at 6:37 AM, Alexander Kornienko <span dir="ltr"><<a href="mailto:alexfh@google.com" target="_blank">alexfh@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">There was a recent bug report related to this check. Could you take a look? <a href="http://llvm.org/PR35803" target="_blank">http://llvm.org/PR35803</a></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 22, 2017 at 5:52 PM, Julie Hockett via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: juliehockett<br>
Date: Fri Dec 22 08:52:25 2017<br>
New Revision: 321363<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=321363&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=321363&view=rev</a><br>
Log:<br>
[clang-tidy] Adding Fuchsia checker for overloaded operators<br>
<br>
Adds a check to the Fuchsia module to warn if an operator is overloaded,<br>
except move and copy operators.<br>
<br>
See <a href="https://fuchsia.googlesource.com/zircon/+/master/docs/cxx.md" rel="noreferrer" target="_blank">https://fuchsia.googlesource.c<wbr>om/zircon/+/master/docs/cxx.md</a> for<br>
reference.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D41363" rel="noreferrer" target="_blank">https://reviews.llvm.org/D4136<wbr>3</a><br>
<br>
Added:<br>
    clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.cpp<br>
    clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.h<br>
    clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/fuchsia-overl<wbr>oaded-operator.rst<br>
    clang-tools-extra/trunk/test/c<wbr>lang-tidy/fuchsia-overloaded-o<wbr>perator.cpp<br>
Modified:<br>
    clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/CMakeLists.txt<br>
    clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/FuchsiaTidyModule<wbr>.cpp<br>
    clang-tools-extra/trunk/docs/R<wbr>eleaseNotes.rst<br>
    clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/list.rst<br>
<br>
Modified: clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/fuchsia/CMakeLists.txt?rev=321363&r1=321362&r2=321363&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>clang-tidy/fuchsia/CMakeLists.<wbr>txt?rev=321363&r1=321362&r2=<wbr>321363&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/CMakeLists.txt (original)<br>
+++ clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/CMakeLists.txt Fri Dec 22 08:52:25 2017<br>
@@ -3,6 +3,7 @@ set(LLVM_LINK_COMPONENTS support)<br>
 add_clang_library(clangTidyFu<wbr>chsiaModule<br>
   DefaultArgumentsCheck.cpp<br>
   FuchsiaTidyModule.cpp<br>
+  OverloadedOperatorCheck.cpp<br>
   VirtualInheritanceCheck.cpp<br>
<br>
   LINK_LIBS<br>
<br>
Modified: clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/FuchsiaTidyModule<wbr>.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/fuchsia/FuchsiaTidyModule.cpp?rev=321363&r1=321362&r2=321363&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>clang-tidy/fuchsia/FuchsiaTidy<wbr>Module.cpp?rev=321363&r1=<wbr>321362&r2=321363&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/FuchsiaTidyModule<wbr>.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/FuchsiaTidyModule<wbr>.cpp Fri Dec 22 08:52:25 2017<br>
@@ -11,6 +11,7 @@<br>
 #include "../ClangTidyModule.h"<br>
 #include "../ClangTidyModuleRegistry.h"<br>
 #include "DefaultArgumentsCheck.h"<br>
+#include "OverloadedOperatorCheck.h"<br>
 #include "VirtualInheritanceCheck.h"<br>
<br>
 using namespace clang::ast_matchers;<br>
@@ -25,6 +26,8 @@ public:<br>
   void addCheckFactories(ClangTidyChe<wbr>ckFactories &CheckFactories) override {<br>
     CheckFactories.registerCheck<<wbr>DefaultArgumentsCheck>(<br>
         "fuchsia-default-arguments");<br>
+    CheckFactories.registerCheck<O<wbr>verloadedOperatorCheck>(<br>
+        "fuchsia-overloaded-operator")<wbr>;<br>
     CheckFactories.registerCheck<<wbr>VirtualInheritanceCheck>(<br>
         "fuchsia-virtual-inheritance"<wbr>);<br>
   }<br>
<br>
Added: clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.cpp?rev=321363&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>clang-tidy/fuchsia/OverloadedO<wbr>peratorCheck.cpp?rev=321363&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.cpp (added)<br>
+++ clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.cpp Fri Dec 22 08:52:25 2017<br>
@@ -0,0 +1,39 @@<br>
+//===--- OverloadedOperatorCheck.cpp - clang-tidy--------------------<wbr>------===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#include "OverloadedOperatorCheck.h"<br>
+<br>
+using namespace clang::ast_matchers;<br>
+<br>
+namespace clang {<br>
+namespace tidy {<br>
+namespace fuchsia {<br>
+<br>
+AST_MATCHER(FunctionDecl, isFuchsiaOverloadedOperator) {<br>
+  if (const auto *CXXMethodNode = dyn_cast<CXXMethodDecl>(&Node)<wbr>) {<br>
+    if (CXXMethodNode->isCopyAssignme<wbr>ntOperator() ||<br>
+        CXXMethodNode->isMoveAssignmen<wbr>tOperator())<br>
+      return false;<br>
+  }<br>
+  return Node.isOverloadedOperator();<br>
+}<br>
+<br>
+void OverloadedOperatorCheck::regis<wbr>terMatchers(MatchFinder *Finder) {<br>
+  Finder->addMatcher(functionDec<wbr>l(isFuchsiaOverloadedOperator(<wbr>)).bind("decl"),<br>
+                     this);<br>
+}<br>
+<br>
+void OverloadedOperatorCheck::check<wbr>(const MatchFinder::MatchResult &Result) {<br>
+  if (const auto *D = Result.Nodes.getNodeAs<Functio<wbr>nDecl>("decl"))<br>
+    diag(D->getLocStart(), "cannot overload %0") << D;<br>
+}<br>
+<br>
+} // namespace fuchsia<br>
+} // namespace tidy<br>
+} // namespace clang<br>
<br>
Added: clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/fuchsia/OverloadedOperatorCheck.h?rev=321363&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>clang-tidy/fuchsia/OverloadedO<wbr>peratorCheck.h?rev=321363&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.h (added)<br>
+++ clang-tools-extra/trunk/clang-<wbr>tidy/fuchsia/OverloadedOperato<wbr>rCheck.h Fri Dec 22 08:52:25 2017<br>
@@ -0,0 +1,35 @@<br>
+//===--- OverloadedOperatorCheck.h - clang-tidy------------------*- C++ -*-===//<br>
+//<br>
+//                     The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===------------------------<wbr>------------------------------<wbr>----------------===//<br>
+<br>
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_T<wbr>IDY_FUCHSIA_OVERLOADED_OPERATO<wbr>R_H<br>
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_T<wbr>IDY_FUCHSIA_OVERLOADED_OPERATO<wbr>R_H<br>
+<br>
+#include "../ClangTidy.h"<br>
+<br>
+namespace clang {<br>
+namespace tidy {<br>
+namespace fuchsia {<br>
+<br>
+/// Overloading operators is disallowed by the Fuchsia coding standard.<br>
+///<br>
+/// For the user-facing documentation see:<br>
+/// <a href="http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-overloaded-operator.html" rel="noreferrer" target="_blank">http://clang.llvm.org/extra/cl<wbr>ang-tidy/checks/fuchsia-overlo<wbr>aded-operator.html</a><br>
+class OverloadedOperatorCheck : public ClangTidyCheck {<br>
+public:<br>
+  OverloadedOperatorCheck(String<wbr>Ref Name, ClangTidyContext *Context)<br>
+      : ClangTidyCheck(Name, Context) {}<br>
+  void registerMatchers(ast_matchers:<wbr>:MatchFinder *Finder) override;<br>
+  void check(const ast_matchers::MatchFinder::Mat<wbr>chResult &Result) override;<br>
+};<br>
+<br>
+} // namespace fuchsia<br>
+} // namespace tidy<br>
+} // namespace clang<br>
+<br>
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_T<wbr>IDY_FUCHSIA_OVERLOADED_OPERATO<wbr>R_H<br>
<br>
Modified: clang-tools-extra/trunk/docs/R<wbr>eleaseNotes.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/ReleaseNotes.rst?rev=321363&r1=321362&r2=321363&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>docs/ReleaseNotes.rst?rev=<wbr>321363&r1=321362&r2=321363&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/docs/R<wbr>eleaseNotes.rst (original)<br>
+++ clang-tools-extra/trunk/docs/R<wbr>eleaseNotes.rst Fri Dec 22 08:52:25 2017<br>
@@ -134,7 +134,12 @@ Improvements to clang-tidy<br>
   <<a href="http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-default-arguments.html" rel="noreferrer" target="_blank">http://clang.llvm.org/extra/<wbr>clang-tidy/checks/fuchsia-defa<wbr>ult-arguments.html</a>>`_ check<br>
<br>
   Warns if a function or method is declared or called with default arguments.<br>
-<br>
+<br>
+- New `fuchsia-overloaded-operator<br>
+  <<a href="http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-overloaded-operator.html" rel="noreferrer" target="_blank">http://clang.llvm.org/extra/c<wbr>lang-tidy/checks/fuchsia-overl<wbr>oaded-operator.html</a>>`_ check<br>
+<br>
+  Warns if an operator is overloaded, except for the assignment (copy and move) operators.<br>
+<br>
 - New `fuchsia-virtual-inheritance<br>
   <<a href="http://clang.llvm.org/extra/clang-tidy/checks/fuchsia-virtual-inheritance.html" rel="noreferrer" target="_blank">http://clang.llvm.org/extra/<wbr>clang-tidy/checks/fuchsia-virt<wbr>ual-inheritance.html</a>>`_ check<br>
<br>
<br>
Added: clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/fuchsia-overl<wbr>oaded-operator.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/fuchsia-overloaded-operator.rst?rev=321363&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>docs/clang-tidy/checks/fuchsia<wbr>-overloaded-operator.rst?rev=<wbr>321363&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/fuchsia-overl<wbr>oaded-operator.rst (added)<br>
+++ clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/fuchsia-overl<wbr>oaded-operator.rst Fri Dec 22 08:52:25 2017<br>
@@ -0,0 +1,18 @@<br>
+.. title:: clang-tidy - fuchsia-overloaded-operator<br>
+<br>
+fuchsia-overloaded-operator<br>
+===========================<br>
+<br>
+Warns if an operator is overloaded, except for the assignment (copy and move)<br>
+operators.<br>
+<br>
+For example:<br>
+<br>
+.. code-block:: c++<br>
+<br>
+  int operator+(int);     // Warning<br>
+<br>
+  B &operator=(const B &Other);  // No warning<br>
+  B &operator=(B &&Other) // No warning<br>
+<br>
+See the features disallowed in Fuchsia at <a href="https://fuchsia.googlesource.com/zircon/+/master/docs/cxx.md" rel="noreferrer" target="_blank">https://fuchsia.googlesource.c<wbr>om/zircon/+/master/docs/cxx.md</a><br>
<br>
Modified: clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/list.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/list.rst?rev=321363&r1=321362&r2=321363&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>docs/clang-tidy/checks/list.<wbr>rst?rev=321363&r1=321362&r2=<wbr>321363&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/list.rst (original)<br>
+++ clang-tools-extra/trunk/docs/c<wbr>lang-tidy/checks/list.rst Fri Dec 22 08:52:25 2017<br>
@@ -69,6 +69,7 @@ Clang-Tidy Checks<br>
    cppcoreguidelines-slicing<br>
    cppcoreguidelines-special-memb<wbr>er-functions<br>
    fuchsia-default-arguments<br>
+   fuchsia-overloaded-operator<br>
    fuchsia-virtual-inheritance<br>
    google-build-explicit-make-pai<wbr>r<br>
    google-build-namespaces<br>
<br>
Added: clang-tools-extra/trunk/test/c<wbr>lang-tidy/fuchsia-overloaded-o<wbr>perator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/fuchsia-overloaded-operator.cpp?rev=321363&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/clang-tools-extra/trunk/<wbr>test/clang-tidy/fuchsia-overlo<wbr>aded-operator.cpp?rev=321363&<wbr>view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- clang-tools-extra/trunk/test/c<wbr>lang-tidy/fuchsia-overloaded-o<wbr>perator.cpp (added)<br>
+++ clang-tools-extra/trunk/test/c<wbr>lang-tidy/fuchsia-overloaded-o<wbr>perator.cpp Fri Dec 22 08:52:25 2017<br>
@@ -0,0 +1,18 @@<br>
+// RUN: %check_clang_tidy %s fuchsia-overloaded-operator %t<br>
+<br>
+class A {<br>
+public:<br>
+  int operator+(int);<br>
+  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: cannot overload 'operator+' [fuchsia-overloaded-operator]<br>
+};<br>
+<br>
+class B {<br>
+public:<br>
+  B &operator=(const B &Other);<br>
+  // CHECK-MESSAGES-NOT: [[@LINE-1]]:3: warning: cannot overload 'operator=' [fuchsia-overloaded-operator]<br>
+  B &operator=(B &&Other);<br>
+  // CHECK-MESSAGES-NOT: [[@LINE-1]]:3: warning: cannot overload 'operator=' [fuchsia-overloaded-operator]<br>
+};<br>
+<br>
+A operator-(const A& AA, const A& BB);<br>
+// CHECK-MESSAGES: [[@LINE-1]]:1: warning: cannot overload 'operator-' [fuchsia-overloaded-operator]<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>