aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts.c
diff options
context:
space:
mode:
authorHu Jiangping <hujiangping@cn.fujitsu.com>2020-07-27 18:22:23 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2020-07-27 18:22:23 +0100
commitd60758c74af849539f5dd71a8456eea954c0f674 (patch)
tree30041717acac7b6eb2c18ab19255227fcd69541f /gcc/opts.c
parent8939cef9512704dfd18d97ad3e66d6ce233e9452 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc/opts.c')
-rw-r--r--gcc/opts.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/gcc/opts.c b/gcc/opts.c
index 499eb900..6628f7e 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_: