bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Bison 3.0.3 (stable)


From: Akim Demaille
Subject: Re: Bison 3.0.3 (stable)
Date: Mon, 19 Jan 2015 18:59:16 +0100

> Le 19 janv. 2015 à 16:10, Thomas Jahns <address@hidden> a écrit :
> 
>>> Since the first error message still contains everything to make the grep 
>>> succeed, I stand by my initial assertion that compiler output simply needs 
>>> to be massaged appropriately.
>> 
>> Yes, but that's the only test that fails this way, although there
>> are other #line tests.
> 
> Ok, that's interesting.

I looked at this more carefully, and I propose the following patch.
These patches are currently in the "next" branch if you want to
try them from git.

This time, the syncline tests should not be skipped.


commit ab9207e5937371b9543097be755bdfd83668c48c
Author: Akim Demaille <address@hidden>
Date:   Mon Jan 19 18:51:54 2015 +0100

    tests: be more robust to unrecognized synclines, and try to recognize xlc
    
    Reported by Thomas Jahns.
    http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html
    
    * tests/synclines.at (AT_SYNCLINES_COMPILE): Rename as...
    (_AT_SYNCLINES_COMPILE): this.
    Try to recognize xlc locations.
    (AT_SYNCLINES_COMPILE): New.  Skips the test if we can't read the
    synclines.

diff --git a/tests/synclines.at b/tests/synclines.at
index 260e2f9..95d324b 100644
--- a/tests/synclines.at
+++ b/tests/synclines.at
@@ -19,13 +19,13 @@
 AT_BANNER([[User Actions.]])
 
 
-# AT_SYNCLINES_COMPILE(FILE)
-# --------------------------
+# _AT_SYNCLINES_COMPILE(FILE)
+# ---------------------------
 # Compile FILE expecting an error, and save in the file stdout the
 # normalized output.  Ignore the exit status, since some compilers
 # (e.g. c89 on IRIX 6.5) trigger warnings on '#error', instead of
 # errors.
-m4_define([AT_SYNCLINES_COMPILE],
+m4_define([_AT_SYNCLINES_COMPILE],
 [AT_CHECK([$CC $CFLAGS $CPPFLAGS -c $1], [ignore], [], [stderr])
 
 # Transform stderr into something like this:
@@ -75,6 +75,11 @@ m4_define([AT_SYNCLINES_COMPILE],
 # When c++ is used to compiler C, we might have more messages (Clang 3.2):
 #
 #    clang: warning: treating 'c' input as 'c++' when in C++ mode, this 
behavior is deprecated
+#
+#
+# xlc reports things like:
+#
+#    "input.yy", line 80.21: 1540-0218 (S) The call does not match any 
parameter list for "operator<<".
 
 AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
   # 1. Remove useless lines.
@@ -92,6 +97,8 @@ AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
 
   # 2. Normalize the lines we kept.
 
+  # xlc messages.
+  s/^"(.*?)", line ([\w.]*): /$1:$2: /gm;
   # Remove column.
   s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
   # Map all combinations of "error: " and "#error: " to "#error ".
@@ -101,13 +108,14 @@ EOF
   0, [stdout])
 ])
 
-# AT_TEST(TITLE, INPUT, ERROR-MSG)
-# --------------------------------
-# Check that compiling the parser produced from INPUT cause GCC
-# to issue ERROR-MSG.
-m4_pushdef([AT_TEST],
-[AT_SETUP([$1])
-AT_BISON_OPTION_PUSHDEFS
+
+
+# AT_SYNCLINES_COMPILE(FILE)
+# --------------------------
+# Compile FILE expecting an error, and save in the file stdout the
+# normalized output.  If we can't get a trustable location
+# from the compiler, just skip the test.
+#
 # It seems impossible to find a generic scheme to check the location
 # of an error.  Even requiring GCC is not sufficient, since for instance
 # the version modified by Apple:
@@ -124,15 +132,29 @@ AT_BISON_OPTION_PUSHDEFS
 #
 # | input.y:2: "2"
 # | cpp-precomp: warning: errors during smart preprocessing, retrying in basic 
mode
-
+m4_define([AT_SYNCLINES_COMPILE],
+[# Check if we can trust location translation.
 AT_DATA([syncline.c],
 [[#error "1"
 int i; /* avoids -pedantic warning about an empty translation unit. */
 ]])
 
-AT_SYNCLINES_COMPILE([syncline.c])
+_AT_SYNCLINES_COMPILE([syncline.c])
 AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
 
+# Then work for real.
+_AT_SYNCLINES_COMPILE([$1])
+])
+
+
+# AT_TEST(TITLE, INPUT, ERROR-MSG)
+# --------------------------------
+# Check that compiling the parser produced from INPUT cause GCC
+# to issue ERROR-MSG.
+m4_pushdef([AT_TEST],
+[AT_SETUP([$1])
+AT_BISON_OPTION_PUSHDEFS
+
 AT_DATA([[input.y]], [$2])
 AT_BISON_CHECK([-o input.c input.y])
 AT_SYNCLINES_COMPILE([input.c])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]