Re: [PATCH, testsuite] Allow braces around relative line numbers

2017-04-15 Thread Mike Stump
On Apr 15, 2017, at 1:07 AM, Tom de Vries  wrote:
> I've attached two patches:
> 
> - second patch is the result of running the script.

> Second patch OK for stage4/stage1 trunk?

Ok.

> [ I'm not sure if the first patch is useful enough to commit to contrib. ]

Once the script it run, we shouldn't have to run it again.  So, I think it can 
live as a reference on the mailing list.

> 2017-04-14  Tom de Vries  
> 
>   * g++.dg/parse/error11.C: Remove braces around line number in dejagnu
> directive.
>   * g++.dg/parse/error3.C: Same.
>   * g++.old-deja/g++.pt/niklas01a.C: Same.
>   * gcc.dg/990506-0.c: Same.
>   * gcc.dg/cpp/19990413-1.c: Same.
>   * gcc.dg/cpp/pragma-1.c: Same.
>   * gcc.dg/cpp/pragma-2.c: Same.
>   * gcc.dg/m-un-2.c: Same.
>   * objc.dg/private-1.m: Same.



Re: [PATCH, testsuite] Allow braces around relative line numbers

2017-04-15 Thread Tom de Vries

On 03/29/2017 12:23 AM, Jakub Jelinek wrote:

On Tue, Mar 28, 2017 at 08:27:54AM +0200, Tom de Vries wrote:

this patch fixes testsuite PR80220 - "relative line numbers don't work when
put between braces".


What is the advantage of putting the line numbers between braces?


I don't know of any advantages.


Isn't it easier to just drop those?


I've attached two patches:
- first patch implements a script
  contrib/tests-normalize-line-number.sh that removes braces around
  line numbers.
- second patch is the result of running the script.

Tested by running the patched test-cases.

Second patch OK for stage4/stage1 trunk?

[ I'm not sure if the first patch is useful enough to commit to contrib. ]

Thanks,
- Tom
Add contrib/tests-normalize-line-number.sh

2017-04-15  Tom de Vries  

	* tests-normalize-line-number.sh: New file.

---
 contrib/tests-normalize-line-number.sh | 78 ++
 1 file changed, 78 insertions(+)

diff --git a/contrib/tests-normalize-line-number.sh b/contrib/tests-normalize-line-number.sh
new file mode 100755
index 000..9ecba6a
--- /dev/null
+++ b/contrib/tests-normalize-line-number.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env python2
+
+# We hit a bug with python 3 when doing replace_in_file_p() with
+# ./libstdc++-v3/testsuite/27_io/basic_filebuf/cons/wchar_t/10132-1.cc, so let's
+# use python 2 and import the print function from python 3.
+from __future__ import print_function
+
+import os, re
+import fileinput
+
+# A non-negative number.
+number="[0-9][0-9]*"
+# Allow quotes around the number.
+number=(
+"(?:" +
+number + "|" +
+'"' + number + '"' + "|" +
+"'" + number + "'" +
+")"
+)
+# Directives using a line number.
+directive="dg-(?:error|warning|message|bogus)"
+# Line containing directive.
+directiveline=(
+"(.*\{\s*%s.*)" % directive + # Part before line number.  Save it.
+"\{\s*(%s)\s*\}" % number +   # A number in braces.  Save the number.
+"\s*\}" + # Closing brace of directive.
+"(.*)"# Rest of line.  Save it.
+)
+# Match the entire line
+directiveline=(
+"^" +
+directiveline +
+"$"
+)
+pattern=re.compile(directiveline)
+
+extensions="c|cc|C|cpp|f|F|[fF]03|[fF]08|[fF]90|[fF]95|go|h|i|m|mm|S|adb|ads"
+extensionspattern=re.compile(".*\.(?:" + extensions + ")$")
+
+def do_replace_in_file(file):
+for line in fileinput.input(files=file,inplace=True):
+match=pattern.search(line)
+if match:
+line=(
+match.group(1) + # Part before line number.
+match.group(2) + # Line number.
+" }" +   # Closing brace of directive.
+match.group(3)   # Rest of line.
+)
+line+="\n"
+
+print(line, end='')
+
+def replace_in_file_p(file):
+filehandle = open(file, 'r')
+for line in filehandle:
+match=pattern.search(line)
+if match:
+return True
+
+return False
+
+def do_testsuite_dir(testsuite_dir):
+for root, dirs, files in os.walk(testsuite_dir):
+for file in files:
+if extensionspattern.match(file):
+fullname=os.path.join(root, file)
+if replace_in_file_p(fullname):
+do_replace_in_file(fullname)
+
+def do_dir(rootdir):
+for root, dirs, files in os.walk(rootdir):
+for dir in dirs:
+if dir == "testsuite":
+do_testsuite_dir(os.path.join(root, dir))
+
+do_dir(".")
Remove braces around line number in dejagnu directive

2017-04-14  Tom de Vries  

	* g++.dg/parse/error11.C: Remove braces around line number in dejagnu
	  directive.
	* g++.dg/parse/error3.C: Same.
	* g++.old-deja/g++.pt/niklas01a.C: Same.
	* gcc.dg/990506-0.c: Same.
	* gcc.dg/cpp/19990413-1.c: Same.
	* gcc.dg/cpp/pragma-1.c: Same.
	* gcc.dg/cpp/pragma-2.c: Same.
	* gcc.dg/m-un-2.c: Same.
	* objc.dg/private-1.m: Same.

---
 gcc/testsuite/g++.dg/parse/error11.C  | 2 +-
 gcc/testsuite/g++.dg/parse/error3.C   | 2 +-
 gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C | 2 +-
 gcc/testsuite/gcc.dg/990506-0.c   | 4 ++--
 gcc/testsuite/gcc.dg/cpp/19990413-1.c | 2 +-
 gcc/testsuite/gcc.dg/cpp/pragma-1.c   | 4 ++--
 gcc/testsuite/gcc.dg/cpp/pragma-2.c   | 4 ++--
 gcc/testsuite/gcc.dg/m-un-2.c | 4 ++--
 gcc/testsuite/objc.dg/private-1.m | 2 +-
 9 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/gcc/testsuite/g++.dg/parse/error11.C b/gcc/testsuite/g++.dg/parse/error11.C
index 846e676..a67160b 100644
--- a/gcc/testsuite/g++.dg/parse/error11.C
+++ b/gcc/testsuite/g++.dg/parse/error11.C
@@ -50,7 +50,7 @@ void func(void)
   //  the special error message.
   Foo<: :B> k2; // { dg-bogus "cannot begin|alternate spelling" "smart error should not be triggered here" }
   Foo[:B> k1;   // { dg-bogus "cannot begin|alternate 

Re: [PATCH, testsuite] Allow braces around relative line numbers

2017-03-28 Thread Jakub Jelinek
On Tue, Mar 28, 2017 at 08:27:54AM +0200, Tom de Vries wrote:
> this patch fixes testsuite PR80220 - "relative line numbers don't work when
> put between braces".

What is the advantage of putting the line numbers between braces?
Isn't it easier to just drop those?

Jakub


[PATCH, testsuite] Allow braces around relative line numbers

2017-03-28 Thread Tom de Vries

Hi,

this patch fixes testsuite PR80220 - "relative line numbers don't work 
when put between braces".



Consider gcc/testsuite/gcc.dg/990506-0.c, which has absolute line 
numbers between braces:

...
$ cat -n 990506-0.c
 1  /* Verify that a diagnostic is issued without crashing due to
 2 --enable-checking catching a bug in the C front end.  */
 3  /* { dg-do compile } */
 4  x()
 5  {
 6foo (i);
 7	  /* { dg-error "undeclared" "undeclared-variable message" { 
target *-*-* } { 6 } } */
 8	  /* { dg-message "function it appears in" "reminder message" { 
target *-*-* } { 6 } } */

 9  }
...

When we rewrite the test to use relative line numbers:
...
diff --git a/gcc/testsuite/gcc.dg/990506-0.c 
b/gcc/testsuite/gcc.dg/990506-0.c

index 3cd3be3..08ba856 100644
--- a/gcc/testsuite/gcc.dg/990506-0.c
+++ b/gcc/testsuite/gcc.dg/990506-0.c
@@ -4,6 +4,6 @@
 x()
 {
   foo (i);
-  /* { dg-error "undeclared" "undeclared-variable message" { target 
*-*-* } { 6 } } */
-  /* { dg-message "function it appears in" "reminder message" { target 
*-*-* } { 6 } } */
+  /* { dg-error "undeclared" "undeclared-variable message" { target 
*-*-* } { .-1 } } */
+  /* { dg-message "function it appears in" "reminder message" { target 
*-*-* } { .-2 } } */

 }
...

we run into trouble:
...
ERROR: gcc.dg/990506-0.c: expected integer but got " .-1 " for " 
dg-error 7 "undeclared" "undeclared-variable message" { target *-*-* } { 
.-1 } "

...

The problem is that the relative line number is written between braces, 
which results in whitespace before and after the number, and the 
relative line number handling in process-message doesn't handle that 
whitespace well.


This patch fixes that.

Bootstrapped and reg-tested on x86_64.

OK for stage4 or stage1 trunk?

Thanks,
- Tom
Allow braces around relative line numbers

2017-03-27  Tom de Vries  

	PR testsuite/80220
	* gcc.dg/dg-test-1.c: Add dg-error tests using relative line numbers
	between braces.
	(foo2): New function.
	* lib/gcc-dg.exp (process-message): Handle whitespace in relative line
	number argument.

---
 gcc/testsuite/gcc.dg/dg-test-1.c |  7 +++
 gcc/testsuite/lib/gcc-dg.exp | 16 +++-
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/dg-test-1.c b/gcc/testsuite/gcc.dg/dg-test-1.c
index c67f93b..2414ecc 100644
--- a/gcc/testsuite/gcc.dg/dg-test-1.c
+++ b/gcc/testsuite/gcc.dg/dg-test-1.c
@@ -40,3 +40,10 @@ baz (int i, int j)
 
 
 /* { dg-warning "unused parameter 'j'" "warn6" { target *-*-* } .-10 } */
+
+/* Test for relative line numbers in braces */
+void
+foo2 (void)
+{			/* { dg-error "'a' undeclared" "err1" { target *-*-* } { .+1 } } */
+  int z = a + b + c;/* { dg-error "'b' undeclared" "err2" { target *-*-* } { . } } */
+}			/* { dg-error "'c' undeclared" "err3" { target *-*-* } { .-1 } } */
diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp
index 83c38cf..e986d64 100644
--- a/gcc/testsuite/lib/gcc-dg.exp
+++ b/gcc/testsuite/lib/gcc-dg.exp
@@ -988,11 +988,17 @@ if { [info procs saved-dg-error] == [list] \
 proc process-message { msgproc msgprefix dgargs } {
 upvar dg-messages dg-messages
 
-# Handle relative line specification, .+1 or .-1 etc.
-if { [llength $dgargs] == 5
-	 && [regsub "^\.\[+-\](\[0-9\]+)$" [lindex $dgargs 4] "\\1" num] } {
-	set num [expr [lindex $dgargs 0] [string index [lindex $dgargs 4] 1] $num]
-	set dgargs [lreplace $dgargs 4 4 $num]
+if { [llength $dgargs] == 5 } {
+	set linenr [lindex $dgargs 4]
+	# Strip whitespace added by using braces.
+	set linenr [string trimleft [string trimright $linenr]]
+	# Handle relative line specification, .+1 or .-1 etc.
+	if { [regsub "^\.\[+-\](\[0-9\]+)$" $linenr "\\1" num] } {
+	set directivelinenr [lindex $dgargs 0]
+	set op [string index $linenr 1]
+	set linenr [expr $directivelinenr $op $num]
+	}
+	set dgargs [lreplace $dgargs 4 4 $linenr]
 }
 
 # Process the dg- directive, including adding the regular expression