| # Copyright (C) 2005-2022 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with GCC; see the file COPYING3. If not see |
| # <http://www.gnu.org/licenses/>. |
| |
| # This file contains a set of test that check that gcc options are |
| # documented in --help, and that the various --help* options work. |
| |
| load_lib options.exp |
| load_lib gcc-defs.exp |
| |
| # These tests don't run runtest_file_p consistently if it |
| # doesn't return the same values, so disable parallelization |
| # of this *.exp file. The first parallel runtest to reach |
| # this will run all the tests serially. |
| if ![gcc_parallel_test_run_p help] { |
| return |
| } |
| gcc_parallel_test_enable 0 |
| |
| # GCC breaks up --help output into lines at most $COLUMNS characters |
| # wide (or 80 when COLUMNS is not defined), set the COLUMNS environment |
| # variable to a value large enough to prevent this (and restore it when |
| # done). |
| global env |
| |
| if [ info exists env(COLUMNS) ] { |
| set prev_columns $env(COLUMNS) |
| } |
| |
| set env(COLUMNS) 1024 |
| |
| # Document --version. Ideally, there should be no undocumented switches |
| # in --help. |
| check_for_options c "--help" "--version" "This option lacks documentation" "" |
| |
| # Output from different subprocesses should not be intermingled |
| # (we check for some patterns that could be seen with a missing |
| # fflush in gcc.c). |
| check_for_options c "-v --help" "" { |
| [^\n]The following options |
| -Wconversion[^\n]*lacks documentation |
| " -g " |
| } "" |
| |
| # There are still undocumented switches in -v --help. |
| check_for_options c "-v --help" "" "This option lacks documentation" "xfail" |
| |
| # Check whether multiline conversion in optc-gen is broken. |
| check_for_options c "-v --help" "" {are likely to\n -std} "" |
| |
| # Try various --help= classes and qualifiers. |
| check_for_options c "--help=optimizers" "-O" " -g " "" |
| check_for_options c "--help=params" "maximum number of" "-Wunsafe-loop-optimizations" "" |
| check_for_options_with_filter c "--help=params" \ |
| "^The following options control parameters:$" "" {[^.]$} "" |
| check_for_options c "--help=C" "-ansi" "-gnatO" "" |
| check_for_options c {--help=C++} {-std=c\+\+} "-gnatO" "" |
| check_for_options c "--help=common" "-dumpbase" "-gnatO" "" |
| check_for_options c "--help=undocumented" "This option lacks documentation" "" "" |
| |
| # Undocumented flags are not yet consistently marked as such. |
| check_for_options c "--help=^undocumented" "-Wall" "This option lacks documentation" "xfail" |
| |
| # Try some --help=* examples from the manual. |
| check_for_options c "--help=target,undocumented" "" "" "" |
| check_for_options c "--help=target,optimizers" "" "" "" |
| check_for_options c "--help=warnings,^joined,^undocumented" "" "" "" |
| check_for_options c "-Q -O2 --help=optimizers" { |
| -O |
| -ftree-loop-vectorize[^\n]*enabled |
| } " -g " "" |
| check_for_options c "-Q -O3 --help=optimizers" { |
| -O |
| -ftree-loop-vectorize[^\n]*enabled |
| } " -g " "" |
| # Try repeated --help=. |
| check_for_options c "--help=params --help=optimizers" { |
| maximum number of |
| -O |
| } "" "" |
| |
| # Verify that a C++/Objective C++ only option is indicated as such |
| # by the C compiler. |
| check_for_options c "-Q --help=warnings" { |
| -Wclass-memaccess[ \t]+\[available in C\+\+, ObjC\+\+\] |
| } "" "" |
| |
| # Do the same for a C/Objective C only option and the C++ compiler. |
| check_for_options c++ "-Q --help=warnings" { |
| -Wabsolute-value[ \t]+\[available in C, ObjC\] |
| } "" "" |
| |
| # Verify that an option that's an alias for another option is shown |
| # with the other option as the value. |
| check_for_options c "-Q --help=warnings" { |
| --all-warnings[ \t]+\-Wall |
| -W[ \t]+-Wextra |
| -Wmissing-format-attribute[ \t]+-Wsuggest-attribute=format |
| -Wno-alloc-size-larger-than[ \t]+-Walloc-size-larger-than=[1-9][0-9]+ |
| -Wno-vla-larger-than[ \t]+-Wvla-larger-than=[1-9][0-9]+ |
| } "" "" |
| |
| # Verify that an option that expects a byte-size argument is shown with |
| # a meaningful byte-size argument as the value. |
| check_for_options c "-Q --help=warnings" { |
| -Walloc-size-larger-than=<bytes>[ \t]+[1-9][0-9]+ bytes |
| -Wlarger-than=[^\n\r]+[1-9][0-9]+ bytes |
| } "" "" |
| |
| # Ensure PR 37805 is fixed. |
| # Specify patterns (arguments 3 and later) that match option names |
| # at the beginning of the line and not when they are referenced by |
| # some other options later on. |
| check_for_options c "--help=joined" \ |
| "^ +-Wformat=" "^ +-fstrict-prototype" "" |
| check_for_options c "--help=separate" \ |
| "^ +-MF" "^ +-fstrict-prototype" "" |
| check_for_options c "--help=warnings,joined" \ |
| "^ +-Wformat=" "^ +-Wtrigraphs" "" |
| check_for_options c "--help=warnings,^joined" \ |
| "^ +-Wtrigraphs" "^ +-Wformat=" "" |
| check_for_options c "--help=joined,separate" \ |
| "^ +-I" "" "" |
| check_for_options c "--help=joined,^separate" \ |
| "^ +--help=" "" "" |
| check_for_options c "--help=joined,undocumented" "" "" "" |
| |
| # Check to make sure the description for every option is a complete |
| # sentence ending in a period. This matters not just for consistency |
| # but also because other sentences may be appended to it by the help |
| # subsystem. Do this one help class at a time to make it easier to |
| # find the source a failure. |
| |
| foreach cls { "ada" "c" "c++" "d" "fortran" "go" \ |
| "common" "optimizers" "param" "target" "warnings" } { |
| check_for_options c "--help=$cls" "" "^ +-.*\[^:.\]$" "" |
| } |
| |
| # Listing only excludes gives empty results. |
| check_for_options c "--help=^joined,^separate" "" "" "" |
| |
| if [ info exists prev_columns ] { |
| # Reset the enviroment variable to its oriuginal value. |
| set env(COLUMNS) $prev_columns |
| } else { |
| # Remove the variable from the environment if it didn't exist |
| # to begin with to avoid affecting subsequent tests. |
| array unset env COLUMNS |
| } |
| |
| gcc_parallel_test_enable 1 |