diff options
author | Hu Jiangping <hujiangping@cn.fujitsu.com> | 2020-07-27 18:22:23 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-07-27 18:22:23 +0100 |
commit | d60758c74af849539f5dd71a8456eea954c0f674 (patch) | |
tree | 30041717acac7b6eb2c18ab19255227fcd69541f | |
parent | 8939cef9512704dfd18d97ad3e66d6ce233e9452 (diff) | |
download | gcc-d60758c74af849539f5dd71a8456eea954c0f674.zip gcc-d60758c74af849539f5dd71a8456eea954c0f674.tar.gz gcc-d60758c74af849539f5dd71a8456eea954c0f674.tar.bz2 |
driver: fix a problem with implementation of -falign-foo=0 [PR96247]
This patch makes the -falign-foo=0 work as described in the
documentation. Thanks for all the suggestions.
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.
-rw-r--r-- | gcc/opts.c | 28 |
1 files changed, 22 insertions, 6 deletions
@@ -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_: |