From: Akim Demaille Date: Wed, 4 Oct 2000 11:52:53 +0000 (+0000) Subject: When a literal string is used to define two different tokens, X-Git-Tag: BISON-1_28b~93 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/8e03724b11043943af86cb8213d90ce7a87f6e22?ds=inline When a literal string is used to define two different tokens, `bison -v' segfaults. Reported by Piotr Gackiewicz, and fixed by Neil Booth. * tests/regression.m4: New file. Include the core of the sample provided by Piotr Gackiewicz. * src/reader.c (parse_token_decl): Diagnose bad cases, and proceed properly. --- diff --git a/ChangeLog b/ChangeLog index 7a28f3d2..2706577c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2000-10-04 Akim Demaille + + When a literal string is used to define two different tokens, + `bison -v' segfaults. + Reported by Piotr Gackiewicz, and fixed by Neil Booth. + + * tests/regression.m4: New file. + Include the core of the sample provided by Piotr Gackiewicz. + * src/reader.c (parse_token_decl): Diagnose bad cases, and proceed + properly. + 2000-10-04 Akim Demaille * src/reader.c (parse_expect_decl): Keep `count' within the size diff --git a/THANKS b/THANKS index 239ffb64..5aa7039a 100644 --- a/THANKS +++ b/THANKS @@ -5,6 +5,7 @@ Jim Meyering meyering@gnu.org Neil Booth NeilB@earthling.net Noah Friedman friedman@gnu.org Paul Eggert eggert@twinsun.com +Piotr Gackiewicz gacek@intertel.com.pl Richard Stallman rms@gnu.org Many people are not named here because we lost track of them. We diff --git a/src/reader.c b/src/reader.c index e4ba16c8..4309cf87 100644 --- a/src/reader.c +++ b/src/reader.c @@ -372,17 +372,25 @@ parse_token_decl (symbol_class what_is, symbol_class what_is_not) } else if (token == IDENTIFIER && *symval->tag == '\"' && symbol) { + if (symval->alias) + warn (_("symbol `%s' used more than once as a literal string"), + symval->tag); + else if (symbol->alias) + warn (_("symbol `%s' given more than one literal string"), + symbol->tag); + else + { + symval->class = token_sym; + symval->type_name = typename; + symval->user_token_number = symbol->user_token_number; + symbol->user_token_number = SALIAS; + symval->alias = symbol; + symbol->alias = symval; + /* symbol and symval combined are only one symbol */ + nsyms--; + } translations = 1; - symval->class = token_sym; - symval->type_name = typename; - symval->user_token_number = symbol->user_token_number; - symbol->user_token_number = SALIAS; - - symval->alias = symbol; - symbol->alias = symval; - symbol = NULL; - - nsyms--; /* symbol and symval combined are only one symbol */ + symbol = NULL; } else if (token == IDENTIFIER) { diff --git a/tests/Makefile.am b/tests/Makefile.am index 9560ecd1..2f2be974 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -21,7 +21,7 @@ # Distribute the testsuite since GNU M4 is needed to build it. noinst_SCRIPTS = testsuite -SUITE = calc.m4 +SUITE = calc.m4 regression.m4 EXTRA_DIST = atgeneral.m4 suite.m4 $(SUITE) diff --git a/tests/regression.m4 b/tests/regression.m4 new file mode 100644 index 00000000..94839aeb --- /dev/null +++ b/tests/regression.m4 @@ -0,0 +1,26 @@ +# -*- Autoconf -*- + +cat <