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
|
# Copyright (C) 2005-2020 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]*disabled
} " -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
|