On 7/27/20 9:46 AM, Hu Jiangping wrote:
Hi!

This patch makes the -falign-foo=0 work as described in the
documentation. Thanks for all the suggestions, Richard and Segher!

Hello.

I'm the author of the original code.


v3: make change more readable and self-consistent
v2: at a high level handles -falign-foo=0 like -falign-foo

Regards!
Hujp

---
  gcc/opts.c | 24 +++++++++++++++++++-----
  1 file changed, 19 insertions(+), 5 deletions(-)

diff --git a/gcc/opts.c b/gcc/opts.c
index 499eb900643..dec5ba6d2be 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -2007,10 +2007,20 @@ parse_and_check_align_values (const char *flag,
     location LOC.  */
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;
+  }

Hm, shouldn't the code be placed in parse_and_check_align_values? Note that 
there's
one another call gcc/toplev.c (parse_N_M).

I bet you likely want to modify result_values in case -falign-foo=0.
About the -falign-foo=0:m:n2:m3, you can report an error in 
parse_and_check_align_values?

Thanks for working on that?
Btw. what's your use-case that you use the extended syntax of -falign-foo?
Martin

  }
/* Print help when OPT__help_ is set. */
@@ -2785,19 +2795,23 @@ 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_:


Reply via email to