diff options
author | Richard Trieu <rtrieu@google.com> | 2014-06-06 21:39:26 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2014-06-06 21:39:26 +0000 |
commit | f7432755d0c09b8c01ced9c3b0f337a85a1ccf96 (patch) | |
tree | 98eb15262ae6867573cf0d0d7a538149d0b1494d /clang/test/SemaCXX/warn-undefined-bool-conversion.cpp | |
parent | d0700b29195b72c3af8dc8f05dfb6ed04ca3e907 (diff) | |
download | bcm5719-llvm-f7432755d0c09b8c01ced9c3b0f337a85a1ccf96.tar.gz bcm5719-llvm-f7432755d0c09b8c01ced9c3b0f337a85a1ccf96.zip |
Add -Wtautological-undefined-compare and -Wundefined-bool-conversion warnings
to detect underfined behavior involving pointers.
llvm-svn: 210372
Diffstat (limited to 'clang/test/SemaCXX/warn-undefined-bool-conversion.cpp')
-rw-r--r-- | clang/test/SemaCXX/warn-undefined-bool-conversion.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/warn-undefined-bool-conversion.cpp b/clang/test/SemaCXX/warn-undefined-bool-conversion.cpp new file mode 100644 index 00000000000..c56b6bc1595 --- /dev/null +++ b/clang/test/SemaCXX/warn-undefined-bool-conversion.cpp @@ -0,0 +1,37 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wundefined-bool-conversion %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wno-bool-conversion -Wundefined-bool-conversion %s +// RUN: %clang_cc1 -fsyntax-only -verify -Wbool-conversion %s + +void test1(int &x) { + if (x == 1) { } + if (&x) { } + // expected-warning@-1{{reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed always converted to true}} + + if (!&x) { } + // expected-warning@-1{{reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed always converted to true}} +} + +class test2 { + test2() : x(y) {} + + void foo() { + if (this) { } + // expected-warning@-1{{'this' pointer cannot be null in well-defined C++ code; pointer may be assumed always converted to true}} + + if (!this) { } + // expected-warning@-1{{'this' pointer cannot be null in well-defined C++ code; pointer may be assumed always converted to true}} + } + + void bar() { + if (x == 1) { } + if (&x) { } + // expected-warning@-1{{reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed always converted to true}} + + if (!&x) { } + // expected-warning@-1{{reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed always converted to true}} + } + + int &x; + int y; +}; |