C++ std::move issue
Hans Ã…berg <[email protected]> Wed, 21 Sep 2022 15:08:09 +0200
| Newsgroups | gmane.comp.parsers.bison.bugs |
|---|---|
| Message-ID | <[email protected]> |
In Bison 3.8.1, there may be a double application of std::move on the =
semantic value under some circumstances, which may be valid C++, but not =
intended. A std::move should leave the object in a valid but unspecified =
state, which probably means that assignments should be still possible.
In the parser, there is a std::move in:
/* Initialize the stack. The initial state will be set in
yynewstate, since the latter expects the semantical and the
location values to have been already stored, initialize these
stacks with a primary value. */
yystack_.clear ();
yypush_ (YY_NULLPTR, 0, YY_MOVE (yyla));
Then there follows code that gets a new yyla.value:
// Read a lookahead token.
if (yyla.empty ())
{
=E2=80=A6
}
However, if this condition is false, there is a second std::move at:
// Shift the lookahead token.
yypush_ ("Shifting", state_type (yyn), YY_MOVE (yyla));
goto yynewstate;