`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 <akim@epita.fr>
+
+ 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 <akim@epita.fr>
* src/reader.c (parse_expect_decl): Keep `count' within the size
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
}
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)
{
# 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)
--- /dev/null
+# -*- Autoconf -*-
+
+cat <<EOF
+
+Regression tests.
+
+EOF
+
+AT_SETUP(Duplicate string)
+
+AT_DATA([duplicate.y],
+[[/* `Bison -v' used to dump core when two tokens are defined with the same
+ string, as LE and GE below. */
+
+%token NUM
+%token LE "<="
+%token GE "<="
+
+%%
+exp: '(' exp ')' | NUM ;
+%%
+]])
+
+AT_CHECK([bison -v duplicate.y -o duplicate.c], 0, ignore, ignore)
+
+AT_CLEANUP(duplicate.*)
AT_INIT([bison])
AT_INCLUDE([calc.m4])
+AT_INCLUDE([regression.m4])