[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]
Related show

Commit Message

Hu, Jiangping July 27, 2020, 12:05 p.m.
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(-)

-- 
2.17.1

Comments

Richard Sandiford July 27, 2020, 5:24 p.m. | #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_:

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_: