re PR c++/86569 (-Wnonnull-compare affects code generation since r233684)
PR c++/86569 * cp-gimplify.c (cp_fold): Don't fold comparisons into other kind of expressions other than INTEGER_CST regardless of TREE_NO_WARNING or warn_nonnull_compare. * g++.dg/warn/Wnonnull-compare-9.C: New test. From-SVN: r262928
This commit is contained in:
parent
d9690d237c
commit
315aa691f4
4 changed files with 33 additions and 5 deletions
|
@ -1,3 +1,10 @@
|
|||
2018-07-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/86569
|
||||
* cp-gimplify.c (cp_fold): Don't fold comparisons into other kind
|
||||
of expressions other than INTEGER_CST regardless of TREE_NO_WARNING
|
||||
or warn_nonnull_compare.
|
||||
|
||||
2018-07-19 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
Revert fix for c++/59480 (and testsuite followup)
|
||||
|
|
|
@ -2381,21 +2381,26 @@ cp_fold (tree x)
|
|||
else
|
||||
x = fold (x);
|
||||
|
||||
if (TREE_NO_WARNING (org_x)
|
||||
&& warn_nonnull_compare
|
||||
&& COMPARISON_CLASS_P (org_x))
|
||||
/* This is only needed for -Wnonnull-compare and only if
|
||||
TREE_NO_WARNING (org_x), but to avoid that option affecting code
|
||||
generation, we do it always. */
|
||||
if (COMPARISON_CLASS_P (org_x))
|
||||
{
|
||||
if (x == error_mark_node || TREE_CODE (x) == INTEGER_CST)
|
||||
;
|
||||
else if (COMPARISON_CLASS_P (x))
|
||||
TREE_NO_WARNING (x) = 1;
|
||||
{
|
||||
if (TREE_NO_WARNING (org_x) && warn_nonnull_compare)
|
||||
TREE_NO_WARNING (x) = 1;
|
||||
}
|
||||
/* Otherwise give up on optimizing these, let GIMPLE folders
|
||||
optimize those later on. */
|
||||
else if (op0 != TREE_OPERAND (org_x, 0)
|
||||
|| op1 != TREE_OPERAND (org_x, 1))
|
||||
{
|
||||
x = build2_loc (loc, code, TREE_TYPE (org_x), op0, op1);
|
||||
TREE_NO_WARNING (x) = 1;
|
||||
if (TREE_NO_WARNING (org_x) && warn_nonnull_compare)
|
||||
TREE_NO_WARNING (x) = 1;
|
||||
}
|
||||
else
|
||||
x = org_x;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-07-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/86569
|
||||
* g++.dg/warn/Wnonnull-compare-9.C: New test.
|
||||
|
||||
2018-07-20 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR middle-end/82063
|
||||
|
|
11
gcc/testsuite/g++.dg/warn/Wnonnull-compare-9.C
Normal file
11
gcc/testsuite/g++.dg/warn/Wnonnull-compare-9.C
Normal file
|
@ -0,0 +1,11 @@
|
|||
// PR c++/86569
|
||||
// { dg-do compile }
|
||||
// { dg-options "-fcompare-debug=-Wnonnull-compare" }
|
||||
|
||||
bool b;
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return ((!b) != 0);
|
||||
}
|
Loading…
Add table
Reference in a new issue