This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 3 of 3] print help for undocumented options


On 10/22/2015 03:47 PM, Joseph Myers wrote:
On Thu, 22 Oct 2015, Martin Sebor wrote:

While fixing up the ChangeLogs for the commit (as requested below)
I noticed that a number of new options have been added with help
text with no period at the end.  The attached patch fixes those
up and adds a test to help catch these problems before they creep
in again.

I'm concerned about the test setting the environment variable COLUMNS;
won't that affect every subsequent test (including from other .exp files)
in the same runtest process?  .exp files setting environment variables
need to save and restore them.

Good point. It didn't occur to me that the "leaf" .exp files are all
part of the same process.

While testing it, I noticed that a COLUMNS setting in the environment
can cause some other tests in the help.exp file to fail. Setting the
variable early on fixes that. (It seems the environment should be
sanitized lower down in the test driver, and for all tests. But I'm
not planning to tackle that.)

Attached is the updated patch.

Martin
gcc/ChangeLog:

2015-10-22  Martin Sebor  <msebor@redhat.com>

	PR driver/68043
	* config/i386/i386.opt: Add missing periods to the ends of sentences.
	* config/msp430/msp430.opt: Same.

gcc/testsuite/ChangeLog:

2015-10-22  Martin Sebor  <msebor@redhat.com>

	PR driver/68043
	* gcc.misc-tests/help.exp: Verify that option descriptions
	end in periods.
	* lib/options.exp (check_for_options): Use the regexp --line option.
	Print unexpected match on failure.

Index: gcc/config/i386/i386.opt
===================================================================
--- gcc/config/i386/i386.opt	(revision 229177)
+++ gcc/config/i386/i386.opt	(working copy)
@@ -701,15 +701,15 @@

 mfma4
 Target Report Mask(ISA_FMA4) Var(ix86_isa_flags) Save
-Support FMA4 built-in functions and code generation
+Support FMA4 built-in functions and code generation.

 mxop
 Target Report Mask(ISA_XOP) Var(ix86_isa_flags) Save
-Support XOP built-in functions and code generation
+Support XOP built-in functions and code generation.

 mlwp
 Target Report Mask(ISA_LWP) Var(ix86_isa_flags) Save
-Support LWP built-in functions and code generation
+Support LWP built-in functions and code generation.

 mabm
 Target Report Mask(ISA_ABM) Var(ix86_isa_flags) Save
Index: gcc/config/msp430/msp430.opt
===================================================================
--- gcc/config/msp430/msp430.opt	(revision 229177)
+++ gcc/config/msp430/msp430.opt	(working copy)
@@ -83,8 +83,8 @@

 msilicon-errata=
 Target Joined RejectNegative Report ToLower
-Passes on a request to the assembler to enable fixes for various silicon errata
+Passes on a request to the assembler to enable fixes for various silicon errata.

 msilicon-errata-warn=
 Target Joined RejectNegative Report ToLower
-Passes on a request to the assembler to warn about various silicon errata
+Passes on a request to the assembler to warn about various silicon errata.
Index: gcc/testsuite/gcc.misc-tests/help.exp
===================================================================
--- gcc/testsuite/gcc.misc-tests/help.exp	(revision 229177)
+++ gcc/testsuite/gcc.misc-tests/help.exp	(working copy)
@@ -29,6 +29,18 @@
 }
 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" ""
@@ -81,25 +93,44 @@
 # 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.
-# The (?w) Tcl embedded option tells the Tcl regexp  parser to treat
-# the '^' character as an anchor.
 check_for_options c "--help=joined" \
-    "(?w)^ *-Wformat=" "(?w)^ *-fstrict-prototype" ""
+    "^ +-Wformat=" "^ +-fstrict-prototype" ""
 check_for_options c "--help=separate" \
-    "(?w)^ *-MF" "(?w)^ *-fstrict-prototype" ""
+    "^ +-MF" "^ +-fstrict-prototype" ""
 check_for_options c "--help=warnings,joined" \
-    "(?w)^ *-Wformat=" "(?w)^ *-Wtrigraphs" ""
+    "^ +-Wformat=" "^ +-Wtrigraphs" ""
 check_for_options c "--help=warnings,^joined" \
-    "(?w)^ *-Wtrigraphs" "(?w)^ *-Wformat=" ""
+    "^ +-Wtrigraphs" "^ +-Wformat=" ""
 check_for_options c "--help=joined,separate" \
-    "(?w)^ *-I" "" ""
+    "^ +-I" "" ""
 check_for_options c "--help=^joined,separate" \
-    "(?w)^ *--param " "" ""
+    "^ +--param " "" ""
 check_for_options c "--help=joined,^separate" \
-    "(?w)^ *--help=" "" ""
+    "^ +--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++" "fortran" "go" \
+		    "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 original 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
Index: gcc/testsuite/lib/options.exp
===================================================================
--- gcc/testsuite/lib/options.exp	(revision 229177)
+++ gcc/testsuite/lib/options.exp	(working copy)
@@ -50,7 +50,7 @@
     # Verify that COMPILER_PATTERRNS appear in gcc output.
     foreach pattern [split $compiler_patterns "\n"] {
 	if {$pattern != ""} {
-	    if {[regexp -- "$pattern" $gcc_output]} {
+	    if {[regexp -line -- "$pattern" $gcc_output]} {
 		pass "$test $pattern"
 	    } else {
 		if {$expected_failure != ""} {
@@ -65,13 +65,15 @@
     # Verify that COMPILER_NON_PATTERRNS do not appear in gcc output.
     foreach pattern [split $compiler_non_patterns "\n"] {
 	if {$pattern != ""} {
-	    if {![regexp -- "$pattern" $gcc_output]} {
+	    if {![regexp -line -- "$pattern" $gcc_output result]} {
 		pass "$test $pattern"
 	    } else {
 		if {$expected_failure != ""} {
 		    xfail "$test \"$pattern\" absent from output"
 		} else {
-		    fail "$test \"$pattern\" absent from output"
+		    # Print the unexpected line that caused the failure
+		    # to make it easier to find in the multiline output.
+		    fail "$test \"$pattern\" absent from output: \"$result\""
 		}
 	    }
 	}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]