diff mbox series

[v4] driver: fix a problem with implementation of -falign-foo=0 [PR96247]

Message ID 20200727120558.13110-1-hujiangping@cn.fujitsu.com
State New
Headers show
Series [v4] driver: fix a problem with implementation of -falign-foo=0 [PR96247] | expand

Commit Message

Hu, Jiangping July 27, 2020, 12:05 p.m. UTC
Hi!

This patch makes the -falign-foo=0 work as described in the
documentation. Thanks for all the suggestions.

v4: do changes for coding conventions
v3: make change more readable and self-consistent

Changelog:
2020-07-27  Hu Jiangping  <hujiangping@cn.fujitsu.com>

	PR driver/96247
	* opts.c (check_alignment_argument): Set the -falign-Name
	on/off flag on and set the -falign-Name string value null,
	when the command-line specified argument is zero.

Tested on x86_64.

Regards!
Hujp

---
 gcc/opts.c | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

Comments

Richard Sandiford July 27, 2020, 5:24 p.m. UTC | #1
Hu Jiangping <hujiangping@cn.fujitsu.com> writes:
> Hi!
>
> This patch makes the -falign-foo=0 work as described in the
> documentation. Thanks for all the suggestions.
>
> v4: do changes for coding conventions
> v3: make change more readable and self-consistent
>
> Changelog:
> 2020-07-27  Hu Jiangping  <hujiangping@cn.fujitsu.com>
>
> 	PR driver/96247
> 	* opts.c (check_alignment_argument): Set the -falign-Name
> 	on/off flag on and set the -falign-Name string value null,
> 	when the command-line specified argument is zero.

Thanks, pushed to master.

Richard

>
> Tested on x86_64.
>
> Regards!
> Hujp
>
> ---
>  gcc/opts.c | 28 ++++++++++++++++++++++------
>  1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/opts.c b/gcc/opts.c
> index 499eb900643..574b28416fb 100644
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -2004,13 +2004,21 @@ parse_and_check_align_values (const char *flag,
>  }
>  
>  /* Check that alignment value FLAG for -falign-NAME is valid at a given
> -   location LOC.  */
> +   location LOC. OPT_STR points to the stored -falign-NAME=argument and
> +   OPT_FLAG points to the associated -falign-NAME on/off flag.  */
>  
>  static void
> -check_alignment_argument (location_t loc, const char *flag, const char *name)
> +check_alignment_argument (location_t loc, const char *flag, const char *name,
> +                        int *opt_flag, const char **opt_str)
>  {
>    auto_vec<unsigned> align_result;
>    parse_and_check_align_values (flag, name, align_result, true, loc);
> +
> +  if (align_result.length() >= 1 && align_result[0] == 0)
> +    {
> +      *opt_flag = 1;
> +      *opt_str = NULL;
> +    }
>  }
>  
>  /* Print help when OPT__help_ is set.  */
> @@ -2785,19 +2793,27 @@ common_handle_option (struct gcc_options *opts,
>        break;
>  
>      case OPT_falign_loops_:
> -      check_alignment_argument (loc, arg, "loops");
> +      check_alignment_argument (loc, arg, "loops",
> +                                &opts->x_flag_align_loops,
> +                                &opts->x_str_align_loops);
>        break;
>  
>      case OPT_falign_jumps_:
> -      check_alignment_argument (loc, arg, "jumps");
> +      check_alignment_argument (loc, arg, "jumps",
> +                                &opts->x_flag_align_jumps,
> +                                &opts->x_str_align_jumps);
>        break;
>  
>      case OPT_falign_labels_:
> -      check_alignment_argument (loc, arg, "labels");
> +      check_alignment_argument (loc, arg, "labels",
> +                                &opts->x_flag_align_labels,
> +                                &opts->x_str_align_labels);
>        break;
>  
>      case OPT_falign_functions_:
> -      check_alignment_argument (loc, arg, "functions");
> +      check_alignment_argument (loc, arg, "functions",
> +                                &opts->x_flag_align_functions,
> +                                &opts->x_str_align_functions);
>        break;
>  
>      case OPT_ftabstop_:
diff mbox series

Patch

diff --git a/gcc/opts.c b/gcc/opts.c
index 499eb900643..574b28416fb 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -2004,13 +2004,21 @@  parse_and_check_align_values (const char *flag,
 }
 
 /* Check that alignment value FLAG for -falign-NAME is valid at a given
-   location LOC.  */
+   location LOC. OPT_STR points to the stored -falign-NAME=argument and
+   OPT_FLAG points to the associated -falign-NAME on/off flag.  */
 
 static void
-check_alignment_argument (location_t loc, const char *flag, const char *name)
+check_alignment_argument (location_t loc, const char *flag, const char *name,
+                        int *opt_flag, const char **opt_str)
 {
   auto_vec<unsigned> align_result;
   parse_and_check_align_values (flag, name, align_result, true, loc);
+
+  if (align_result.length() >= 1 && align_result[0] == 0)
+    {
+      *opt_flag = 1;
+      *opt_str = NULL;
+    }
 }
 
 /* Print help when OPT__help_ is set.  */
@@ -2785,19 +2793,27 @@  common_handle_option (struct gcc_options *opts,
       break;
 
     case OPT_falign_loops_:
-      check_alignment_argument (loc, arg, "loops");
+      check_alignment_argument (loc, arg, "loops",
+                                &opts->x_flag_align_loops,
+                                &opts->x_str_align_loops);
       break;
 
     case OPT_falign_jumps_:
-      check_alignment_argument (loc, arg, "jumps");
+      check_alignment_argument (loc, arg, "jumps",
+                                &opts->x_flag_align_jumps,
+                                &opts->x_str_align_jumps);
       break;
 
     case OPT_falign_labels_:
-      check_alignment_argument (loc, arg, "labels");
+      check_alignment_argument (loc, arg, "labels",
+                                &opts->x_flag_align_labels,
+                                &opts->x_str_align_labels);
       break;
 
     case OPT_falign_functions_:
-      check_alignment_argument (loc, arg, "functions");
+      check_alignment_argument (loc, arg, "functions",
+                                &opts->x_flag_align_functions,
+                                &opts->x_str_align_functions);
       break;
 
     case OPT_ftabstop_: