From d17dc9a8b509723f669197e8a1c58b2179b7706c Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 27 May 2018 09:17:36 +0200 Subject: [PATCH] C++: fix -Wdeprecated warnings For instance on test 99: In file included from @@.cc:56: @@.hh:409:26: error: definition of implicit copy constructor for 'stack_symbol_type' is deprecated because it has a user-declared copy assignment operator [-Werror,-Wdeprecated] stack_symbol_type& operator= (const stack_symbol_type& that); ^ Reported by Derek Clegg. https://lists.gnu.org/archive/html/bison-patches/2018-05/msg00036.html * configure.ac (warn_tests): Add -Wdeprecated. * data/lalr1.cc (stack_symbol_type): Add an explicit copy ctor. We cannot rely on the explicit default implementation (`= default`) as we support C++ 98. --- THANKS | 1 + configure.ac | 2 +- data/lalr1.cc | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/THANKS b/THANKS index 52298d08..d964c10a 100644 --- a/THANKS +++ b/THANKS @@ -40,6 +40,7 @@ Daniel Hagerty hag@gnu.org David J. MacKenzie djm@gnu.org David Kastrup dak@gnu.org Dennis Clarke dclarke@blastwave.org +Derek Clegg derek@me.com Derek M. Jones derek@knosof.co.uk Di-an Jan dianj@freeshell.org Dick Streefland dick.streefland@altium.nl diff --git a/configure.ac b/configure.ac index 5412f6b9..99f6ad43 100644 --- a/configure.ac +++ b/configure.ac @@ -94,7 +94,7 @@ if test "$enable_gcc_warnings" = yes; then # -Wno-keyword-macro: We use the "#define private public" dirty # trick in the test suite to check some private implementation # details for lalr1.cc. - warn_tests='-Wundef -pedantic -Wsign-compare -fno-color-diagnostics + warn_tests='-Wundef -pedantic -Wdeprecated -Wsign-compare -fno-color-diagnostics -Wno-keyword-macro' AC_LANG_PUSH([C]) diff --git a/data/lalr1.cc b/data/lalr1.cc index a4feab0a..5ac9d2de 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -314,6 +314,8 @@ b4_location_define])])[ typedef basic_symbol super_type; /// Construct an empty symbol. stack_symbol_type (); + /// Copy construct. + stack_symbol_type (const stack_symbol_type& that); /// Steal the contents from \a sym to build this. stack_symbol_type (state_type s, symbol_type& sym); /// Assignment, needed by push_back. @@ -573,6 +575,13 @@ m4_if(b4_prefix, [yy], [], ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type () {} + ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (const stack_symbol_type& that) + : super_type (that.state]b4_locations_if([, that.location])[) + { + ]b4_variant_if([b4_symbol_variant([that.type_get ()], + [value], [copy], [that.value])], + [[value = that.value;]])[ + } ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that) : super_type (s]b4_locations_if([, that.location])[)