diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-02-23 13:58:53 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-02-23 13:58:53 +0100 |
commit | e67bf044ae4ad40fd0cc24f428ca9758cd920f97 (patch) | |
tree | a3bc76f90dc7fe653979363fdc0f18eeeb440730 /gcc | |
parent | f1a62b6fa8c1e5305d887559575506755f8aab69 (diff) | |
download | gcc-e67bf044ae4ad40fd0cc24f428ca9758cd920f97.zip gcc-e67bf044ae4ad40fd0cc24f428ca9758cd920f97.tar.gz gcc-e67bf044ae4ad40fd0cc24f428ca9758cd920f97.tar.bz2 |
re PR c++/69902 (Bogus -Wnonnull-compare for: dynamic_cast<T*>(&ref) == nullptr)
PR c++/69902
* fold-const.c (fold_truth_not_expr): Propagate TREE_NO_WARNING
when inverting comparison.
* g++.dg/warn/Wnonnull-compare-5.C: New test.
From-SVN: r233631
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/fold-const.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C | 18 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 020a1b3..951f208 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2016-02-23 Jakub Jelinek <jakub@redhat.com> + PR c++/69902 + * fold-const.c (fold_truth_not_expr): Propagate TREE_NO_WARNING + when inverting comparison. + PR c/69900 * common.opt (Wunreachable-code): Add Warning flag. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 41c652e..5376d4d 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3589,8 +3589,11 @@ fold_truth_not_expr (location_t loc, tree arg) if (code == ERROR_MARK) return NULL_TREE; - return build2_loc (loc, code, type, TREE_OPERAND (arg, 0), - TREE_OPERAND (arg, 1)); + tree ret = build2_loc (loc, code, type, TREE_OPERAND (arg, 0), + TREE_OPERAND (arg, 1)); + if (TREE_NO_WARNING (arg)) + TREE_NO_WARNING (ret) = 1; + return ret; } switch (code) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f83aa50..2b7fe37 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2016-02-23 Jakub Jelinek <jakub@redhat.com> + PR c++/69902 + * g++.dg/warn/Wnonnull-compare-5.C: New test. + PR c/69900 * gcc.dg/pr69900.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C new file mode 100644 index 0000000..8b31e6c --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wnonnull-compare-5.C @@ -0,0 +1,18 @@ +// PR c++/69902 +// { dg-do compile } +// { dg-options "-Wall" } + +struct A { virtual ~A (); }; +struct B : A {}; + +bool +foo (A &a) +{ + return dynamic_cast<B *>(&a) == (B *) 0; // { dg-bogus "nonnull argument" } +} + +bool +bar (A &a) +{ + return dynamic_cast<B *>(&a) != (B *) 0; // { dg-bogus "nonnull argument" } +} |