forked from OSchip/llvm-project
134 lines
4.0 KiB
C++
134 lines
4.0 KiB
C++
// RUN: %check_clang_tidy %s readability-avoid-const-params-in-decls %t
|
|
|
|
using alias_type = bool;
|
|
using alias_const_type = const bool;
|
|
|
|
|
|
void F1(const int i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is const-qualified in the function declaration; const-qualification of parameters only has an effect in function definitions [readability-avoid-const-params-in-decls]
|
|
// CHECK-FIXES: void F1(int i);
|
|
|
|
void F2(const int *const i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is const-qualified
|
|
// CHECK-FIXES: void F2(const int *i);
|
|
|
|
void F3(int const i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is const-qualified
|
|
// CHECK-FIXES: void F3(int i);
|
|
|
|
void F4(alias_type const i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'i' is const-qualified
|
|
// CHECK-FIXES: void F4(alias_type i);
|
|
|
|
void F5(const int);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is const-qualified
|
|
// CHECK-FIXES: void F5(int);
|
|
|
|
void F6(const int *const);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is const-qualified
|
|
// CHECK-FIXES: void F6(const int *);
|
|
|
|
void F7(int, const int);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: parameter 2 is const-qualified
|
|
// CHECK-FIXES: void F7(int, int);
|
|
|
|
void F8(const int, const int);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 1 is const-qualified
|
|
// CHECK-MESSAGES: :[[@LINE-2]]:20: warning: parameter 2 is const-qualified
|
|
// CHECK-FIXES: void F8(int, int);
|
|
|
|
void F9(const int long_name);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'long_name'
|
|
// CHECK-FIXES: void F9(int long_name);
|
|
|
|
void F10(const int *const *const long_name);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: parameter 'long_name'
|
|
// CHECK-FIXES: void F10(const int *const *long_name);
|
|
|
|
void F11(const unsigned int /*v*/);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: parameter 1
|
|
// CHECK-FIXES: void F11(unsigned int /*v*/);
|
|
|
|
void F12(const bool b = true);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: parameter 'b'
|
|
// CHECK-FIXES: void F12(bool b = true);
|
|
|
|
template<class T>
|
|
int F13(const bool b = true);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:9: warning: parameter 'b'
|
|
// CHECK-FIXES: int F13(bool b = true);
|
|
int f13 = F13<int>();
|
|
|
|
struct Foo {
|
|
Foo(const int i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: parameter 'i'
|
|
// CHECK-FIXES: Foo(int i);
|
|
|
|
void operator()(const int i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: parameter 'i'
|
|
// CHECK-FIXES: void operator()(int i);
|
|
};
|
|
|
|
template <class T>
|
|
struct FooT {
|
|
FooT(const int i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: parameter 'i'
|
|
// CHECK-FIXES: FooT(int i);
|
|
|
|
void operator()(const int i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: parameter 'i'
|
|
// CHECK-FIXES: void operator()(int i);
|
|
};
|
|
FooT<int> f(1);
|
|
|
|
// Do not match on definitions
|
|
void NF1(const int i) {}
|
|
void NF2(const int *const i) {}
|
|
void NF3(int const i) {}
|
|
void NF4(alias_type const i) {}
|
|
void NF5(const int) {}
|
|
void NF6(const int *const) {}
|
|
void NF7(int, const int) {}
|
|
void NF8(const int, const int) {}
|
|
template <class T>
|
|
int NF9(const int, const int) { return 0; }
|
|
int nf9 = NF9<int>(1, 2);
|
|
|
|
// Do not match on inline member functions
|
|
struct Bar {
|
|
Bar(const int i) {}
|
|
|
|
void operator()(const int i) {}
|
|
};
|
|
|
|
// Do not match on inline member functions of a templated class
|
|
template <class T>
|
|
struct BarT {
|
|
BarT(const int i) {}
|
|
|
|
void operator()(const int i) {}
|
|
};
|
|
BarT<int> b(1);
|
|
|
|
// Do not match on other stuff
|
|
void NF(const alias_type& i);
|
|
void NF(const int &i);
|
|
void NF(const int *i);
|
|
void NF(alias_const_type i);
|
|
void NF(const alias_type&);
|
|
void NF(const int&);
|
|
void NF(const int*);
|
|
void NF(const int* const*);
|
|
void NF(alias_const_type);
|
|
|
|
// Regression test for when the 'const' token is not in the code.
|
|
#define CONCAT(a, b) a##b
|
|
void ConstNotVisible(CONCAT(cons, t) int i);
|
|
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: parameter 'i'
|
|
// We warn, but we can't give a fix
|
|
// CHECK-FIXES: void ConstNotVisible(CONCAT(cons, t) int i);
|
|
|
|
// Regression test. We should not warn (or crash) on lambda expressions
|
|
auto lambda_with_name = [](const int n) {};
|
|
auto lambda_without_name = [](const int) {};
|