yacc bug in reader.c:end_rule()
Giorgos Keramidas
keramida at ceid.upatras.gr
Sun Sep 23 14:50:00 PDT 2007
On 2007-09-23 04:13, Darren Reed <darrenr at freebsd.org> wrote:
> The following sample grammar will exercise the bug:
>
> %{
> %}
>
> %union {
> char *ptr;
> };
>
> %type <ptr> test
> %%
>
> test: | $$ = malloc(2);
> ;
>
> %%
There's definitely a bug somewhere in yacc(1), which this triggers.
On 7.0-CURRENT #0: Fri Sep 21 19:09:58 EEST 2007, when I use the
following Makefile and this sample grammar, I get:
% keramida at kobe:/home/keramida/tmp/yt$ cat -n Makefile
% 1 PROG= foo
% 2
% 3 SRCS= foo.y
% 4
% 5 WARNS?= 6
% 6 WFORMAT?= 2
% 7
% 8 .include <bsd.prog.mk>
% keramida at kobe:/home/keramida/tmp/yt$ make
% Warning: Object directory not changed from original /home/keramida/tmp/yt
% yacc -d -o foo.c foo.y
% *** Signal 11
%
% Stop in /home/keramida/tmp/yt.
% keramida at kobe:/home/keramida/tmp/yt$
I just happened to be running a userland with DEBUG_FLAGS='-g' and the
stack trace of yacc(1) is:
% (gdb) where
% #0 0x080505ba in end_rule () at /home/build/src/usr.bin/yacc/reader.c:1260
% #1 0x08052920 in read_grammar () at /home/build/src/usr.bin/yacc/reader.c:1621
% #2 0x08053b45 in reader () at /home/build/src/usr.bin/yacc/reader.c:1926
% #3 0x0804b792 in main (argc=Cannot access memory at address 0xc
% ) at /home/build/src/usr.bin/yacc/main.c:434
% (gdb) list /home/build/src/usr.bin/yacc/reader.c:1260
% 1255 int i;
% 1256
% 1257 if (!last_was_action && plhs[nrules]->tag)
% 1258 {
% 1259 for (i = nitems - 1; pitem[i]; --i) continue;
% 1260 if (pitem[i+1] == 0 || pitem[i+1]->tag != plhs[nrules]->tag)
% 1261 default_action_warning();
% 1262 }
% 1263
% 1264 last_was_action = 0;
% (gdb)
If there's anything else I can do to help track this down, please feel
free to let me know.
- Giorgos
More information about the freebsd-current
mailing list