diff options
| author | Aaron Ballman <aaron@aaronballman.com> | 2016-06-07 17:22:47 +0000 |
|---|---|---|
| committer | Aaron Ballman <aaron@aaronballman.com> | 2016-06-07 17:22:47 +0000 |
| commit | cf6cefd88ae68ec9826821de7b9bf7161676930a (patch) | |
| tree | 2df6912c71de9827b1f2236d61669f73ba94c0c7 /clang-tools-extra/test | |
| parent | 968bb72f5869fe524c64ab520f66b05a57c3f561 (diff) | |
| download | bcm5719-llvm-cf6cefd88ae68ec9826821de7b9bf7161676930a.tar.gz bcm5719-llvm-cf6cefd88ae68ec9826821de7b9bf7161676930a.zip | |
Add the misc-misplaced-const check to clang-tidy, which diagnoses when a const-qualifier is applied to a typedef of pointer type rather than to the pointee type.
llvm-svn: 272025
Diffstat (limited to 'clang-tools-extra/test')
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/misc-misplaced-const.c | 45 | ||||
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/misc-misplaced-const.cpp | 37 |
2 files changed, 82 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/misc-misplaced-const.c b/clang-tools-extra/test/clang-tidy/misc-misplaced-const.c new file mode 100644 index 00000000000..cccf3a4506f --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/misc-misplaced-const.c @@ -0,0 +1,45 @@ +// RUN: %check_clang_tidy %s misc-misplaced-const %t + +typedef int plain_i; +typedef int *ip; +typedef const int *cip; + +typedef void (*func_ptr)(void); + +void func(void) { + // ok + const int *i0 = 0; + const plain_i *i1 = 0; + const cip i2 = 0; // const applies to both pointer and pointee. + + // Not ok + const ip i3 = 0; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'i3' declared with a const-qualified typedef type; results in the type being 'int *const' instead of 'const int *' + + ip const i4 = 0; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'i4' declared with a const-qualified + + const volatile ip i5 = 0; + // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: 'i5' declared with a const-qualified typedef type; results in the type being 'int *const volatile' instead of 'const int *volatile' +} + +void func2(const plain_i *i1, + const cip i2, + const ip i3, + // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: 'i3' declared with a const-qualified + const int *i4) { +} + +struct S { + const int *i0; + const plain_i *i1; + const cip i2; + const ip i3; + // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: 'i3' declared with a const-qualified +}; + +// Function pointers should not be diagnosed because a function +// pointer type can never be const. +void func3(const func_ptr fp) { + const func_ptr fp2 = fp; +} diff --git a/clang-tools-extra/test/clang-tidy/misc-misplaced-const.cpp b/clang-tools-extra/test/clang-tidy/misc-misplaced-const.cpp new file mode 100644 index 00000000000..5483cabae7f --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/misc-misplaced-const.cpp @@ -0,0 +1,37 @@ +// RUN: %check_clang_tidy %s misc-misplaced-const %t + +typedef int plain_i; +typedef int *ip; +typedef const int *cip; + +void func() { + if (const int *i = 0) + ; + if (const plain_i *i = 0) + ; + if (const cip i = 0) + ; + + // CHECK-MESSAGES: :[[@LINE+1]]:16: warning: 'i' declared with a const-qualified typedef type; results in the type being 'int *const' instead of 'const int *' + if (const ip i = 0) + ; +} + +template <typename Ty> +struct S { + const Ty *i; + const Ty &i2; +}; + +template struct S<int>; +template struct S<ip>; // ok +template struct S<cip>; +template struct S<int *>; // ok + +struct T { + typedef void (T::*PMF)(); + + void f() { + const PMF val = &T::f; // ok + } +}; |

