]> git.saurik.com Git - bison.git/blame_incremental - tests/synclines.at
Regen.
[bison.git] / tests / synclines.at
... / ...
CommitLineData
1# Executing Actions. -*- Autotest -*-
2# Copyright (C) 2002 Free Software Foundation, Inc.
3
4# This program is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 2, or (at your option)
7# any later version.
8
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13
14# You should have received a copy of the GNU General Public License
15# along with this program; if not, write to the Free Software
16# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
17# 02111-1307, USA.
18
19AT_BANNER([[User Actions.]])
20
21# AT_TEST_SYNCLINE(TITLE, INPUT, ERROR-MSG)
22# -----------------------------------------
23# Check that compiling the parser produced from INPUT cause GCC
24# to issue ERROR-MSG.
25m4_define([AT_TEST_SYNCLINE],
26[AT_SETUP([$1])
27
28# I'm not sure I can find a generic scheme to check the location
29# of an error, so we keep this for GCC only.
30AT_CHECK([test "$GCC" = yes || exit 77])
31
32AT_DATA([[input.y]],
33[$2])
34
35AT_CHECK([bison input.y -o input.c])
36AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -c], 1, [], [stderr])
37# In case GCC displays column information, strip it down.
38#
39# input.y:4:2: #error "4" or input.y:4.2: #error "4"
40# =>
41# input.y:4: #error "4"
42#
43AT_CHECK([[sed 's/^\([^:]*:[^:.]*\)[.:][^:]*:\(.*\)$/\1:\2/' stderr]],
44 0, [$3])
45AT_CLEANUP
46])
47
48
49## --------------------- ##
50## Prologue synch line. ##
51## --------------------- ##
52
53
54AT_TEST_SYNCLINE([Prologue synch line],
55[[%{
56#error "2"
57void yyerror (const char *s);
58int yylex (void);
59%}
60%%
61exp: '0';
62]],
63[input.y:2: #error "2"
64])
65
66
67## ------------------- ##
68## %union synch line. ##
69## ------------------- ##
70
71AT_TEST_SYNCLINE([%union synch line],
72[[%union {
73#error "2"
74}
75%{
76void yyerror (const char *s);
77int yylex (void);
78%}
79%%
80exp: '0';
81]],
82[input.y:2: #error "2"
83])
84
85
86## ------------------------- ##
87## Postprologue synch line. ##
88## ------------------------- ##
89
90AT_TEST_SYNCLINE([Postprologue synch line],
91[[%{
92void yyerror (const char *s);
93int yylex (void);
94%}
95%union
96{
97 int ival;
98}
99%{
100#error "10"
101%}
102%%
103exp: '0';
104]],
105[input.y:10: #error "10"
106])
107
108
109## ------------------- ##
110## Action synch line. ##
111## ------------------- ##
112
113AT_TEST_SYNCLINE([Action synch line],
114[[%{
115void yyerror (const char *s);
116int yylex (void);
117%}
118%%
119exp:
120{
121#error "8"
122};
123]],
124[input.y:8: #error "8"
125])
126
127
128## --------------------- ##
129## Epilogue synch line. ##
130## --------------------- ##
131
132AT_TEST_SYNCLINE([Epilogue synch line],
133[[%{
134void yyerror (const char *s);
135int yylex (void);
136%}
137%%
138exp: '0';
139%%
140#error "8"
141]],
142[input.y:8: #error "8"
143])