optc-save-gen.awk: adjust generated array compare

Message ID 56951572-c9b4-af2d-0e8b-9d47b87ba313@codesourcery.com
State New
Headers
Series optc-save-gen.awk: adjust generated array compare |

Commit Message

Chung-Lin Tang Sept. 8, 2022, 3:29 p.m. UTC
  Hi Joseph,
Jan-Benedict reported a build-bot error for the nios2 port under --enable-werror-always:

options-save.cc: In function 'bool cl_target_option_eq(const cl_target_option*, const cl_target_option*)':
options-save.cc:9291:38: error: comparison between two arrays [-Werror=array-compare]
 9291 |   if (ptr1->saved_custom_code_status != ptr2->saved_custom_code_status
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
options-save.cc:9291:38: note: use unary '+' which decays operands to pointers or '&'component_ref' not supported by dump_decl<declaration error>[0] != &'component_ref' not supported by dump_decl<declaration error>[0]' to compare the addresses
options-save.cc:9294:37: error: comparison between two arrays [-Werror=array-compare]
 9294 |   if (ptr1->saved_custom_code_index != ptr2->saved_custom_code_index
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...

This is due to an array-typed TargetSave state in config/nios2/nios2.opt:
...
TargetSave
enum nios2_ccs_code saved_custom_code_status[256]

TargetSave
int saved_custom_code_index[256]
...


This patch adjusts the generated array state compare from 'ptr1->array' into '&ptr1->array[0]' in gcc/optc-save-gen.awk,
seems sufficient to pass the tougher checks.

Tested by ensuring the compiler builds, which should be sufficient here.
Okay to commit to mainline?

Thanks,
Chung-Lin

	* optc-save-gen.awk: Adjust array compare to use '&ptr->name[0]'
	instead of 'ptr->name'.
  

Comments

Jason Merrill Sept. 8, 2022, 4:23 p.m. UTC | #1
On 9/8/22 11:29, Chung-Lin Tang wrote:
> Hi Joseph,
> Jan-Benedict reported a build-bot error for the nios2 port under --enable-werror-always:
> 
> options-save.cc: In function 'bool cl_target_option_eq(const cl_target_option*, const cl_target_option*)':
> options-save.cc:9291:38: error: comparison between two arrays [-Werror=array-compare]
>   9291 |   if (ptr1->saved_custom_code_status != ptr2->saved_custom_code_status
>        |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> options-save.cc:9291:38: note: use unary '+' which decays operands to pointers or '&'component_ref' not supported by dump_decl<declaration error>[0] != &'component_ref' not supported by dump_decl<declaration error>[0]' to compare the addresses
> options-save.cc:9294:37: error: comparison between two arrays [-Werror=array-compare]
>   9294 |   if (ptr1->saved_custom_code_index != ptr2->saved_custom_code_index
>        |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ...
> 
> This is due to an array-typed TargetSave state in config/nios2/nios2.opt:
> ...
> TargetSave
> enum nios2_ccs_code saved_custom_code_status[256]
> 
> TargetSave
> int saved_custom_code_index[256]
> ...
> 
> 
> This patch adjusts the generated array state compare from 'ptr1->array' into '&ptr1->array[0]' in gcc/optc-save-gen.awk,
> seems sufficient to pass the tougher checks.
> 
> Tested by ensuring the compiler builds, which should be sufficient here.
> Okay to commit to mainline?

Martin added the array support in r219636, any thoughts?

It seems to me that the warning is pointing out that comparing the 
address of the array is nonsensical, and we should remove it and just 
have the memcmp.

> Thanks,
> Chung-Lin
> 
> 	* optc-save-gen.awk: Adjust array compare to use '&ptr->name[0]'
> 	instead of 'ptr->name'.
  
Martin Liška Sept. 8, 2022, 6:01 p.m. UTC | #2
On 9/8/22 18:23, Jason Merrill wrote:
> It seems to me that the warning is pointing out that comparing the address of the array is nonsensical, and we should remove it and just have the memcmp.

Yes, thanks for the pointer. We should always compare the array types with memcmp.

Ready to be installed?
Thanks,
Martin
  
Jason Merrill Sept. 8, 2022, 7:35 p.m. UTC | #3
On 9/8/22 14:01, Martin Liška wrote:
> On 9/8/22 18:23, Jason Merrill wrote:
>> It seems to me that the warning is pointing out that comparing the address of the array is nonsensical, and we should remove it and just have the memcmp.
> 
> Yes, thanks for the pointer. We should always compare the array types with memcmp.
> 
> Ready to be installed?

OK.
  

Patch

diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk
index 233d1fbb637..27aabf2955e 100644
--- a/gcc/optc-save-gen.awk
+++ b/gcc/optc-save-gen.awk
@@ -1093,7 +1093,7 @@  for (i = 0; i < n_target_array; i++) {
 	name = var_target_array[i]
 	size = var_target_array_size[i]
 	type = var_target_array_type[i]
-	print "  if (ptr1->" name" != ptr2->" name "";
+	print "  if (&ptr1->" name"[0] != &ptr2->" name "[0]";
 	print "      || memcmp (ptr1->" name ", ptr2->" name ", " size " * sizeof(" type ")))"
 	print "    return false;";
 }