diff options
author | Martin Sebor <msebor@redhat.com> | 2018-07-20 20:51:20 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2018-07-20 14:51:20 -0600 |
commit | 00abf86c47606f8220d6508654ef52ef11d76e3d (patch) | |
tree | 9fa355c5a990f19e6fa77fffaa11f37da0124134 /gcc/opt-functions.awk | |
parent | 20e8ceae67be4186c4f20b4fb96f7cfade9853a7 (diff) | |
download | gcc-00abf86c47606f8220d6508654ef52ef11d76e3d.zip gcc-00abf86c47606f8220d6508654ef52ef11d76e3d.tar.gz gcc-00abf86c47606f8220d6508654ef52ef11d76e3d.tar.bz2 |
PR middle-end/82063 - issues with arguments enabled by -Wall
gcc/ada/ChangeLog:
PR middle-end/82063
* gcc-interface/misc.c (gnat_handle_option): Change function argument
to HOST_WIDE_INT.
gcc/brig/ChangeLog:
PR middle-end/82063
* brig/brig-lang.c (brig_langhook_handle_option): Change function
argument to HOST_WIDE_INT.
gcc/c-family/ChangeLog:
PR middle-end/82063
* c-common.h (c_common_handle_option): Change function argument
to HOST_WIDE_INT.
* c-opts.c (c_common_init_options): Same.
(c_common_handle_option): Same. Remove special handling of
OPT_Walloca_larger_than_ and OPT_Wvla_larger_than_.
* c.opt (-Walloc-size-larger-than, -Walloca-larger-than): Change
options to take a HOST_WIDE_INT argument and accept a byte-size
suffix. Initialize.
(-Wvla-larger-than): Same.
(-Wno-alloc-size-larger-than, -Wno-alloca-larger-than): New.
(-Wno-vla-larger-than): Same.
gcc/fortran/ChangeLog:
PR middle-end/82063
* gfortran.h (gfc_handle_option): Change function argument
to HOST_WIDE_INT.
* options.c (gfc_handle_option): Same.
gcc/go/ChangeLog:
PR middle-end/82063
* go-lang.c (go_langhook_handle_option): Change function argument
to HOST_WIDE_INT.
gcc/lto/ChangeLog:
PR middle-end/82063
* lto-lang.c (lto_handle_option): Change function argument
to HOST_WIDE_INT.
gcc/testsuite/ChangeLog:
PR middle-end/82063
* gcc/testsuite/c-c++-common/pr68657-1.c: Adjust.
* gcc/testsuite/c-c++-common/pr68657-2.c: Same.
* gcc/testsuite/c-c++-common/pr68657-3.c: Same.
* gcc.dg/Walloc-size-larger-than-16.c: Same.
* gcc.dg/Walloca-larger-than.c: New test.
* gcc.dg/Walloca-larger-than-2.c: New test.
* gcc.dg/Wframe-larger-than-2.c: New test.
* gcc.dg/Wlarger-than3.c: New test.
* gcc.dg/Wvla-larger-than-3.c: New test.
* gcc.dg/pr42611.c: Adjust.
* gnat.dg/frame_overflow.adb: Same.
gcc/ChangeLog:
PR middle-end/82063
* builtins.c (expand_builtin_alloca): Adjust.
* calls.c (alloc_max_size): Simplify.
* cgraphunit.c (cgraph_node::expand): Adjust.
* common.opt (larger_than_size, warn_frame_larger_than): Remove
variables.
(frame_larger_than_size): Same.
(-Wframe-larger-than, -Wlarger-than, -Wstack-usage): Change options
to take a HOST_WIDE_INT argument and accept a byte-size suffix.
Initialize.
* doc/invoke.texi (GCC Command Options): Document option arguments.
Explain byte-size arguments and suffixes.
(-Wvla-larger-than, -Wno-alloc-size-larger-than): Update.
(-Wno-alloca-larger-than, -Wno-vla-larger-than): Same.
(-Wframe-larger-than, -Wlarger-than, -Wstack-usage): Same.
* doc/options.texi (UInteger): Expand.
(Host_Wide_Int, ByteSize): Document new properties.
* final.c (final_start_function_1): Include sizes in an error message.
* function.c (frame_offset_overflow): Same.
* gimple-ssa-warn-alloca.c (pass_walloca::gate): Adjust.
(alloca_call_type_by_arg): Change function argument to HOST_WIDE_INT.
Diagnose unbounded alloca calls only for limits of less than
PTRDIFF_MAX.
(alloca_call_type): Adjust. Diagnose possibly out-of-bounds alloca
calls and VLA size only for limits of less than PTRDIFF_MAX. Same
for alloca(0).
(pass_walloca::execute): Adjust. Diagnose alloca calls in loops
only for limits of less than PTRDIFF_MAX.
* langhooks-def.h (lhd_handle_option): Change function argument
to HOST_WIDE_INT.
* langhooks.c (lhd_handle_option): Same.
* langhooks.h (handle_option): Same.
* opt-functions.awk (switch_bit_fields): Handle Host_Wide_Int and
ByteSize flags.
(var_type, var_type_struct): Same.
(var_set): Handle ByteSize flag.
* optc-gen.awk: Add comments to output to ease debugging. Make
use of HOST_WIDE_INT where appropriate.
* opts-gen-save.awk: Use %lx to format unsigned long.
* opth-gen.awk: Change function argument to HOST_WIDE_INT.
* opts-common.c (integral_argument): Return HOST_WIDE_INT and add
arguments. Parse bytes-size suffixes.
(enum_arg_to_value): Change function argument to HOST_WIDE_INT.
(enum_value_to_arg): Same.
(decode_cmdline_option): Handle cl_host_wide_int. Adjust.
(handle_option): Adjust.
(generate_option): Change function argument to HOST_WIDE_INT.
(cmdline_handle_error): Adjust.
(read_cmdline_option): Change function argument to HOST_WIDE_INT.
(set_option): Change function argument to HOST_WIDE_INT.
(option_enabled): Handle cl_host_wide_int.
(get_option_state): Handle CLVC_SIZE.
(control_warning_option): Same.
* opts.c (common_handle_option): Change function argument to
HOST_WIDE_INT. Remove handling of OPT_Walloca_larger_than_ and
OPT_Wvla_larger_than_.
* opts.h (enum cl_var_type): Add an enumerator.
* stor-layout.c (layout_decl): Print a more meaningful warning.
* toplev.c (output_stack_usage): Adjust.
From-SVN: r262910
Diffstat (limited to 'gcc/opt-functions.awk')
-rw-r--r-- | gcc/opt-functions.awk | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk index 2c371e5..6611bf3 100644 --- a/gcc/opt-functions.awk +++ b/gcc/opt-functions.awk @@ -113,9 +113,14 @@ function switch_flags (flags) # Return bit-field initializers for option flags FLAGS. function switch_bit_fields (flags) { + uinteger_flag = "" vn = var_name(flags); if (host_wide_int[vn] == "yes") hwi = "Host_Wide_Int" + else if (flag_set_p("Host_Wide_Int", flags)) { + hwi = "Host_Wide_Int" + uinteger_flag = flag_init("UInteger", flags) + } else hwi = "" result = "" @@ -126,6 +131,20 @@ function switch_bit_fields (flags) sep_args-- result = result sep_args ", " + if (uinteger_flag == "") + uinteger_flag = flag_init("UInteger", flags) + + hwi_flag = flag_init("Host_Wide_Int", hwi) + byte_size_flag = flag_init("ByteSize", flags) + + if (substr(byte_size_flag, 1, 1) != "0" \ + && substr(uinteger_flag, 1, 1) == "0" \ + && substr(hwi_flag, 1, 1) == "0") + print "#error only UInteger amd Host_Wide_Int options can specify a ByteSize suffix" + + # The following flags need to be in the same order as + # the corresponding members of struct cl_option defined + # in gcc/opts.h. result = result \ flag_init("SeparateAlias", flags) \ flag_init("NegativeAlias", flags) \ @@ -133,11 +152,12 @@ function switch_bit_fields (flags) flag_init("RejectDriver", flags) \ flag_init("RejectNegative", flags) \ flag_init("JoinedOrMissing", flags) \ - flag_init("UInteger", flags) \ - flag_init("Host_Wide_Int", hwi) \ + uinteger_flag \ + hwi_flag \ flag_init("ToLower", flags) \ flag_init("Report", flags) \ - flag_init("Deprecated", flags) + flag_init("Deprecated", flags) \ + byte_size_flag sub(", $", "", result) return result @@ -200,6 +220,8 @@ function var_type(flags) } else if (!flag_set_p("Joined.*", flags) && !flag_set_p("Separate", flags)) return "int " + else if (flag_set_p("Host_Wide_Int", flags)) + return "HOST_WIDE_INT " else if (flag_set_p("UInteger", flags)) return "int " else @@ -211,8 +233,13 @@ function var_type(flags) # type instead of int to save space. function var_type_struct(flags) { - if (flag_set_p("UInteger", flags)) - return "int " + if (flag_set_p("UInteger", flags)) { + if (host_wide_int[var_name(flags)] == "yes") + return "HOST_WIDE_INT "; + if (flag_set_p("ByteSize", flags)) + return "HOST_WIDE_INT " + return "int " + } else if (flag_set_p("Enum.*", flags)) { en = opt_args("Enum", flags); return enum_type[en] " " @@ -222,7 +249,7 @@ function var_type_struct(flags) if (host_wide_int[var_name(flags)] == "yes") return "HOST_WIDE_INT " else - return "int " + return "/* - */ int " } else return "signed char " @@ -262,6 +289,8 @@ function var_set(flags) } if (var_type(flags) == "const char *") return "0, CLVC_STRING, 0" + if (flag_set_p("ByteSize", flags)) + return "0, CLVC_SIZE, 0" return "0, CLVC_BOOLEAN, 0" } |