brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · f17c9ce Raw
56 lines · cpp
1// RUN: %check_clang_tidy %s misc-const-correctness %t -- -- -std=c++17 -fno-delayed-template-parsing2 3template <typename L, typename R>4struct MyPair {5  L left;6  R right;7  MyPair(const L &ll, const R &rr) : left{ll}, right{rr} {}8};9 10void f() {11  // FIXME: Decomposition Decls need special treatment, because they require to use 'auto'12  // and the 'const' should only be added if all elements can be const.13  // The issue is similar to multiple declarations in one statement.14  // Simply bail for now.15  auto [np_local0, np_local1] = MyPair<int, int>(42, 42);16  np_local0++;17  np_local1++;18  // CHECK-FIXES-NOT: auto const [np_local0, np_local1]19 20  auto [np_local2, p_local0] = MyPair<double, double>(42., 42.);21  np_local2++;22  // CHECK-FIXES-NOT: auto const [np_local2, p_local0]23 24  auto [p_local1, np_local3] = MyPair<double, double>(42., 42.);25  np_local3++;26  // CHECK-FIXES-NOT: auto const [p_local1, np_local3]27 28  auto [p_local2, p_local3] = MyPair<double, double>(42., 42.);29  // CHECK-FIXES-NOT: auto const [p_local2, p_local3]30}31 32void g() {33  int p_local0 = 42;34  // CHECK-MESSAGES: [[@LINE-1]]:3: warning: variable 'p_local0' of type 'int' can be declared 'const'35  // CHECK-FIXES: int const p_local0 = 42;36}37 38template <typename SomeValue>39struct DoGooder {40  DoGooder(void *accessor, SomeValue value) {41  }42};43struct Bingus {44  static constexpr auto someRandomConstant = 99;45};46template <typename Foo>47struct HardWorker {48  HardWorker() {49    const DoGooder<int> anInstanceOf(nullptr, Foo::someRandomConstant);50  }51};52struct TheContainer {53  HardWorker<Bingus> m_theOtherInstance;54  // CHECK-FIXES-NOT: HardWorker<Bingus> const m_theOtherInstance55};56