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/doc | |
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/doc')
-rw-r--r-- | gcc/doc/invoke.texi | 163 | ||||
-rw-r--r-- | gcc/doc/options.texi | 43 |
2 files changed, 152 insertions, 54 deletions
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 9d75edb..1dcdfb5 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -121,6 +121,21 @@ these have both positive and negative forms; the negative form of @option{-ffoo} is @option{-fno-foo}. This manual documents only one of these two forms, whichever one is not the default. +Some options take one or more arguments typically separated either +by a space or by the equals sign (@samp{=}) from the option name. +Unless documented otherwise, an argument can be either numeric or +a string. Numeric arguments must typically be small unsigned decimal +or hexadecimal integers. Hexadecimal arguments must begin with +the @samp{0x} prefix. Arguments to options that specify a size +threshold of some sort may be arbitrarily large decimal or hexadecimal +integers followed by a byte size suffix designating a multiple of bytes +such as @code{kB} and @code{KiB} for kilobyte and kibibyte, respectively, +@code{MB} and @code{MiB} for megabyte and mebibyte, @code{GB} and +@code{GiB} for gigabyte and gigibyte, and so on. Such arguments are +designated by @var{byte-size} in the following text. Refer to the NIST, +IEC, and other relevant national and international standards for the full +listing and explanation of the binary and decimal byte size prefixes. + @c man end @xref{Option Index}, for an index to GCC's options. @@ -261,8 +276,8 @@ Objective-C and Objective-C++ Dialects}. @gccoptlist{-fsyntax-only -fmax-errors=@var{n} -Wpedantic @gol -pedantic-errors @gol -w -Wextra -Wall -Waddress -Waggregate-return @gol --Walloc-zero -Walloc-size-larger-than=@var{n} --Walloca -Walloca-larger-than=@var{n} @gol +-Walloc-zero -Walloc-size-larger-than=@var{byte-size} +-Walloca -Walloca-larger-than=@var{byte-size} @gol -Wno-aggressive-loop-optimizations -Warray-bounds -Warray-bounds=@var{n} @gol -Wno-attributes -Wbool-compare -Wbool-operation @gol -Wno-builtin-declaration-mismatch @gol @@ -285,14 +300,15 @@ Objective-C and Objective-C++ Dialects}. -Wformat-nonliteral -Wformat-overflow=@var{n} @gol -Wformat-security -Wformat-signedness -Wformat-truncation=@var{n} @gol -Wformat-y2k -Wframe-address @gol --Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol +-Wframe-larger-than=@var{byte-size} -Wno-free-nonheap-object @gol +-Wjump-misses-init @gol -Wif-not-aligned @gol -Wignored-qualifiers -Wignored-attributes -Wincompatible-pointer-types @gol -Wimplicit -Wimplicit-fallthrough -Wimplicit-fallthrough=@var{n} @gol -Wimplicit-function-declaration -Wimplicit-int @gol -Winit-self -Winline -Wno-int-conversion -Wint-in-bool-context @gol -Wno-int-to-pointer-cast -Winvalid-memory-model -Wno-invalid-offsetof @gol --Winvalid-pch -Wlarger-than=@var{len} @gol +-Winvalid-pch -Wlarger-than=@var{byte-size} @gol -Wlogical-op -Wlogical-not-parentheses -Wlong-long @gol -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args @gol -Wmisleading-indentation -Wmissing-attributes -Wmissing-braces @gol @@ -313,7 +329,7 @@ Objective-C and Objective-C++ Dialects}. -Wsign-compare -Wsign-conversion -Wfloat-conversion @gol -Wno-scalar-storage-order -Wsizeof-pointer-div @gol -Wsizeof-pointer-memaccess -Wsizeof-array-argument @gol --Wstack-protector -Wstack-usage=@var{len} -Wstrict-aliasing @gol +-Wstack-protector -Wstack-usage=@var{byte-size} -Wstrict-aliasing @gol -Wstrict-aliasing=n -Wstrict-overflow -Wstrict-overflow=@var{n} @gol -Wstringop-overflow=@var{n} -Wstringop-truncation @gol -Wsuggest-attribute=@r{[}pure@r{|}const@r{|}noreturn@r{|}format@r{|}malloc@r{]} @gol @@ -331,7 +347,8 @@ Objective-C and Objective-C++ Dialects}. -Wunused-const-variable -Wunused-const-variable=@var{n} @gol -Wunused-but-set-parameter -Wunused-but-set-variable @gol -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol --Wvla -Wvla-larger-than=@var{n} -Wvolatile-register-var -Wwrite-strings @gol +-Wvla -Wvla-larger-than=@var{byte-size} -Wvolatile-register-var @gol +-Wwrite-strings @gol -Wzero-as-null-pointer-constant -Whsa} @item C and Objective-C-only Warning Options @@ -5523,33 +5540,39 @@ when called with a zero size differs among implementations (and in the case of @code{realloc} has been deprecated) relying on it may result in subtle portability bugs and should be avoided. -@item -Walloc-size-larger-than=@var{n} -@opindex Walloc-size-larger-than=@var{n} +@item -Walloc-size-larger-than=@var{byte-size} +@opindex Walloc-size-larger-than= @opindex Wno-alloc-size-larger-than Warn about calls to functions decorated with attribute @code{alloc_size} that attempt to allocate objects larger than the specified number of bytes, or where the result of the size computation in an integer type with infinite -precision would exceed @code{SIZE_MAX / 2}. The option argument @var{n} is -treated as an integer with infinite precision and may end in one of -the standard suffixes designating a multiple of bytes such as @code{kB} and -@code{KiB} for kilobyte and kibibyte, respectively, @code{MB} and @code{MiB} -for megabyte and mebibyte, and so on. -@option{-Walloc-size-larger-than=}@var{PTRDIFF_MAX} is enabled by default. +precision would exceed the value of @samp{PTRDIFF_MAX} on the target. +@option{-Walloc-size-larger-than=}@samp{PTRDIFF_MAX} is enabled by default. Warnings controlled by the option can be disabled either by specifying -@var{n} of @var{SIZE_MAX} or more or by @option{-Wno-alloc-size-larger-than}. +@var{byte-size} of @samp{SIZE_MAX} or more or by +@option{-Wno-alloc-size-larger-than}. @xref{Function Attributes}. +@item -Wno-alloc-size-larger-than +@opindex Wno-alloc-size-larger-than +Disable @option{-Walloc-size-larger-than=} warnings. The option is +equivalent to @option{-Walloc-size-larger-than=}@samp{SIZE_MAX} or +larger. + @item -Walloca @opindex Wno-alloca @opindex Walloca This option warns on all uses of @code{alloca} in the source. -@item -Walloca-larger-than=@var{n} -This option warns on calls to @code{alloca} that are not bounded by a -controlling predicate limiting its argument of integer type to at most -@var{n} bytes, or calls to @code{alloca} where the bound is unknown. -Arguments of non-integer types are considered unbounded even if they -appear to be constrained to the expected range. +@item -Walloca-larger-than=@var{byte-size} +@opindex -Walloca-larger-than= +@opindex -Wno-alloca-larger-than +This option warns on calls to @code{alloca} with an integer argument whose +value is either zero, or that is not bounded by a controlling predicate +that limits its value to at most @var{byte-size}. It also warns for calls +to @code{alloca} where the bound value is unknown. Arguments of non-integer +types are considered unbounded even if they appear to be constrained to +the expected range. For example, a bounded case of @code{alloca} could be: @@ -5603,10 +5626,16 @@ expected argument to be implicitly cast into the @code{alloca} call. This option also warns when @code{alloca} is used in a loop. -This warning is not enabled by @option{-Wall}, and is only active when -@option{-ftree-vrp} is active (default for @option{-O2} and above). +@option{-Walloca-larger-than=}@samp{PTRDIFF_MAX} is enabled by default +but is usually only effective when @option{-ftree-vrp} is active (default +for @option{-O2} and above). -See also @option{-Wvla-larger-than=@var{n}}. +See also @option{-Wvla-larger-than=}@samp{byte-size}. + +@item -Wno-alloca-larger-than +@opindex Wno-alloca-larger-than +Disable @option{-Walloca-larger-than=} warnings. The option is +equivalent to @option{-Walloca-larger-than=}@samp{SIZE_MAX} or larger. @item -Warray-bounds @itemx -Warray-bounds=@var{n} @@ -5954,22 +5983,40 @@ possibly reduce the number of warnings triggered by intentional shadowing. This warning is enabled by @option{-Wshadow=local}. -@item -Wlarger-than=@var{len} -@opindex Wlarger-than=@var{len} -@opindex Wlarger-than-@var{len} -Warn whenever an object of larger than @var{len} bytes is defined. - -@item -Wframe-larger-than=@var{len} -@opindex Wframe-larger-than=@var{len} -@opindex Wframe-larger-than -Warn if the size of a function frame is larger than @var{len} bytes. +@item -Wlarger-than=@var{byte-size} +@opindex Wlarger-than= +@opindex Wlarger-than-@var{byte-size} +Warn whenever an object is defined whose size exceeds @var{byte-size}. +@option{-Wlarger-than=}@samp{PTRDIFF_MAX} is enabled by default. +Warnings controlled by the option can be disabled either by specifying +@var{byte-size} of @samp{SIZE_MAX} or more or by +@option{-Wno-larger-than}. + +@item -Wno-larger-than +@opindex Wno-larger-than +Disable @option{-Wlarger-than=} warnings. The option is equivalent +to @option{-Wlarger-than=}@samp{SIZE_MAX} or larger. + +@item -Wframe-larger-than=@var{byte-size} +@opindex Wframe-larger-than= +@opindex Wno-frame-larger-than +Warn if the size of a function frame exceeds @var{byte-size}. The computation done to determine the stack frame size is approximate and not conservative. -The actual requirements may be somewhat greater than @var{len} +The actual requirements may be somewhat greater than @var{byte-size} even if you do not get a warning. In addition, any space allocated via @code{alloca}, variable-length arrays, or related constructs is not included by the compiler when determining whether or not to issue a warning. +@option{-Wframe-larger-than=}@samp{PTRDIFF_MAX} is enabled by default. +Warnings controlled by the option can be disabled either by specifying +@var{byte-size} of @samp{SIZE_MAX} or more or by +@option{-Wno-frame-larger-than}. + +@item -Wno-frame-larger-than +@opindex Wno-frame-larger-than +Disable @option{-Wframe-larger-than=} warnings. The option is equivalent +to @option{-Wframe-larger-than=}@samp{SIZE_MAX} or larger. @item -Wno-free-nonheap-object @opindex Wno-free-nonheap-object @@ -5977,10 +6024,10 @@ whether or not to issue a warning. Do not warn when attempting to free an object that was not allocated on the heap. -@item -Wstack-usage=@var{len} +@item -Wstack-usage=@var{byte-size} @opindex Wstack-usage @opindex Wno-stack-usage -Warn if the stack usage of a function might be larger than @var{len} bytes. +Warn if the stack usage of a function might exceed @var{byte-size}. The computation done to determine the stack usage is conservative. Any space allocated via @code{alloca}, variable-length arrays, or related constructs is included by the compiler when determining whether or not to @@ -6009,6 +6056,24 @@ If the stack usage is (partly) dynamic and not bounded, it's: @end smallexample @end itemize +@option{-Wstack-usage=}@samp{PTRDIFF_MAX} is enabled by default. +Warnings controlled by the option can be disabled either by specifying +@var{byte-size} of @samp{SIZE_MAX} or more or by +@option{-Wno-stack-usage}. + +@item -Wno-stack-usage +@opindex Wno-stack-usage +Disable @option{-Wstack-usage=} warnings. The option is equivalent +to @option{-Wstack-usage=}@samp{SIZE_MAX} or larger. + +@item -Wunsafe-loop-optimizations +@opindex Wunsafe-loop-optimizations +@opindex Wno-unsafe-loop-optimizations +Warn if the loop cannot be optimized because the compiler cannot +assume anything on the bounds of the loop indices. With +@option{-funsafe-loop-optimizations} warn if the compiler makes +such assumptions. + @item -Wno-pedantic-ms-format @r{(MinGW targets only)} @opindex Wno-pedantic-ms-format @opindex Wpedantic-ms-format @@ -7011,21 +7076,29 @@ Warn if a variable-length array is used in the code. @option{-Wno-vla} prevents the @option{-Wpedantic} warning of the variable-length array. -@item -Wvla-larger-than=@var{n} -If this option is used, the compiler will warn on uses of -variable-length arrays where the size is either unbounded, or bounded -by an argument that can be larger than @var{n} bytes. This is similar -to how @option{-Walloca-larger-than=@var{n}} works, but with -variable-length arrays. +@item -Wvla-larger-than=@var{byte-size} +@opindex -Wvla-larger-than= +@opindex -Wno-vla-larger-than +If this option is used, the compiler will warn for declarations of +variable-length arrays whose size is either unbounded, or bounded +by an argument that allows the array size to exceed @var{byte-size} +bytes. This is similar to how @option{-Walloca-larger-than=}@var{byte-size} +works, but with variable-length arrays. Note that GCC may optimize small variable-length arrays of a known value into plain arrays, so this warning may not get triggered for such arrays. -This warning is not enabled by @option{-Wall}, and is only active when -@option{-ftree-vrp} is active (default for @option{-O2} and above). +@option{-Wvla-larger-than=}@samp{PTRDIFF_MAX} is enabled by default but +is typically only effective when @option{-ftree-vrp} is active (default +for @option{-O2} and above). + +See also @option{-Walloca-larger-than=@var{byte-size}}. -See also @option{-Walloca-larger-than=@var{n}}. +@item -Wno-vla-larger-than +@opindex Wno-vla-larger-than +Disable @option{-Wvla-larger-than=} warnings. The option is equivalent +to @option{-Wvla-larger-than=}@samp{SIZE_MAX} or larger. @item -Wvolatile-register-var @opindex Wvolatile-register-var diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index b3ca9f6..f887d16 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -257,17 +257,42 @@ For an option marked @code{Separate}, indicate that it takes @var{n} arguments. The default is 1. @item UInteger -The option's argument is a non-negative integer. The option parser -will check and convert the argument before passing it to the relevant -option handler. @code{UInteger} should also be used on options like -@code{-falign-loops} where both @code{-falign-loops} and -@code{-falign-loops}=@var{n} are supported to make sure the saved -options are given a full integer. +The option's argument is a non-negative integer consisting of either +decimal or hexadecimal digits interpreted as @code{int}. Hexadecimal +integers may optionally start with the @code{0x} or @code{0X} prefix. +The option parser validates and converts the argument before passing +it to the relevant option handler. @code{UInteger} should also be used +with options like @code{-falign-loops} where both @code{-falign-loops} +and @code{-falign-loops}=@var{n} are supported to make sure the saved +options are given a full integer. Positive values of the argument in +excess of @code{INT_MAX} wrap around zero. + +@item Host_Wide_Int +The option's argument is a non-negative integer consisting of either +decimal or hexadecimal digits interpreted as the widest integer type +on the host. As with an @code{UInteger} argument, hexadecimal integers +may optionally start with the @code{0x} or @code{0X} prefix. The option +parser validates and converts the argument before passing it to +the relevant option handler. @code{Host_Wide_Int} should be used with +options that need to accept very large values. Positive values of +the argument in excess of @code{HOST_WIDE_INT_M1U} are assigned +@code{HOST_WIDE_INT_M1U}. @item IntegerRange(@var{n}, @var{m}) -The options's arguments are integer numbers. The option's parser -will check that value of an option is inclusively within the -range [@var{n}, @var{m}]. +The options's arguments are integers of type @code{int}. The option's +parser validates that the value of an option integer argument is within +the closed range [@var{n}, @var{m}]. + +@item ByteSize +A property applicable only to @code{UInteger} or @code{Host_Wide_Int} +arguments. The option's integer argument is interpreted as if in infinite +precision using saturation arithmetic in the corresponding type. The argument +may be followed by a @samp{byte-size} suffix designating a multiple of bytes +such as @code{kB} and @code{KiB} for kilobyte and kibibyte, respectively, +@code{MB} and @code{MiB} for megabyte and mebibyte, @code{GB} and @code{GiB} +for gigabyte and gigibyte, and so on. @code{ByteSize} should be used for +with options that take a very large argument representing a size in bytes, +such as @option{-Wlarger-than=}. @item ToLower The option's argument should be converted to lowercase as part of |