| Index: bison/src/bison/2.4.1/bison-2.4.1-src/tests/synclines.at
|
| ===================================================================
|
| --- bison/src/bison/2.4.1/bison-2.4.1-src/tests/synclines.at (revision 0)
|
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/tests/synclines.at (revision 0)
|
| @@ -0,0 +1,173 @@
|
| +# Executing Actions. -*- Autotest -*-
|
| +# Copyright (C) 2002, 2004, 2005, 2007 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
|
| +# the Free Software Foundation, either version 3 of the License, or
|
| +# (at your option) any later version.
|
| +#
|
| +# This program is distributed in the hope that it will be useful,
|
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| +# GNU General Public License for more details.
|
| +#
|
| +# You should have received a copy of the GNU General Public License
|
| +# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| +
|
| +AT_BANNER([[User Actions.]])
|
| +
|
| +
|
| +# 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) triger warnings on `#error', instead of
|
| +# errors.
|
| +m4_define([AT_SYNCLINES_COMPILE],
|
| +[AT_CHECK([$CC $CFLAGS $CPPFLAGS -c $1], [ignore], [], [stderr])
|
| +# In case GCC displays column information, strip it down.
|
| +#
|
| +# input.y:4:2: #error "4" or
|
| +# input.y:4.2: #error "4" or
|
| +# input.y:4:2: error: #error "4"
|
| +# =>
|
| +# input.y:4: #error "4"
|
| +#
|
| +AT_CHECK([[sed -e 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' -e 's/^\([^:]*:[^:]*:\)[^@%:@]*\( @%:@error\)/\1\2/' stderr]], 0, [stdout])
|
| +])
|
| +
|
| +# AT_TEST_SYNCLINE(TITLE, INPUT, ERROR-MSG)
|
| +# -----------------------------------------
|
| +# Check that compiling the parser produced from INPUT cause GCC
|
| +# to issue ERROR-MSG.
|
| +m4_define([AT_TEST_SYNCLINE],
|
| +[AT_SETUP([$1])
|
| +
|
| +# 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:
|
| +#
|
| +# | Reading specs from /usr/libexec/gcc/darwin/ppc/2.95.2/specs
|
| +# | Apple Computer, Inc. version gcc-934.3, based on gcc version 2.95.2
|
| +# | 19991024 (release) configure:2124: $? = 0
|
| +#
|
| +# instead of:
|
| +#
|
| +# | input.y:2: #error "2"
|
| +#
|
| +# it reports:
|
| +#
|
| +# | input.y:2: "2"
|
| +# | cpp-precomp: warning: errors during smart preprocessing, retrying in basic mode
|
| +
|
| +AT_DATA([syncline.c],
|
| +[[#error "1"
|
| +]])
|
| +
|
| +AT_SYNCLINES_COMPILE([syncline.c])
|
| +AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
|
| +
|
| +AT_DATA([[input.y]], [$2])
|
| +AT_BISON_CHECK([-o input.c input.y])
|
| +AT_SYNCLINES_COMPILE([input.c])
|
| +AT_CHECK([cat stdout], 0, [$3])
|
| +AT_CLEANUP
|
| +])
|
| +
|
| +
|
| +## --------------------- ##
|
| +## Prologue synch line. ##
|
| +## --------------------- ##
|
| +
|
| +
|
| +AT_TEST_SYNCLINE([Prologue synch line],
|
| +[[%{
|
| +#error "2"
|
| +void yyerror (const char *s);
|
| +int yylex (void);
|
| +%}
|
| +%%
|
| +exp: '0';
|
| +]],
|
| +[input.y:2: #error "2"
|
| +])
|
| +
|
| +
|
| +## ------------------- ##
|
| +## %union synch line. ##
|
| +## ------------------- ##
|
| +
|
| +AT_TEST_SYNCLINE([%union synch line],
|
| +[[%union {
|
| +#error "2"
|
| + char dummy;
|
| +}
|
| +%{
|
| +void yyerror (const char *s);
|
| +int yylex (void);
|
| +%}
|
| +%%
|
| +exp: '0';
|
| +]],
|
| +[input.y:2: #error "2"
|
| +])
|
| +
|
| +
|
| +## ------------------------- ##
|
| +## Postprologue synch line. ##
|
| +## ------------------------- ##
|
| +
|
| +AT_TEST_SYNCLINE([Postprologue synch line],
|
| +[[%{
|
| +void yyerror (const char *s);
|
| +int yylex (void);
|
| +%}
|
| +%union
|
| +{
|
| + int ival;
|
| +}
|
| +%{
|
| +#error "10"
|
| +%}
|
| +%%
|
| +exp: '0';
|
| +]],
|
| +[input.y:10: #error "10"
|
| +])
|
| +
|
| +
|
| +## ------------------- ##
|
| +## Action synch line. ##
|
| +## ------------------- ##
|
| +
|
| +AT_TEST_SYNCLINE([Action synch line],
|
| +[[%{
|
| +void yyerror (const char *s);
|
| +int yylex (void);
|
| +%}
|
| +%%
|
| +exp:
|
| +{
|
| +#error "8"
|
| +};
|
| +]],
|
| +[input.y:8: #error "8"
|
| +])
|
| +
|
| +
|
| +## --------------------- ##
|
| +## Epilogue synch line. ##
|
| +## --------------------- ##
|
| +
|
| +AT_TEST_SYNCLINE([Epilogue synch line],
|
| +[[%{
|
| +void yyerror (const char *s);
|
| +int yylex (void);
|
| +%}
|
| +%%
|
| +exp: '0';
|
| +%%
|
| +#error "8"
|
| +]],
|
| +[input.y:8: #error "8"
|
| +])
|
|
|