]> git.saurik.com Git - bison.git/commit - data/lalr1.cc
lalr1.cc: fix the support of YYERROR with variants
authorAkim Demaille <akim@lrde.epita.fr>
Fri, 15 Nov 2013 09:08:31 +0000 (10:08 +0100)
committerAkim Demaille <akim@lrde.epita.fr>
Fri, 15 Nov 2013 09:14:05 +0000 (10:14 +0100)
commit5c77412162fbdd2187cb384e55d1088b46a5c56d
tree55bdf314528771c778b4e3bd8b5a2223f1ef3381
parent5cf6e669af1b6133e1ec8cb66a5bd5754ee437c2
lalr1.cc: fix the support of YYERROR with variants

When variant are enabled, the yylhs variable (the left-hand side of
the rule being reduced, i.e. $$ and @$) is explicitly destroyed when
YYERROR is called.  This is because before running the user code, $$
is initialized, so that the user can properly use it.

However, when quitting yyparse, yylhs is also reclaimed by the C++
compiler: the variable goes out of scope.

Instead of trying to be too smart, let the compiler do its job: reduce
the scope of yylhs to exactly the reduction.  This way, whatever the
type of scope exit (regular, exception, return, goto...) this variable
will be properly reclaimed.

Reported by Paolo Simone Gasparello.
<http://lists.gnu.org/archive/html/bug-bison/2013-10/msg00003.html>

* data/lalr1.cc (yyparse): Reduce the scope of yylhs.
* tests/c++.at: We now pass this test.
data/lalr1.cc
tests/c++.at