X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/064e42b0aca1db0ca84b06b01cac5a40f3016591..dc8e535c37dffc57e5bc9f97108db6f5eb7a77ce:/tests/regression.at diff --git a/tests/regression.at b/tests/regression.at index 76914200..418faf05 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -1,6 +1,6 @@ # Bison Regressions. -*- Autotest -*- -# Copyright (C) 2001-2012 Free Software Foundation, Inc. +# Copyright (C) 2001-2013 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -130,7 +130,6 @@ AT_SETUP([Early token definitions without --yacc]) AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], [[%{ -#include ]AT_YYERROR_DECLARE_EXTERN[ ]AT_YYLEX_DECLARE_EXTERN[ void print_my_token (void); @@ -141,6 +140,7 @@ void print_my_token (void); int val; }; %{ +#include void print_my_token (void) { @@ -446,8 +446,6 @@ AT_BISON_OPTION_PUSHDEFS # Bison managed, when fed with '%token 'f' "f"' to #define 'f'! AT_DATA_GRAMMAR([input.y], [%{ -#include -#include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} @@ -464,12 +462,7 @@ exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"; %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE([{ SPECIAL }])[ - -int -main (void) -{ - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS @@ -481,6 +474,14 @@ AT_BISON_CHECK([-o input.c input.y], [[0]], [[]], [[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother] input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother] ]]) +AT_BISON_CHECK([-fcaret -o input.c input.y], [[0]], [[]], +[[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother] + %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!" + ^^^^^^^ +input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother] + %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]]) AT_COMPILE([input]) # Checking the error message here guarantees that yytname, which does contain @@ -836,7 +837,6 @@ m4_define([_AT_DATA_DANCER_Y], } $1 %token ARROW INVALID NUMBER STRING DATA -%defines %verbose %error-verbose /* Grammar follows */ @@ -880,23 +880,7 @@ member: STRING %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE([":"])[ -]AT_LALR1_CC_IF( -[int -yyparse () -{ - yy::parser parser; -#if YYDEBUG - parser.set_debug_level (YYDEBUG); -#endif - return parser.parse (); -} -])[ - -int -main (void) -{ - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) ])# _AT_DATA_DANCER_Y @@ -933,12 +917,10 @@ m4_define([_AT_DATA_EXPECT2_Y], [%{ static int yylex (AT_LALR1_CC_IF([int *], [void])); AT_LALR1_CC_IF([[#include ]], -[[#include -#include +[[ ]AT_YYERROR_DECLARE])[ %} $1 -%defines %error-verbose %token A 1000 %token B @@ -975,12 +957,7 @@ yylex (]AT_LALR1_CC_IF([int *lval], [void])[) assert (toknum < sizeof tokens / sizeof *tokens); return tokens[toknum++]; } - -int -main (void) -{ - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) ])# _AT_DATA_EXPECT2_Y @@ -1014,16 +991,14 @@ AT_SETUP([Braced code in declaration in rules section]) # Bison once mistook braced code in a declaration in the rules section to be a # rule action. -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[%{ -#include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} - +%debug %error-verbose - %% start: @@ -1039,19 +1014,13 @@ start: %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["a"])[ - -int -main (void) -{ - yydebug = 1; - return !yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS -AT_BISON_CHECK([-t -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], 0, +AT_PARSER_CHECK([./input --debug], 1, [[Bison would once convert this action to a midrule because of the subsequent braced code. ]], [[Starting parse @@ -1090,7 +1059,7 @@ start: 'a' "A" 'b'; %token 'a' "A"; ]]) -AT_BISON_CHECK([-t -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_CLEANUP @@ -1147,11 +1116,10 @@ AT_SETUP([[Token number in precedence declaration]]) # we lost this in Bison 1.50. AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], -[[%{ - #include +[[%code { ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ -%} +} %error-verbose %right END 0 @@ -1172,18 +1140,13 @@ sr_conflict: ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE([{ 1, 2, 3, 0 }])[ - -int -main (void) -{ - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS AT_BISON_CHECK([[-o input.c input.y]], [[0]],, -[[input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start [-Wother] -input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias" [-Wother] +[[input.y:24.5-19: warning: rule useless in parser due to conflicts: start: start [-Wother] +input.y:28.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias" [-Wother] ]]) AT_COMPILE([[input]]) AT_PARSER_CHECK([[./input]]) @@ -1226,7 +1189,6 @@ AT_SETUP([[parse.error=verbose and YYSTACK_USE_ALLOCA]]) AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ #define YYSTACK_USE_ALLOCA 1 @@ -1269,11 +1231,7 @@ syntax_error: recovery by shifting 3 tokens) in order to detect any loss of the reallocated buffer. */ ]AT_YYLEX_DEFINE(["abc"])[ -int -main (void) -{ - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS @@ -1305,7 +1263,6 @@ AT_SETUP([[parse.error=verbose overflow]]) AT_BISON_OPTION_PUSHDEFS AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ @@ -1415,15 +1372,14 @@ AT_SETUP([[LAC: Exploratory stack]]) m4_pushdef([AT_LAC_CHECK], [ -AT_BISON_OPTION_PUSHDEFS([$1]) +AT_BISON_OPTION_PUSHDEFS([%debug $1]) AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[); } - +%debug ]$1[ %define parse.error verbose %token 'c' @@ -1450,21 +1406,16 @@ yylex (]AT_PURE_IF([[YYSTYPE *v]], [[void]])[) return *input++; } -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ -Dparse.lac.memory-trace=full \ - -t -o input.c input.y]], [[0]], [], + -o input.c input.y]], [[0]], [], [[input.y: warning: 21 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) -AT_PARSER_CHECK([[./input > stdout.txt 2> stderr.txt]], [[1]]) +AT_PARSER_CHECK([[./input --debug > stdout.txt 2> stderr.txt]], [[1]]) # Make sure syntax error doesn't forget that 'a' is expected. It would # be forgotten without lookahead correction. @@ -1508,15 +1459,14 @@ AT_CLEANUP AT_SETUP([[LAC: Memory exhaustion]]) m4_pushdef([AT_LAC_CHECK], -[AT_BISON_OPTION_PUSHDEFS +[AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ #define YYMAXDEPTH 8 } - +%debug %error-verbose %% @@ -1527,16 +1477,11 @@ A: /*empty*/ | 'a' ; %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["$1"])[ -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ - -t -o input.c input.y]], [[0]], [], + -o input.c input.y]], [[0]], [], [[input.y: warning: 8 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) @@ -1545,7 +1490,7 @@ AT_BISON_OPTION_POPDEFS # Check for memory exhaustion during parsing. AT_LAC_CHECK([]) -AT_PARSER_CHECK([[./input]], [[2]], [], +AT_PARSER_CHECK([[./input --debug]], [[2]], [], [[Starting parse Entering state 0 Reading a token: Now at end of input. @@ -1559,7 +1504,7 @@ Stack now 0 # Induce an immediate syntax error with an undefined token, and check # for memory exhaustion while building syntax error message. AT_LAC_CHECK([z], [[0]]) -AT_PARSER_CHECK([[./input]], [[2]], [], +AT_PARSER_CHECK([[./input --debug]], [[2]], [], [[Starting parse Entering state 0 Reading a token: Next token is token $undefined () @@ -1590,13 +1535,11 @@ AT_CLEANUP m4_pushdef([AT_TEST], [AT_SETUP([[Lex and parse params: $1]]) +## FIXME: Improve parsing of parse-param. AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1" %parse-param { int x } %parse-param { int y }]) -## FIXME: Improve parsing of parse-param and use the generated -## yyerror. AT_DATA_GRAMMAR([input.y], -[[%defines -%locations +[[%locations %skeleton "$1" %union { int ival; } %parse-param { int x } @@ -1608,9 +1551,6 @@ AT_DATA_GRAMMAR([input.y], } %{ -#include -#include - ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} @@ -1652,3 +1592,33 @@ AT_TEST([lalr1.cc]) AT_TEST([glr.cc]) m4_popdef([AT_TEST]) + + +## ----------------------- ## +## stdio.h is not needed. ## +## ----------------------- ## + +# At some point, by accident, yy_location_print_ was using fprintf and +# FILE which are from stdio.h, which we do not require. +AT_SETUP([[stdio.h is not needed]]) + +AT_BISON_OPTION_PUSHDEFS + +AT_DATA_GRAMMAR([input.y], +[[%locations +%code +{ + static int yylex (void) { return 0; } + static void yyerror (const char* msg) { (void) msg; } +} +%% +exp: {} +%% +]AT_MAIN_DEFINE[ +]]) + +AT_FULL_COMPILE([input]) + +AT_BISON_OPTION_POPDEFS + +AT_CLEANUP