1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
# Copyright (C) 2005-2024 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" "" "" ""
check_for_options c "--help=hardened" "The following options are enabled by -fhardened" "" ""
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
|