summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp
diff options
context:
space:
mode:
authorMalcolm Parsons <malcolm.parsons@gmail.com>2017-02-15 14:01:41 +0000
committerMalcolm Parsons <malcolm.parsons@gmail.com>2017-02-15 14:01:41 +0000
commit51642f9d0adad04a7693a1a505d247690e408c6b (patch)
treeaa84bfb11fa637e26e9922b3419d488558420064 /clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp
parentd717ce580b2c95951a812eff13ce1d3aebc2ee35 (diff)
downloadbcm5719-llvm-51642f9d0adad04a7693a1a505d247690e408c6b.tar.gz
bcm5719-llvm-51642f9d0adad04a7693a1a505d247690e408c6b.zip
[clang-tidy] Don't warn about call to unresolved operator*
Summary: The misc-unconventional-assign-operator check had a false positive warning when the 'operator*' in 'return *this' was unresolved. Change matcher to allow calls to unresolved operator. Fixes PR31531. Reviewers: alexfh, aaron.ballman Subscribers: JDevlieghere, cfe-commits Differential Revision: https://reviews.llvm.org/D29393 llvm-svn: 295176
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp')
-rw-r--r--clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp b/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp
index 7ad9610ea94..729b7d50a88 100644
--- a/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp
+++ b/clang-tools-extra/test/clang-tidy/misc-unconventional-assign-operator.cpp
@@ -87,3 +87,25 @@ public:
return n;
}
};
+
+namespace pr31531 {
+enum E { e };
+// This declaration makes the 'return *this' below have an unresolved operator
+// in the class template, but not in an instantiation.
+E operator*(E, E);
+
+template <typename>
+struct UnresolvedOperator {
+ UnresolvedOperator &operator=(const UnresolvedOperator &) { return *this; }
+};
+
+UnresolvedOperator<int> UnresolvedOperatorInt;
+
+template <typename>
+struct Template {
+ Template &operator=(const Template &) { return this; }
+ // CHECK-MESSAGES: :[[@LINE-1]]:43: warning: operator=() should always return '*this'
+};
+
+Template<int> TemplateInt;
+}
OpenPOWER on IntegriCloud