diff mbox

[C] Don't print -Waddress comparison warnings for macros (PR c/48778)

Message ID 20160301141052.GZ14947@redhat.com
State New
Headers show

Commit Message

Marek Polacek March 1, 2016, 2:10 p.m. UTC
This PR from 2011 reports that -Waddress prints unhelpful warning when the
comparison comes from a macro.  Since I've added from_macro_expansion_at,
this is easy to circumvent.  I'm not so sure we actually want to disable
the warning in the case of a macro, but probably yes.

Bootstrapped/regtested on x86_64-linux, ok for trunk or should I defer to
GCC 7?

2016-03-01  Marek Polacek  <polacek@redhat.com>

	PR c/48778
	* c-typeck.c (build_binary_op): Don't issue -Waddress warnings
	for macro expansions.

	* gcc.dg/Waddress-2.c: New test.


	Marek

Comments

Jeff Law March 1, 2016, 11:38 p.m. UTC | #1
On 03/01/2016 07:10 AM, Marek Polacek wrote:
> This PR from 2011 reports that -Waddress prints unhelpful warning when the
> comparison comes from a macro.  Since I've added from_macro_expansion_at,
> this is easy to circumvent.  I'm not so sure we actually want to disable
> the warning in the case of a macro, but probably yes.
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk or should I defer to
> GCC 7?
>
> 2016-03-01  Marek Polacek  <polacek@redhat.com>
>
> 	PR c/48778
> 	* c-typeck.c (build_binary_op): Don't issue -Waddress warnings
> 	for macro expansions.
>
> 	* gcc.dg/Waddress-2.c: New test.
I think deferral is the best option here.

jeff
Marek Polacek March 2, 2016, 7:18 a.m. UTC | #2
On Tue, Mar 01, 2016 at 04:38:13PM -0700, Jeff Law wrote:
> On 03/01/2016 07:10 AM, Marek Polacek wrote:
> >This PR from 2011 reports that -Waddress prints unhelpful warning when the
> >comparison comes from a macro.  Since I've added from_macro_expansion_at,
> >this is easy to circumvent.  I'm not so sure we actually want to disable
> >the warning in the case of a macro, but probably yes.
> >
> >Bootstrapped/regtested on x86_64-linux, ok for trunk or should I defer to
> >GCC 7?
> >
> >2016-03-01  Marek Polacek  <polacek@redhat.com>
> >
> >	PR c/48778
> >	* c-typeck.c (build_binary_op): Don't issue -Waddress warnings
> >	for macro expansions.
> >
> >	* gcc.dg/Waddress-2.c: New test.
> I think deferral is the best option here.

I agree.  I will hold off, thanks.

	Marek
Jeff Law April 27, 2016, 9:07 p.m. UTC | #3
On 03/01/2016 07:10 AM, Marek Polacek wrote:
> This PR from 2011 reports that -Waddress prints unhelpful warning when the
> comparison comes from a macro.  Since I've added from_macro_expansion_at,
> this is easy to circumvent.  I'm not so sure we actually want to disable
> the warning in the case of a macro, but probably yes.
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk or should I defer to
> GCC 7?
>
> 2016-03-01  Marek Polacek  <polacek@redhat.com>
>
> 	PR c/48778
> 	* c-typeck.c (build_binary_op): Don't issue -Waddress warnings
> 	for macro expansions.
>
> 	* gcc.dg/Waddress-2.c: New test.
I've got mixed feelings about this patch.  Though we have traditionally 
desired to suppress some warnings that occur due to macro expansions, 
based on that, I'll ack for the trunk.

Thanks,
jeff
diff mbox

Patch

diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
index 6aa0f03..0f415e0 100644
--- gcc/c/c-typeck.c
+++ gcc/c/c-typeck.c
@@ -11087,7 +11087,8 @@  build_binary_op (location_t location, enum tree_code code,
       else if (code0 == POINTER_TYPE && null_pointer_constant_p (orig_op1))
 	{
 	  if (TREE_CODE (op0) == ADDR_EXPR
-	      && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0)))
+	      && decl_with_nonnull_addr_p (TREE_OPERAND (op0, 0))
+	      && !from_macro_expansion_at (location))
 	    {
 	      if (code == EQ_EXPR)
 		warning_at (location,
@@ -11107,7 +11108,8 @@  build_binary_op (location_t location, enum tree_code code,
       else if (code1 == POINTER_TYPE && null_pointer_constant_p (orig_op0))
 	{
 	  if (TREE_CODE (op1) == ADDR_EXPR
-	      && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0)))
+	      && decl_with_nonnull_addr_p (TREE_OPERAND (op1, 0))
+	      && !from_macro_expansion_at (location))
 	    {
 	      if (code == EQ_EXPR)
 		warning_at (location,
diff --git gcc/testsuite/gcc.dg/Waddress-2.c gcc/testsuite/gcc.dg/Waddress-2.c
index e69de29..4d927f6 100644
--- gcc/testsuite/gcc.dg/Waddress-2.c
+++ gcc/testsuite/gcc.dg/Waddress-2.c
@@ -0,0 +1,24 @@ 
+/* PR c/48778 */
+/* { dg-do compile } */
+/* { dg-options "-Waddress" } */
+
+#define NULL ((void *) 0)
+
+#define M1(b) ((b) != NULL ? 0 : (b))
+#define M2(b) ((b) == NULL ? 0 : (b))
+#define M3(b) (NULL != (b) ? 0 : (b))
+#define M4(b) (NULL == (b) ? 0 : (b))
+
+int
+func (int b)
+{
+  if (M1 (&b) > 0)
+    return 1;
+  if (M2 (&b) > 0)
+    return 2;
+  if (M3 (&b) > 0)
+    return 3;
+  if (M4 (&b) > 0)
+    return 4;
+  return 0;
+}