diff options
author | George Burgess IV <george.burgess.iv@gmail.com> | 2019-08-05 22:15:40 +0000 |
---|---|---|
committer | George Burgess IV <george.burgess.iv@gmail.com> | 2019-08-05 22:15:40 +0000 |
commit | f708f0a2430f3a50b8836f4bd5510169dea359eb (patch) | |
tree | dcfa191421f4caa3b48c13266d8deef7c764b47f /clang/test/Sema/warn-nullchar-nullptr.c | |
parent | dcdbe6515b21e0f210d087536c6fee74cb9fe37e (diff) | |
download | bcm5719-llvm-f708f0a2430f3a50b8836f4bd5510169dea359eb.tar.gz bcm5719-llvm-f708f0a2430f3a50b8836f4bd5510169dea359eb.zip |
[Sema] Add -Wpointer-compare
This patch adds a warning that diagnoses comparisons of pointers to
'\0'. This is often indicative of a bug (e.g. the user might've
forgotten to dereference the pointer).
Patch by Elaina Guan!
Differential Revision: https://reviews.llvm.org/D65595
llvm-svn: 367940
Diffstat (limited to 'clang/test/Sema/warn-nullchar-nullptr.c')
-rw-r--r-- | clang/test/Sema/warn-nullchar-nullptr.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/clang/test/Sema/warn-nullchar-nullptr.c b/clang/test/Sema/warn-nullchar-nullptr.c new file mode 100644 index 00000000000..36a126a0433 --- /dev/null +++ b/clang/test/Sema/warn-nullchar-nullptr.c @@ -0,0 +1,49 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wall %s + +int test1(int *a) { + return a == '\0'; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +int test2(int *a) { + return '\0' == a; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +int test3(int *a) { + return a == L'\0'; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +int test4(int *a) { + return a == u'\0'; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +int test5(int *a) { + return a == U'\0'; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +int test6(int *a) { + return a == (char)0; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +typedef char my_char; +int test7(int *a) { + return a == (my_char)0; + // expected-warning@-1 {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +int test8(int *a) { + return a != '\0'; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to (void *)0?}} +} + +#define NULL (void *)0 +int test9(int *a) { + return a == '\0'; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to NULL?}} +} + +#define MYCHAR char +int test10(int *a) { + return a == (MYCHAR)0; // expected-warning {{comparing a pointer to a null character constant; did you mean to compare to NULL?}} +} + +int test11(int *a) { + return a > '\0'; +} |