Hi! This patch makes the -falign-foo=0 work as described in the documentation. Thanks for all the suggestions, Richard and Segher!
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; + } } /* 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_: -- 2.17.1