Reported by Rob Conde. http://lists.gnu.org/archive/html/bug-bison/2013-03/msg00003.html
* data/stack.hh (operator=, stack(const stack&)): Make this class uncopyable, i.e., "undefine" these operators: make them private and don't implement them. (clear): New. * data/lalr1.cc: Use it instead of an assignment. (parser): Make this class uncopyable. --- NEWS | 2 ++ THANKS | 1 + data/lalr1.cc | 10 +++++++--- data/stack.hh | 8 ++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index b499cc1..ead8478 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,8 @@ GNU Bison NEWS With locations enabled, __attribute__ was used unprotected. +*** Fix some compiler warnings (lalr1.cc) + * Noteworthy changes in release 2.7 (2012-12-12) [stable] ** Bug fixes diff --git a/THANKS b/THANKS index 9b24974..0244a19 100644 --- a/THANKS +++ b/THANKS @@ -103,6 +103,7 @@ Ralf Wildenhues [email protected] Richard Stallman [email protected] Rob Vermaas [email protected] Robert Anisko [email protected] +Rob Conde [email protected] Satya Kiran Popuri [email protected] Sebastian Setzer [email protected] Sebastien Fricker [email protected] diff --git a/data/lalr1.cc b/data/lalr1.cc index 237b246..68de8b4 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -107,6 +107,10 @@ b4_user_stype #endif private: + /// This class is not copyable. + ]b4_parser_class_name[ (const ]b4_parser_class_name[&); + ]b4_parser_class_name[& operator= (const ]b4_parser_class_name[&); + /// Report a syntax error. /// \param loc where the syntax error is found. /// \param msg a description of the syntax error. @@ -552,9 +556,9 @@ b4_dollar_popdef])[]dnl yynewstate, since the latter expects the semantical and the location values to have been already stored, initialize these stacks with a primary value. */ - yystate_stack_ = state_stack_type (0); - yysemantic_stack_ = semantic_stack_type (0); - yylocation_stack_ = location_stack_type (0); + yystate_stack_.clear (); + yysemantic_stack_.clear (); + yylocation_stack_.clear (); yysemantic_stack_.push (yylval); yylocation_stack_.push (yylloc); diff --git a/data/stack.hh b/data/stack.hh index ab1049c..8f62860 100644 --- a/data/stack.hh +++ b/data/stack.hh @@ -77,6 +77,12 @@ b4_copyright([Stack handling for Bison parsers in C++], seq_.pop_front (); } + void + clear () + { + seq_.clear (); + } + inline unsigned int height () const @@ -88,6 +94,8 @@ b4_copyright([Stack handling for Bison parsers in C++], inline const_iterator end () const { return seq_.rend (); } private: + stack (const stack&); + stack& operator= (const stack&); S seq_; }; -- 1.8.2
