Installed in master. I still have warning in some other tests, but I’m unsure how to fix them.
commit 5a240e35e051c9c551a4ff0cd6b75670d3d0fce3 Author: Akim Demaille <[email protected]> Date: Wed Aug 15 15:19:25 2018 +0200 c++: fix GCC8 warnings about uninitialized values In 0931d14728fb4a2272399f2c927ae78e2607b4fb I removed too many initializations from some ctors: some were not about base ctors, but about member variables. In fact, more of them were missing to please GCC 8. While at it, generate more natural code for C++ without variant: instead of template <typename Base> parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other) : Base (other) , value () { value = other.value } generate template <typename Base> parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other) : Base (other) , value (other.value) {} * data/c++.m4 (basic_symbol::basic_symbol): Always initialize 'value', it might be a POD without a ctor. * data/lalr1.cc (stack_symbol_type::stack_symbol_type): Likewise. * data/variant.hh (variant::variant): Default initialize the buffer too. diff --git a/data/c++.m4 b/data/c++.m4 index 90679345..396d8613 100644 --- a/data/c++.m4 +++ b/data/c++.m4 @@ -296,18 +296,19 @@ m4_define([b4_public_types_define], // basic_symbol. template <typename Base> - ]b4_parser_class_name[::basic_symbol<Base>::basic_symbol ()]b4_locations_if([ - : location ()])[ + ]b4_parser_class_name[::basic_symbol<Base>::basic_symbol () + : value ()]b4_locations_if([ + , location ()])[ {} template <typename Base> ]b4_parser_class_name[::basic_symbol<Base>::basic_symbol (const basic_symbol& other) - : Base (other)]b4_locations_if([ + : Base (other) + , value (]b4_variant_if([], [other.value])[)]b4_locations_if([ , location (other.location)])[ - { - ]b4_variant_if([b4_symbol_variant([other.type_get ()], [value], [copy], - [other.value])], - [value = other.value;])[ + {]b4_variant_if([ + b4_symbol_variant([other.type_get ()], [value], [copy], + [other.value])])[ } template <typename Base> @@ -330,7 +331,8 @@ m4_define([b4_public_types_define], ]b4_parser_class_name[::basic_symbol<Base>::basic_symbol (]b4_join( [typename Base::kind_type t], b4_locations_if([const location_type& l]))[) - : Base (t)]b4_locations_if([ + : Base (t) + , value ()]b4_locations_if([ , location (l)])[ {}]])[ diff --git a/data/lalr1.cc b/data/lalr1.cc index 2c99aacf..053875de 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -574,11 +574,10 @@ m4_if(b4_prefix, [yy], [], {} ]b4_parser_class_name[::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that) - : super_type (s]b4_locations_if([, that.location])[) - { - ]b4_variant_if([b4_symbol_variant([that.type_get ()], - [value], [move], [that.value])], - [[value = that.value;]])[ + : super_type (s]b4_variant_if([], [, that.value])[]b4_locations_if([, that.location])[) + {]b4_variant_if([ + b4_symbol_variant([that.type_get ()], + [value], [move], [that.value])])[ // that is emptied. that.type = empty_symbol; } diff --git a/data/variant.hh b/data/variant.hh index 990d14d2..1ffc5b26 100644 --- a/data/variant.hh +++ b/data/variant.hh @@ -94,8 +94,9 @@ m4_define([b4_variant_define], typedef variant<S> self_type; /// Empty construction. - variant ()]b4_parse_assert_if([ - : yytypeid_ (YY_NULLPTR)])[ + variant () + : yybuffer_ ()]b4_parse_assert_if([ + , yytypeid_ (YY_NULLPTR)])[ {} /// Construct and fill.
