diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2011-06-19 09:05:14 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2011-06-19 09:05:14 +0000 |
commit | 2af68e4761ed30181540dafb5572993daffa4910 (patch) | |
tree | a53c7e2d4eaf30c6511feb0524827b53d470e982 /test/SemaCXX/null_in_arithmetic_ops.cpp | |
parent | e3d49b44ad0596b2998ecf2e7ca78d59188920e5 (diff) |
Add test cases for false positives on -Wnull-arithmetic from Richard
Trieu, and fix them by checking for array and function types as well as
pointer types.
I've added a predicate method on Type to bundle together the logic we're
using here: isPointerLikeType(). I'd welcome better names for this
predicate, this is the best I came up with. It's implemented as a switch
to be a touch lighter weight than all the chained isa<...> casts that
would result otherwise.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133383 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX/null_in_arithmetic_ops.cpp')
-rw-r--r-- | test/SemaCXX/null_in_arithmetic_ops.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/test/SemaCXX/null_in_arithmetic_ops.cpp b/test/SemaCXX/null_in_arithmetic_ops.cpp index b0303177c2..78c76e7e4c 100644 --- a/test/SemaCXX/null_in_arithmetic_ops.cpp +++ b/test/SemaCXX/null_in_arithmetic_ops.cpp @@ -59,6 +59,10 @@ void f() { b = 0 == a; b = 0 == &a; + b = NULL < NULL || NULL > NULL; + b = NULL <= NULL || NULL >= NULL; + b = NULL == NULL || NULL != NULL; + b = ((NULL)) != a; // expected-warning{{use of NULL in arithmetic operation}} void (^c)(); @@ -67,4 +71,11 @@ void f() { class X; void (X::*d) (); b = d == NULL || NULL == d || d != NULL || NULL != d; + + extern void e(); + b = e == NULL || NULL == e || e != NULL || NULL != e; + + int f[2]; + b = f == NULL || NULL == f || f != NULL || NULL != f; + b = "f" == NULL || NULL == "f" || "f" != NULL || NULL != "f"; } |