mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
Merge remote-tracking branch 'origin/maint'
* 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
This commit is contained in:
1
THANKS
1
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
|
||||
|
||||
14
cfg.mk
14
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$$) \
|
||||
)
|
||||
|
||||
@@ -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}.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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])
|
||||
|
||||
|
||||
@@ -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])
|
||||
])
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user