From 642cb8f8294e9ff6e8b17211e7119d4563fc2c2d Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 19 Mar 2002 08:16:25 +0000 Subject: [PATCH] Test and fix the #line outputs. * tests/atlocal.at (GCC): New. * tests/synclines.at (AT_TEST_SYNCLINE): New macro. (Prologue synch line, ,%union synch line, Postprologue synch line) (Action synch line, Epilogue synch line): New tests. * src/reader.c (parse_union_decl): Define the muscle stype_line. * data/bison.simple, data/bison.c++: Use it. --- ChangeLog | 12 +++++ data/bison.c++ | 3 ++ data/bison.simple | 6 +++ src/reader.c | 1 + tests/Makefile.am | 3 +- tests/atlocal.in | 3 ++ tests/synclines.at | 120 +++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 3 ++ 8 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 tests/synclines.at diff --git a/ChangeLog b/ChangeLog index 28b21652..3b522ae9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2002-03-19 Akim Demaille + + Test and fix the #line outputs. + + * tests/atlocal.at (GCC): New. + * tests/synclines.at (AT_TEST_SYNCLINE): New macro. + (Prologue synch line, ,%union synch line, Postprologue synch line) + (Action synch line, Epilogue synch line): New tests. + * src/reader.c (parse_union_decl): Define the muscle stype_line. + * data/bison.simple, data/bison.c++: Use it. + + 2002-03-19 Akim Demaille * tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts) diff --git a/data/bison.c++ b/data/bison.c++ index d081ee01..87303be9 100644 --- a/data/bison.c++ +++ b/data/bison.c++ @@ -109,6 +109,9 @@ b4_token_defines #endif #ifndef YYSTYPE +m4_ifdef([b4_stype_line], +[#line b4_stype_line "b4_filename" +])dnl typedef b4_stype yystype; # define YYSTYPE yystype diff --git a/data/bison.simple b/data/bison.simple index 87f4188d..1648e091 100644 --- a/data/bison.simple +++ b/data/bison.simple @@ -110,6 +110,9 @@ b4_prologue #endif #ifndef YYSTYPE +m4_ifdef([b4_stype_line], +[#line b4_stype_line "b4_filename" +])dnl typedef b4_stype yystype; # define YYSTYPE yystype #endif @@ -1161,6 +1164,9 @@ m4_if(b4_defines_flag, 0, [], b4_token_defines(b4_tokens) #ifndef YYSTYPE +m4_ifdef([b4_stype_line], +[#line b4_stype_line "b4_filename" +])dnl typedef b4_stype yystype; # define YYSTYPE yystype diff --git a/src/reader.c b/src/reader.c index 54f32f56..5af4df15 100644 --- a/src/reader.c +++ b/src/reader.c @@ -759,6 +759,7 @@ parse_union_decl (void) typed = 1; + MUSCLE_INSERT_INT ("stype_line", lineno); obstack_init (&union_obstack); obstack_sgrow (&union_obstack, "union"); diff --git a/tests/Makefile.am b/tests/Makefile.am index e7cf9698..e7f48e26 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -47,7 +47,8 @@ TESTSUITE_AT = \ testsuite.at \ input.at \ output.at sets.at reduce.at \ - headers.at actions.at conflicts.at calc.at \ + synclines.at headers.at actions.at conflicts.at \ + calc.at \ torture.at regression.at \ semantic.at diff --git a/tests/atlocal.in b/tests/atlocal.in index a189b2d6..31cc12cf 100644 --- a/tests/atlocal.in +++ b/tests/atlocal.in @@ -8,3 +8,6 @@ CFLAGS='@CFLAGS@ @WARNING_CFLAGS@ @WERROR_CFLAGS@' # We need `config.h'. CPPFLAGS="-I$abs_top_builddir @CPPFLAGS@" + +# Is the compiler GCC? +GCC='@GCC@' diff --git a/tests/synclines.at b/tests/synclines.at new file mode 100644 index 00000000..c7501fde --- /dev/null +++ b/tests/synclines.at @@ -0,0 +1,120 @@ +# Executing Actions. -*- Autotest -*- +# Copyright 2002 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 2, 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AT_BANNER([[User Actions.]]) + +# 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]) + +# I'm not sure I can find a generic scheme to check the location +# of an error, so we keep this for GCC only. +AT_CHECK([test "$GCC" = yes || exit 77]) + +AT_DATA([[input.y]], +[$2]) + +AT_CHECK([bison input.y -o input.c]) +AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 1, [], [$3]) +AT_CLEANUP +]) + + +## --------------------- ## +## Prologue synch line. ## +## --------------------- ## + + +AT_TEST_SYNCLINE([Prologue synch line], +[[%{ +#error "2" +%} +%% +exp: '0'; +]], +[input.y:2: #error "2" +]) + + +## ------------------- ## +## %union synch line. ## +## ------------------- ## + +AT_TEST_SYNCLINE([%union synch line], +[[%union { +#error "2" +} +%% +exp: '0'; +]], +[input.y:2: #error "2" +]) + + +## ------------------------- ## +## Postprologue synch line. ## +## ------------------------- ## + +AT_TEST_SYNCLINE([Postprologue synch line], +[[%{ +/* Nothing here. */ +%} +%union +{ + int ival; +} +%{ +#error "9" +%} +%% +exp: '0'; +]], +[input.y:9: #error "9" +]) + + +## ------------------- ## +## Action synch line. ## +## ------------------- ## + +AT_TEST_SYNCLINE([Action synch line], +[[%% +exp: +{ +#error "4" +}; +]], +[input.y:4: #error "4" +]) + + +## --------------------- ## +## Epilogue synch line. ## +## --------------------- ## + +AT_TEST_SYNCLINE([Epilogue synch line], +[[%% +exp: '0'; +%% +#error "4" +]], +[input.y:4: #error "4" +]) diff --git a/tests/testsuite.at b/tests/testsuite.at index dd83d23b..6c43369b 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -37,6 +37,9 @@ m4_include([sets.at]) # Testing grammar reduction. m4_include([reduce.at]) +# Testing that #lines are correct. +m4_include([synclines.at]) + # Testing that headers are sane. m4_include([headers.at]) -- 2.45.2