Commit 66756373 by Jakub Jelinek Committed by Jakub Jelinek

re PR c/69768 (Bogus -Waddress warning)

	PR c/69768
	* c-typeck.c (parser_build_binary_op): Strip nops from integer_zerop
	arguments for -Waddress warning.

	* typeck.c (cp_build_binary_op): cp_fully_fold integer_zerop
	arguments for -Waddress warning.  Fix up formatting.

	* c-c++-common/Waddress-1.c: New test.

From-SVN: r233357
parent ec4836a7
2016-02-11 Jakub Jelinek <jakub@redhat.com>
PR c/69768
* c-typeck.c (parser_build_binary_op): Strip nops from integer_zerop
arguments for -Waddress warning.
2016-02-04 Jakub Jelinek <jakub@redhat.com> 2016-02-04 Jakub Jelinek <jakub@redhat.com>
PR c/69669 PR c/69669
......
...@@ -3597,8 +3597,10 @@ parser_build_binary_op (location_t location, enum tree_code code, ...@@ -3597,8 +3597,10 @@ parser_build_binary_op (location_t location, enum tree_code code,
of testing for equality or inequality of a string literal with NULL. */ of testing for equality or inequality of a string literal with NULL. */
if (code == EQ_EXPR || code == NE_EXPR) if (code == EQ_EXPR || code == NE_EXPR)
{ {
if ((code1 == STRING_CST && !integer_zerop (arg2.value)) if ((code1 == STRING_CST
|| (code2 == STRING_CST && !integer_zerop (arg1.value))) && !integer_zerop (tree_strip_nop_conversions (arg2.value)))
|| (code2 == STRING_CST
&& !integer_zerop (tree_strip_nop_conversions (arg1.value))))
warning_at (location, OPT_Waddress, warning_at (location, OPT_Waddress,
"comparison with string literal results in unspecified behavior"); "comparison with string literal results in unspecified behavior");
} }
......
2016-02-11 Jakub Jelinek <jakub@redhat.com>
PR c/69768
* typeck.c (cp_build_binary_op): cp_fully_fold integer_zerop
arguments for -Waddress warning. Fix up formatting.
2016-02-11 Paolo Carlini <paolo.carlini@oracle.com> 2016-02-11 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/68726 PR c++/68726
......
...@@ -4487,9 +4487,12 @@ cp_build_binary_op (location_t location, ...@@ -4487,9 +4487,12 @@ cp_build_binary_op (location_t location,
warning (OPT_Wfloat_equal, warning (OPT_Wfloat_equal,
"comparing floating point with == or != is unsafe"); "comparing floating point with == or != is unsafe");
if ((complain & tf_warning) if ((complain & tf_warning)
&& ((TREE_CODE (orig_op0) == STRING_CST && !integer_zerop (op1)) && ((TREE_CODE (orig_op0) == STRING_CST
|| (TREE_CODE (orig_op1) == STRING_CST && !integer_zerop (op0)))) && !integer_zerop (cp_fully_fold (op1)))
warning (OPT_Waddress, "comparison with string literal results in unspecified behaviour"); || (TREE_CODE (orig_op1) == STRING_CST
&& !integer_zerop (cp_fully_fold (op0)))))
warning (OPT_Waddress, "comparison with string literal results "
"in unspecified behaviour");
build_type = boolean_type_node; build_type = boolean_type_node;
if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE
......
2016-02-11 Jakub Jelinek <jakub@redhat.com>
PR c/69768
* c-c++-common/Waddress-1.c: New test.
2016-02-11 Andre Vehreschild <vehre@gcc.gnu.org> 2016-02-11 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/69296 PR fortran/69296
......
/* PR c/69768 */
/* { dg-do compile } */
/* { dg-options "-Waddress" } */
static int e;
int
foo ()
{
return "foo1" != (void *) 0 /* { dg-bogus "comparison with string literal results in unspecified behaviou?r" } */
&& "foo2" != (const char *) ((void *) 0) /* { dg-bogus "comparison with string literal results in unspecified behaviou?r" } */
&& "foo3" != (const char *) ((void *) (10 - 10)) /* { dg-bogus "comparison with string literal results in unspecified behaviou?r" } */
&& "foo4" != (const char *) ((void *) (&e - &e)) /* { dg-warning "comparison with string literal results in unspecified behaviou?r" "" { target c } } */
&& "foo5" != "foo6"; /* { dg-warning "comparison with string literal results in unspecified behaviou?r" } */
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment