]> git.saurik.com Git - bison.git/commitdiff
Merge remote-tracking branch 'origin/maint'
authorAkim Demaille <akim@lrde.epita.fr>
Mon, 12 Nov 2012 08:45:30 +0000 (09:45 +0100)
committerAkim Demaille <akim@lrde.epita.fr>
Mon, 12 Nov 2012 08:45:30 +0000 (09:45 +0100)
* origin/maint:
  maint: address syntax-check errors.
  tests: use valgrind where appropriate
  tests: use valgrind where appropriate
  tests: don't expect $EGREP to support -w
  tests: more possible error compiler messages for "#error"

Conflicts:
cfg.mk
tests/headers.at

THANKS
cfg.mk
doc/bison.texi
po/POTFILES.in
src/print_graph.c
tests/c++.at
tests/glr-regression.at
tests/headers.at
tests/local.at
tests/regression.at
tests/synclines.at

diff --git a/THANKS b/THANKS
index eab6349b9abd8af897a2b213f1f585c59df48bad..ec895360945454ebbab7a3cf0998c8468aea245c 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -31,6 +31,7 @@ Dagobert Michelsen        dam@baltic-online.de
 Daniel Hagerty            hag@gnu.org
 David J. MacKenzie        djm@gnu.org
 David Kastrup             dak@gnu.org
+Dennis Clarke             dclarke@blastwave.org
 Derek M. Jones            derek@knosof.co.uk
 Di-an Jan                 dianj@freeshell.org
 Dick Streefland           dick.streefland@altium.nl
diff --git a/cfg.mk b/cfg.mk
index 8e5a8e1031868fbf15f05df784f9df0ea960169a..1aa1c1ab8ef0b68f4fb30e6a496a77720ee724ff 100644 (file)
--- a/cfg.mk
+++ b/cfg.mk
@@ -55,6 +55,18 @@ update-copyright: update-b4-copyright update-package-copyright-year
 update-copyright-env = \
   UPDATE_COPYRIGHT_FORCE=1 UPDATE_COPYRIGHT_USE_INTERVALS=1
 
+# At least for Mac OS X's grep, the order between . and [ in "[^.[]"
+# matters:
+# $ LC_ALL=fr_FR grep -nE '[^[.]' /dev/null
+# $ LC_ALL=C grep -nE '[^[.]' /dev/null
+# grep: invalid collating element or class
+# $ LC_ALL=fr_FR grep -nE '[^.[]' /dev/null
+# $ LC_ALL=C grep -nE '[^.[]' /dev/null
+sc_at_parser_check:
+       @prohibit='AT_PARSER_CHECK\(\[+[^.[]|AT_CHECK\(\[+\./'          \
+       halt='use AT_PARSER_CHECK for and only for generated parsers'   \
+         $(_sc_search_regexp)
+
 exclude = \
   $(foreach a,$(1),$(eval $(subst $$,$$$$,exclude_file_name_regexp--sc_$(a))))
 $(call exclude,                                                                \
@@ -70,5 +82,5 @@ $(call exclude,                                                               \
   prohibit_strcmp=^doc/bison\.texi$$                                   \
   require_config_h_first=^(lib/yyerror|data/(glr|yacc))\.c$$           \
   space_tab=^tests/(input|c\+\+)\.at$$                                 \
-  unmarked_diagnostics=^(djgpp/|doc/bison.texi$$)                      \
+  unmarked_diagnostics=^(djgpp/|doc/bison.texi$$|tests/c\+\+\.at$$)    \
 )
index 848bca45bfe0180a745b340d02e3e0d519432c9e..9b7b14fd2eac5c165a13d774a013e886f43c5fd0 100644 (file)
@@ -8856,8 +8856,8 @@ a PDF or PNG file from it will take very long, and more often than not it will
 fail due to memory exhaustion). This option was rather designed for beginners,
 to help them understand LR parsers.
 
-This file is generated when the @option{--graph} option is specified (see
-@pxref{Invocation, , Invoking Bison}).  Its name is made by removing
+This file is generated when the @option{--graph} option is specified
+(@pxref{Invocation, , Invoking Bison}).  Its name is made by removing
 @samp{.tab.c} or @samp{.c} from the parser implementation file name, and
 adding @samp{.dot} instead.  If the grammar file is @file{foo.y}, the
 Graphviz output file is called @file{foo.dot}.
index 0908f5067abe3eafaea5f88c39f075f980dc0d75..ee34879a8fea96ecd9c7d03419df6bf0156cea96 100644 (file)
@@ -9,6 +9,7 @@ src/main.c
 src/muscle-tab.c
 src/parse-gram.y
 src/print.c
+src/print_graph.c
 src/reader.c
 src/reduce.c
 src/scan-code.l
index 7b2afdb50d7bf2b3b80faddc81dd56f254cac2c3..918a3df8937e94686c5f9d4efb3b90a90896d538 100644 (file)
@@ -18,7 +18,6 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
-#include <quotearg.h>
 #include "system.h"
 
 #include "LR0.h"
index 21ebafe016397897777878870b82d5946eeab407..0d50281a24801b53bf4ef2375dff2e585dd7f940 100644 (file)
@@ -734,7 +734,7 @@ AT_PARSER_CHECK([[./input i]], [[2]], [[]],
 AT_PARSER_CHECK([[./input aaaap]])
 
 AT_PARSER_CHECK([[./input --debug aaaap]], [[2]], [[]], [[stderr]])
-AT_PARSER_CHECK([[grep '^exception caught: printer$' stderr]], [], [ignore])
+AT_CHECK([[grep '^exception caught: printer$' stderr]], [], [ignore])
 
 AT_PARSER_CHECK([[./input aaaae]], [[2]], [[]],
 [[exception caught: syntax error
index 80248aa4e661a6232f5841ca9473d1688c1dca43..ab6e14378ae77b5b9a1301b939bf8dd533d56f10 100644 (file)
@@ -67,9 +67,13 @@ static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1)
   return 0;
 }
 
+const char *input = NULL;
+
 int
-main (void)
+main (int argc, const char* argv[])
 {
+  assert (argc == 2);
+  input = argv[1];
   return yyparse ();
 }
 
@@ -78,16 +82,7 @@ main (void)
 int
 yylex (void)
 {
-  for (;;)
-    {
-      int ch;
-      assert (!feof (stdin));
-      ch = getchar ();
-      if (ch == EOF)
-       return 0;
-      else if (ch == 'B' || ch == 'P')
-       return ch;
-    }
+  return *input++;
 }
 ]])
 AT_BISON_OPTION_POPDEFS
@@ -96,7 +91,7 @@ AT_BISON_CHECK([[-o glr-regr1.c glr-regr1.y]], 0, [],
 [[glr-regr1.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
 ]])
 AT_COMPILE([glr-regr1])
-AT_PARSER_CHECK([[echo BPBPB | ./glr-regr1]], 0,
+AT_PARSER_CHECK([[./glr-regr1 BPBPB]], 0,
 [[E -> 'B'
 E -> 'B'
 E -> E 'P' E
@@ -212,16 +207,27 @@ AT_BISON_CHECK([[-o glr-regr2a.c glr-regr2a.y]], 0, [],
 ]])
 AT_COMPILE([glr-regr2a])
 
-AT_PARSER_CHECK([[echo s VARIABLE_1 t v x q | ./glr-regr2a]], 0,
+AT_DATA([input1.txt],
+[[s VARIABLE_1 t v x q
+]])
+AT_PARSER_CHECK([[./glr-regr2a input1.txt]], 0,
 [[Variable: 'VARIABLE_1'
-]], [])
-AT_PARSER_CHECK([[echo s VARIABLE_1 , ANOTHER_VARIABLE_2 t e | ./glr-regr2a]],
+]])
+
+AT_DATA([input2.txt],
+[[s VARIABLE_1 , ANOTHER_VARIABLE_2 t e
+]])
+AT_PARSER_CHECK([[./glr-regr2a input2.txt]],
 0,
 [[Varlist: 'VARIABLE_1,ANOTHER_VARIABLE_2'
 ]])
-AT_PARSER_CHECK([[echo s VARIABLE_3 t v x | ./glr-regr2a]], 0,
+
+AT_DATA([input3.txt],
+[[s VARIABLE_3 t v x
+]])
+AT_PARSER_CHECK([[./glr-regr2a input3.txt]], 0,
 [[Variable: 'VARIABLE_3'
-]], [])
+]])
 
 
 AT_CLEANUP
@@ -330,10 +336,13 @@ glr-regr3.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
 ]])
 AT_COMPILE([glr-regr3])
 
-AT_PARSER_CHECK([[echo p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2 | ./glr-regr3]],
+AT_DATA([input.txt],
+[[p1 t4 o2 p1 p1 t1 o1 t2 p2 o1 t3 p2 p2
+]])
+AT_PARSER_CHECK([[./glr-regr3 input.txt]],
 0,
 [[Result: 1c04
-]], [])
+]])
 
 AT_CLEANUP
 
index 509a413df82a1478d8517fcee4570875e9997bd2..c21fa3593a49cdfd1903f543d0c7c317742ec1ce 100644 (file)
@@ -163,22 +163,6 @@ exp:
 
 AT_BISON_CHECK([-d -o $1.AT_SKEL_CC_IF([cc], [c]) $1.y])
 
-# Check there is no 'yy' left.
-# C++ output relies on namespaces and still uses yy a lot.
-AT_SKEL_CC_IF([],
-  [AT_CHECK([$EGREP yy $1.h], [1])])
-
-# Check there is not 'YY' left.
-# Ignore comments, YYPUSH_MORE(_DEFINED)?  (constant definition),
-# YY_\w+_INCLUDED (header guards).
-#
-# YYDEBUG (not renamed) can be read, but not changed.
-AT_CHECK([[$PERL -0777 -e 's{/\*.*?\*/}{}sg;s,//.*,,;' \
-            ]$1.AT_SKEL_CC_IF([hh], [h])[ |
-         grep 'YY' |
-     $EGREP -wv 'YY(PUSH_MORE(_DEFINED)?|_[0-9A-Z_]+_INCLUDED)|(defined|if) YYDEBUG']],
-         [1])
-
 AT_LANG_COMPILE([$1.o])
 AT_CHECK([[echo "$1" >>expout]])
 
@@ -241,6 +225,35 @@ AT_TEST([x7], [%define api.push-pull both])
 AT_TEST([x8], [%define api.pure %define api.push-pull both])
 #AT_TEST([x5], [%locations %language "c++" %glr-parser])
 
+# Check there is no 'yy' left.
+# C++ output relies on namespaces and still uses yy a lot.
+#
+# Check there is no 'YY' left.
+# Ignore comments, YYPUSH_MORE(_DEFINED)?  (constant definition),
+# YY_\w+_INCLUDED (header guards).
+#
+# YYDEBUG (not renamed) can be read, but not changed.
+AT_CHECK([[$PERL -n -0777 -e '
+  s{/\*.*?\*/}{}gs;
+  s{//.*}{}g;
+  s{\b(YYPUSH_MORE(_DEFINED)?
+      |YY_\w+_INCLUDED
+      |YY_NULL
+      |(defined|if)\ YYDEBUG
+      )\b}{}gx;
+  while (/^(.*YY.*)$/gm)
+  {
+    print "$ARGV: $1\n";
+  }
+  if ($ARGV =~ /\.h$/)
+  {
+    while (/^(.*yy.*)$/gm)
+    {
+      print "$ARGV: $1\n";
+    }
+  }
+' -- *.hh *.h]])
+
 # Check that the headers are self-contained, and protected against
 # multiple inclusions.  While at it, check they are sane for C++.
 for h in *.h *.hh
@@ -258,7 +271,7 @@ done
 AT_SKIP_IF_CANNOT_LINK_C_AND_CXX
 
 AT_COMPILE_CXX([parser], [[x[1-8].o -DCC_IS_CXX=$CC_IS_CXX main.cc]])
-AT_CHECK([./parser], [0], [[expout]])
+AT_PARSER_CHECK([./parser], [0], [[expout]])
 
 m4_popdef([AT_TEST])
 
index fb74fafc6c50de3b191b7b346efffb339a8c1bf3..42040829a6a57b6ef3dab8820a0edc16ec36666e 100644 (file)
@@ -697,7 +697,7 @@ AT_COMPILE([c-only.o], [c-only.c])
 AT_COMPILE_CXX([cxx-only.o], [cxx-only.cc])
 AT_CHECK([$CXX $CXXFLAGS $CPPFLAGS $LDFLAGS c-only.o cxx-only.o -o c-and-cxx ||
           exit 77], [ignore], [ignore])
-AT_CHECK([./c-and-cxx])
+AT_PARSER_CHECK([./c-and-cxx])
 ])
 
 
index f17359416a9e1ba448ee0e71eef4353eb5961b7c..4d6e255a89981805f277f9bb193c51ce4aae5d6d 100644 (file)
@@ -1638,7 +1638,7 @@ main (void)
 ]])
 
 AT_FULL_COMPILE([input])
-AT_CHECK([./input], 0, [[x: 1, y: 2
+AT_PARSER_CHECK([./input], 0, [[x: 1, y: 2
 ]])
 AT_BISON_OPTION_POPDEFS
 
index 63ae68581c6509034fc23539214cc0ede294ff7c..751db7c659bd837f4d11e13bd16f9777995d24cd 100644 (file)
@@ -47,7 +47,8 @@ m4_define([AT_SYNCLINES_COMPILE],
 # =>
 #   input.y:4: #error "8"
 #
-# The message may include a caret-error:
+# The message may include a caret-error (indented by GCC 4.8,
+# not by clang 3.2):
 #
 #   input.y:1:2: error: #error "1"
 #    #error "1"
@@ -63,13 +64,31 @@ m4_define([AT_SYNCLINES_COMPILE],
 #
 #   distcc[35882] (dcc_connect_by_name) ERROR: failed to look up host "chrisimac": Unknown host
 #   distcc[35882] Warning: failed to distribute input.c to chrisimac/4, running locally instead
-
+#
+# The compiler might end by the number of messages issued (Clang 3.2):
+#
+#    syncline.c:1:2: error: "1"
+#    #error "1"
+#     ^
+#    1 error generated.
 AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
+  # 1. Remove useless lines.
+
+  # distcc clutter.
   s/^distcc\[\d+\] .*\n//gm;
-  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
-  s/^([^:]+:\d+):[^#]*( #error)/$][1:$][2/gm;
+  # Function context.
   s/^[^:]*: In function '[^']+':\n//gm;
-  s/^\ +#error.*\n\ *\^\n//gm;
+  # Caret error.
+  s/^ *#error.*\n *\^\n//gm;
+  # Number of errors.
+  s/^1 error generated\.\n//gm;
+
+  # 2. Normalize the lines we kept.
+
+  # Remove column.
+  s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
+  # Map all combinations of "error: " and "#error: " to "#error ".
+  s/^([^:]+:\d+):( |#error|error|:)+/$][1: #error /gm;
 EOF
 ]],
   0, [stdout])