summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/test/constmethod.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-10-30 16:12:01 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-10-30 16:30:59 +0200
commit21cd473a97a053389e4d69b3becf994ace697c86 (patch)
tree994e6ee50e29b1ff206c3230fde8d21980e8bc9b /compilerplugins/clang/test/constmethod.cxx
parenta4fbe0c5922392341aa48c8d6d8be72e1abf0abf (diff)
new loplugin: constmethod
parked in store/ for now, because, as I worked my way up the layers of modules, the higher I got, the more false+ I got when trying to only make changes that preserved logical-constness. Change-Id: I4acd2c4416775f7c6a3d91eb0bce048630ccaff5
Diffstat (limited to 'compilerplugins/clang/test/constmethod.cxx')
-rw-r--r--compilerplugins/clang/test/constmethod.cxx46
1 files changed, 46 insertions, 0 deletions
diff --git a/compilerplugins/clang/test/constmethod.cxx b/compilerplugins/clang/test/constmethod.cxx
new file mode 100644
index 000000000000..e801db419aa7
--- /dev/null
+++ b/compilerplugins/clang/test/constmethod.cxx
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <memory>
+#include <vcl/vclptr.hxx>
+
+class OutputDevice;
+
+struct Class1
+{
+ struct Impl {
+ void foo_notconst();
+ void foo_const() const;
+ int & foo_both();
+ int const & foo_both() const;
+ };
+ std::unique_ptr<Impl> pImpl;
+ int* m_pint;
+ VclPtr<OutputDevice> m_pvcl;
+
+ void foo1() {
+ pImpl->foo_notconst();
+ }
+ void foo2() { // expected-error {{this method can be const [loplugin:constmethod]}}
+ pImpl->foo_const();
+ }
+ // TODO this should trigger a warning, but doesn't
+ void foo3() {
+ pImpl->foo_both();
+ }
+ Impl* foo4() {
+ return pImpl.get(); // no warning expected
+ }
+ int* foo5() {
+ return m_pint; // no warning expected
+ }
+ OutputDevice* foo6() {
+ return m_pvcl; // no warning expected
+ }
+};