Hi Jonas,

Don't know how to attach another patch to Phabricator, but I have added some tests that fail.


Happy New Year!

florin

On 12/31/19 10:11 AM, Jonas Toth via Phabricator wrote:
JonasToth updated this revision to Diff 235712.
JonasToth added a comment.

- fix error from macro-defined variables
- move test files in sub-directory
- fix false positive of news in type-dependent contextes
- add a true positive in typedependent context
- update to latest utility version


Repository:
   rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
   https://reviews.llvm.org/D54943/new/

https://reviews.llvm.org/D54943

Files:
   clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt
   clang-tools-extra/clang-tidy/cppcoreguidelines/ConstCorrectnessCheck.cpp
   clang-tools-extra/clang-tidy/cppcoreguidelines/ConstCorrectnessCheck.h
   
clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp
   clang-tools-extra/clang-tidy/performance/ForRangeCopyCheck.cpp
   clang-tools-extra/clang-tidy/performance/UnnecessaryCopyInitialization.cpp
   clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
   clang-tools-extra/clang-tidy/utils/FixItHintUtils.cpp
   clang-tools-extra/clang-tidy/utils/FixItHintUtils.h
   clang-tools-extra/clang-tidy/utils/LexerUtils.cpp
   clang-tools-extra/clang-tidy/utils/LexerUtils.h
   clang-tools-extra/docs/ReleaseNotes.rst
   
clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-const-correctness.rst
   
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-pointer-as-values.cpp
   
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-transform-pointer-as-values.cpp
   
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-transform-values.cpp
   
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-values.cpp
   clang-tools-extra/unittests/clang-tidy/AddConstTest.cpp
   clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
   clang/lib/Analysis/ExprMutationAnalyzer.cpp
   clang/unittests/Analysis/ExprMutationAnalyzerTest.cpp

>From 4cfb85cf652996211d57176a2cb3a17e43102dcf Mon Sep 17 00:00:00 2001
From: Florin Iucha <flo...@iucha.net>
Date: Mon, 30 Dec 2019 17:20:35 -0500
Subject: [PATCH] Add extra tests

---
 ...oreguidelines-const-correctness-values.cpp | 165 ++++++++++++++++++
 1 file changed, 165 insertions(+)

diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-values.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-values.cpp
index 8f7692fb7fe..572b29fc24c 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-values.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-const-correctness-values.cpp
@@ -574,3 +574,168 @@ void placement_new_in_unique_ptr() {
   int np_local0 = p_local0;
   new to_construct<T>(np_local0);
 }
+
+// Test bit fields
+struct HardwareRegister {
+   unsigned field: 5;
+   unsigned : 7;
+   unsigned another: 20;
+};
+
+void TestRegisters () {
+   HardwareRegister np_reg0;
+   np_reg0.field = 3;
+
+   HardwareRegister p_reg1{ 3, 22 };
+   // CHECK-MESSAGES: [[@LINE-1]]:4: warning: variable 'p_reg1' of type 'HardwareRegister' can be declared 'const'
+   const unsigned p_val = p_reg1.another;
+}
+
+struct IntMaker
+{
+   operator bool() const;
+};
+
+IntMaker& operator>>(IntMaker&, int&);
+
+int TestExtractionOperator()
+{
+   int np_foo;
+   IntMaker np_maker;
+
+   if (np_maker >> np_foo) {
+      return np_foo + 2;
+   }
+
+   int np_bar;
+   np_maker >> np_bar;
+   return np_bar;
+}
+
+template <typename L, typename R>
+struct MyPair
+{
+   L left;
+   R right;
+
+   MyPair(const L& ll, const R& rr) : left{ll}, right{rr} {}
+};
+
+template <typename K, typename V>
+class MyDict
+{
+   public:
+      static constexpr int initial_size = 16;
+
+      ~MyDict() {
+         if (items) {
+            delete[] items;
+         }
+      }
+
+      struct value_type
+      {
+         K kk;
+         V vv;
+      };
+
+      using iterator = value_type*;
+
+      iterator begin() { return items; }
+      iterator end() { return items + used; }
+
+      iterator cbegin() const { return items; }
+      iterator cend() const { return items + used; }
+
+      void emplace(K kk, V vv) {
+         if (! items) {
+            count = initial_size;
+            items = new value_type[count];
+         }
+         else {
+            if (count == used) {
+               const auto old = items;
+               count += initial_size;
+               items = new value_type[count];
+               for (int ii = 0; ii < used; ++ ii) {
+                  items[ii] = old[ii];
+               }
+            }
+         }
+         items[used].kk = kk;
+         items[used].vv = vv;
+         ++ used;
+      }
+
+   private:
+
+      value_type* items = nullptr;
+      int count = 0;
+      int used = 0;
+};
+
+MyDict<int, int> MakeDict()
+{
+   MyDict<int, int> np_dict;
+
+   np_dict.emplace(3, 4);
+   np_dict.emplace(23, 445);
+
+   return np_dict;
+}
+
+void TestDict()
+{
+   auto np_dict = MakeDict();
+
+   for (auto& np_el: np_dict)
+   {
+      np_el.vv += 2;
+   }
+}
+
+MyDict<double, double> MakeOtherDict()
+{
+   MyDict<double, double> np_dict;
+
+   np_dict.emplace(3., 4.);
+   np_dict.emplace(23., 445.);
+
+   return np_dict;
+}
+
+void TestZipIterators()
+{
+   const auto p_dict = MakeDict();
+   auto np_other_dict = MakeOtherDict();
+
+   // false-positive! iterators can't be const, since we're incrementing them
+   for (auto [np_left, np_right] = MyPair<MyDict<int,int>::iterator, MyDict<double,double>::iterator>{p_dict.cbegin(), np_other_dict.begin()}; np_left != p_dict.cend(); ++np_left, ++np_right) {
+      np_right->vv += np_left->vv;
+   }
+}
+
+struct Actuator
+{
+   int actuations;
+};
+
+struct Sensor
+{
+   int observations;
+};
+
+struct System : public Actuator, public Sensor
+{
+};
+
+int SomeComputation(int arg);
+
+int TestInheritance()
+{
+   // false-positive!
+   System np_sys;
+   np_sys.actuations = 5;
+
+   return SomeComputation(np_sys.actuations);
+}
-- 
2.20.1

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to