[PATCH] underline null argument in -Wnonnull (PR c++/86568)

Jakub Jelinek jakub@redhat.com
Mon Jun 29 11:52:43 GMT 2020


On Fri, Jun 05, 2020 at 01:41:16PM -0600, Martin Sebor via Gcc-patches wrote:
> PR c++/86568 - -Wnonnull warnings should highlight the relevant argument not the closing parenthesis
> 
> gcc/c-family/ChangeLog:
> 
> 	PR c++/86568
> 	* c-common.c (struct nonnull_arg_ctx): Add members.
> 	(check_function_nonnull): Use nonnull_arg_ctx as argument.  Handle
> 	C++ member functions specially.  Consider the this pointer implicitly
> 	nonnull.
> 	(check_nonnull_arg): Use location of argument when available.
> 	(check_function_arguments): Use nonnull_arg_ctx as argument.
> 
> gcc/ChangeLog:
> 
> 	PR c++/86568
> 	* calls.c (maybe_warn_rdwr_sizes): Use location of argument if
> 	available.
> 	* tree-ssa-ccp.c (pass_post_ipa_warn::execute): Same.  Adjust
> 	indentation.
> 	* tree.c (get_nonnull_args): Consider the this pointer implicitly
> 	nonnull.
> 	* gcc/var-tracking.c (deps_vec): New type.
> 	(var_loc_dep_vec): New function.
> 	(VAR_LOC_DEP_VEC): Use it.

This broke c-c++-common/builtin-arith-overflow-1.c on all arches.

Fixed thusly, tested on x86_64-linux, committed to trunk as obvious.

2020-06-29  Jakub Jelinek  <jakub@redhat.com>

	PR c++/86568
	* c-c++-common/builtin/arith-overflow-1.c (generic_3, typed_3_null):
	Adjust dg-warning.

--- gcc/testsuite/c-c++-common/builtin-arith-overflow-1.c.jj	2020-01-12 11:54:37.001404537 +0100
+++ gcc/testsuite/c-c++-common/builtin-arith-overflow-1.c	2020-06-29 13:41:27.057188795 +0200
@@ -82,20 +82,20 @@ generic_3 (int a, int b, int c)
     x += __builtin_add_overflow (0, 0, (enum E *)0);
   */
 
-  x += __builtin_sub_overflow (0, 0, (char *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_add_overflow (0, 0, (short *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_add_overflow (a, b, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_sub_overflow (a, b, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_mul_overflow (a, b, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_add_overflow (a, 1, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_sub_overflow (a, 2, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_mul_overflow (a, 3, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_add_overflow (4, b, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_sub_overflow (5, b, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_mul_overflow (6, b, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_add_overflow (7, 8, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_sub_overflow (9, 10, (int *)0);   /* { dg-warning "null argument" } */
-  x += __builtin_mul_overflow (11, 12, (int *)0);   /* { dg-warning "null argument" } */
+  x += __builtin_sub_overflow (0, 0, (char *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_add_overflow (0, 0, (short *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_add_overflow (a, b, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_sub_overflow (a, b, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_mul_overflow (a, b, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_add_overflow (a, 1, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_sub_overflow (a, 2, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_mul_overflow (a, 3, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_add_overflow (4, b, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_sub_overflow (5, b, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_mul_overflow (6, b, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_add_overflow (7, 8, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_sub_overflow (9, 10, (int *)0);   /* { dg-warning "argument 3 null" } */
+  x += __builtin_mul_overflow (11, 12, (int *)0);   /* { dg-warning "argument 3 null" } */
 
   return x;
 }
@@ -167,34 +167,34 @@ typed_3_null (int a, int b)
 {
   int x = 0;
 
-  x += __builtin_sadd_overflow (a, b, (int *)0); /* { dg-warning "null argument" } */
-  x += __builtin_uadd_overflow (a, b, (unsigned *)0); /* { dg-warning "null argument" } */
+  x += __builtin_sadd_overflow (a, b, (int *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_uadd_overflow (a, b, (unsigned *)0); /* { dg-warning "argument 3 null" } */
 
-  x += __builtin_saddl_overflow (a, b, (long *)0); /* { dg-warning "null argument" } */
-  x += __builtin_uaddl_overflow (a, b, (unsigned long *)0); /* { dg-warning "null argument" } */
+  x += __builtin_saddl_overflow (a, b, (long *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_uaddl_overflow (a, b, (unsigned long *)0); /* { dg-warning "argument 3 null" } */
 
-  x += __builtin_saddll_overflow (a, b, (long long *)0); /* { dg-warning "null argument" } */
-  x += __builtin_uaddll_overflow (a, b, (unsigned long long *)0); /* { dg-warning "null argument" } */
+  x += __builtin_saddll_overflow (a, b, (long long *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_uaddll_overflow (a, b, (unsigned long long *)0); /* { dg-warning "argument 3 null" } */
 
 
-  x += __builtin_ssub_overflow (a, b, (int *)0); /* { dg-warning "null argument" } */
-  x += __builtin_usub_overflow (a, b, (unsigned *)0); /* { dg-warning "null argument" } */
+  x += __builtin_ssub_overflow (a, b, (int *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_usub_overflow (a, b, (unsigned *)0); /* { dg-warning "argument 3 null" } */
 
-  x += __builtin_ssubl_overflow (a, b, (long *)0); /* { dg-warning "null argument" } */
-  x += __builtin_usubl_overflow (a, b, (unsigned long *)0); /* { dg-warning "null argument" } */
+  x += __builtin_ssubl_overflow (a, b, (long *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_usubl_overflow (a, b, (unsigned long *)0); /* { dg-warning "argument 3 null" } */
 
-  x += __builtin_ssubll_overflow (a, b, (long long *)0); /* { dg-warning "null argument" } */
-  x += __builtin_usubll_overflow (a, b, (unsigned long long *)0); /* { dg-warning "null argument" } */
+  x += __builtin_ssubll_overflow (a, b, (long long *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_usubll_overflow (a, b, (unsigned long long *)0); /* { dg-warning "argument 3 null" } */
 
 
-  x += __builtin_smul_overflow (a, b, (int *)0); /* { dg-warning "null argument" } */
-  x += __builtin_umul_overflow (a, b, (unsigned *)0); /* { dg-warning "null argument" } */
+  x += __builtin_smul_overflow (a, b, (int *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_umul_overflow (a, b, (unsigned *)0); /* { dg-warning "argument 3 null" } */
 
-  x += __builtin_smull_overflow (a, b, (long *)0); /* { dg-warning "null argument" } */
-  x += __builtin_umull_overflow (a, b, (unsigned long *)0); /* { dg-warning "null argument" } */
+  x += __builtin_smull_overflow (a, b, (long *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_umull_overflow (a, b, (unsigned long *)0); /* { dg-warning "argument 3 null" } */
 
-  x += __builtin_smulll_overflow (a, b, (long long *)0); /* { dg-warning "null argument" } */
-  x += __builtin_umulll_overflow (a, b, (unsigned long long *)0); /* { dg-warning "null argument" } */
+  x += __builtin_smulll_overflow (a, b, (long long *)0); /* { dg-warning "argument 3 null" } */
+  x += __builtin_umulll_overflow (a, b, (unsigned long long *)0); /* { dg-warning "argument 3 null" } */
 
   return x;
 }


	Jakub



More information about the Gcc-patches mailing list