PR c++/86586 - -fcompare-debug=-Wsign-compare.

This patch limits constexpr folding for -Wsign-compare to only cases that we
would warn for without considering constant values, avoiding the folding in
the testcase in question.

gcc/c-family/
	* c-warn.c (warn_for_sign_compare): Call fold_for_warn.
gcc/cp/
	* typeck.c (cp_build_binary_op): Don't fold for -Wsign-compare.

From-SVN: r270136
This commit is contained in:
Jason Merrill 2019-04-03 16:12:00 -04:00 committed by Jason Merrill
parent b8836dbec1
commit 7a506c3c63
5 changed files with 13 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2019-04-03 Jason Merrill <jason@redhat.com>
PR c++/86586 - -fcompare-debug=-Wsign-compare.
* c-warn.c (warn_for_sign_compare): Call fold_for_warn.
2019-04-01 Martin Sebor <msebor@redhat.com>
PR c/89685

View File

@ -2073,6 +2073,9 @@ warn_for_sign_compare (location_t location,
else
sop = orig_op1, uop = orig_op0;
sop = fold_for_warn (sop);
uop = fold_for_warn (uop);
STRIP_TYPE_NOPS (sop);
STRIP_TYPE_NOPS (uop);
base_type = (TREE_CODE (result_type) == COMPLEX_TYPE

View File

@ -1,5 +1,8 @@
2019-04-03 Jason Merrill <jason@redhat.com>
PR c++/86586 - -fcompare-debug=-Wsign-compare.
* typeck.c (cp_build_binary_op): Don't fold for -Wsign-compare.
PR c++/89331 - ICE with offsetof in incomplete class.
* semantics.c (finish_offsetof): Handle error_mark_node.
* typeck.c (build_class_member_access_expr): Call

View File

@ -5486,14 +5486,7 @@ cp_build_binary_op (const op_location_t &location,
&& !enum_cast_to_int (orig_op0)
&& !enum_cast_to_int (orig_op1))
{
tree oop0 = maybe_constant_value (orig_op0);
tree oop1 = maybe_constant_value (orig_op1);
if (TREE_CODE (oop0) != INTEGER_CST)
oop0 = cp_fully_fold (orig_op0);
if (TREE_CODE (oop1) != INTEGER_CST)
oop1 = cp_fully_fold (orig_op1);
warn_for_sign_compare (location, oop0, oop1, op0, op1,
warn_for_sign_compare (location, orig_op0, orig_op1, op0, op1,
result_type, resultcode);
}
}

View File

@ -1,7 +1,7 @@
/* Test case to check if Multiversioning works. */
/* { dg-do run } */
/* { dg-require-ifunc "" } */
/* { dg-options "-O2 -fPIC" } */
/* { dg-options "-O2 -fPIC -fcompare-debug=-Wsign-compare" } */
#include <assert.h>