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.
This commit is contained in:
Hu Jiangping 2020-07-27 18:22:23 +01:00 committed by Richard Sandiford
parent 8939cef951
commit d60758c74a
1 changed files with 22 additions and 6 deletions

View File

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