re PR c++/70295 (bogus -Wnonnull-compare for "dynamic_cast<const FuSelection *>(this) != nullptr")
PR c++/70295 * gimplify.c (gimplify_modify_expr): Call gimple_set_no_warning on assign if (*from_p) is a comparison, set it to TREE_NO_WARNING (*from_p). * c-c++-common/nonnull-1.c (func): Remove parens around cp4 != 0. (func2): New function for cond with parens, xfail warning for c++. * g++.dg/warn/Wnonnull-compare-8.C: New test. From-SVN: r234392
This commit is contained in:
parent
16f6d7dc5c
commit
4cde512c84
|
@ -1,3 +1,10 @@
|
|||
2016-03-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/70295
|
||||
* gimplify.c (gimplify_modify_expr): Call gimple_set_no_warning
|
||||
on assign if (*from_p) is a comparison, set it to
|
||||
TREE_NO_WARNING (*from_p).
|
||||
|
||||
2016-03-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/70326
|
||||
|
|
|
@ -4850,6 +4850,8 @@ gimplify_modify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
|||
{
|
||||
assign = gimple_build_assign (*to_p, *from_p);
|
||||
gimple_set_location (assign, EXPR_LOCATION (*expr_p));
|
||||
if (COMPARISON_CLASS_P (*from_p))
|
||||
gimple_set_no_warning (assign, TREE_NO_WARNING (*from_p));
|
||||
}
|
||||
|
||||
if (gimplify_ctxp->into_ssa && is_gimple_reg (*to_p))
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2016-03-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/70295
|
||||
* c-c++-common/nonnull-1.c (func): Remove parens around cp4 != 0.
|
||||
(func2): New function for cond with parens, xfail warning for c++.
|
||||
* g++.dg/warn/Wnonnull-compare-8.C: New test.
|
||||
|
||||
2016-03-22 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
PR c++/70096
|
||||
|
|
|
@ -24,5 +24,11 @@ func (char *cp1, char *cp2, char *cp3, char *cp4)
|
|||
if (NULL != cp3) /* { dg-warning "nonnull argument" "cp3 compared to NULL" } */
|
||||
return 3;
|
||||
|
||||
return (cp4 != 0) ? 0 : 1; /* { dg-warning "nonnull argument" "cp4 compared to NULL" } */
|
||||
return cp4 != 0 ? 0 : 1; /* { dg-warning "nonnull argument" "cp4 compared to NULL" } */
|
||||
}
|
||||
|
||||
__attribute__((nonnull (1))) int
|
||||
func2 (char *cp)
|
||||
{
|
||||
return (cp != NULL) ? 1 : 0; /* { dg-warning "nonnull argument" "cp compared to NULL" { xfail c++ } } */
|
||||
}
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// PR c++/70295
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -Wnonnull-compare" }
|
||||
|
||||
struct A { A (); virtual ~A (); bool foo (bool); };
|
||||
struct B : virtual public A { B (); virtual ~B (); };
|
||||
|
||||
bool
|
||||
A::foo (bool x)
|
||||
{
|
||||
if (x && dynamic_cast<B *>(this) != (B *) 0) // { dg-bogus "nonnull argument" }
|
||||
return true;
|
||||
return false;
|
||||
}
|
Loading…
Reference in New Issue