c++: fix double free when a symbol_type was moved

Currently the following piece of code crashes (with parse.assert),
because we don't record that s was moved-from, and we invoke its dtor.

    {
      auto s = parser::make_INT (42);
      auto s2 = std::move (s);
    }

Reported by Wolfgang Thaller.
http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00077.html

* data/c++.m4 (by_type): Provide a move-ctor.
(basic_symbol): Be sure not to read a moved-from value.
* tests/c++.at (C++ Variant-based Symbols Unit Tests): Check this case.
This commit is contained in:
Akim Demaille
2018-12-23 19:37:30 +01:00
parent 45cd7dfb7f
commit 807bf60cfc
3 changed files with 23 additions and 3 deletions

1
THANKS
View File

@@ -180,6 +180,7 @@ Wayne Green wayne@infosavvy.com
Wei Song wsong83@gmail.com
Wojciech Polak polak@gnu.org
Wolfgang S. Kechel wolfgang.kechel@prs.de
Wolfgang Thaller wolfgang.thaller@gmx.net
Wolfram Wagner ww@mpi-sb.mpg.de
Wwp subscript@free.fr
xolodho xolodho@gmail.com