+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)
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;