aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2020-06-18 20:37:51 +0200
committerMartin Liska <mliska@suse.cz>2020-06-24 09:24:06 +0200
commit7f967bd2a7ba156ede3fbb147e66dea5fb7137a6 (patch)
treed878005d2bf9eb6a66d34a86e132021134b3eff2 /gcc
parent4543acc87455646f2a910fe7a3322395a45255f0 (diff)
downloadgcc-7f967bd2a7ba156ede3fbb147e66dea5fb7137a6.zip
gcc-7f967bd2a7ba156ede3fbb147e66dea5fb7137a6.tar.gz
gcc-7f967bd2a7ba156ede3fbb147e66dea5fb7137a6.tar.bz2
options: Properly compare string options.
gcc/ChangeLog: * optc-save-gen.awk: Compare string options in cl_optimization_compare by strcmp.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/optc-save-gen.awk20
1 files changed, 16 insertions, 4 deletions
diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk
index 1b01008..760bf26 100644
--- a/gcc/optc-save-gen.awk
+++ b/gcc/optc-save-gen.awk
@@ -126,8 +126,10 @@ for (i = 0; i < n_opts; i++) {
else if (otype ~ "^signed +char *$")
var_opt_range[name] = "-128, 127"
}
- else if (otype ~ "^const char \\**$")
+ else if (otype ~ "^const char \\**$") {
var_opt_string[n_opt_string++] = name;
+ string_options_names[name]++
+ }
else
var_opt_other[n_opt_other++] = name;
}
@@ -382,8 +384,10 @@ if (have_save) {
if (otype == var_type(flags[i]))
var_target_range[name] = ""
}
- else if (otype ~ "^const char \\**$")
+ else if (otype ~ "^const char \\**$") {
var_target_string[n_target_string++] = name;
+ string_options_names[name]++
+ }
else
var_target_other[n_target_other++] = name;
}
@@ -966,8 +970,16 @@ for (i = 0; i < n_opts; i++) {
continue;
checked_options[name]++
- print " if (ptr1->x_" name " != ptr2->x_" name ")"
- print " internal_error (\"%<global_options%> are modified in local context\");";
+ if (name in string_options_names) {
+ print " if (ptr1->x_" name " != ptr2->x_" name "";
+ print " && (!ptr1->x_" name" || !ptr2->x_" name
+ print " || strcmp (ptr1->x_" name", ptr2->x_" name ")))";
+ print " internal_error (\"%<global_options%> are modified in local context\");";
+ }
+ else {
+ print " if (ptr1->x_" name " != ptr2->x_" name ")"
+ print " internal_error (\"%<global_options%> are modified in local context\");";
+ }
}
print "}";