c++: fix GCC8 warnings about uninitialized values

In 0931d14728 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.
This commit is contained in:
Akim Demaille
2018-08-15 15:19:25 +02:00
parent 45b9d97b54
commit 1113522acb
3 changed files with 17 additions and 15 deletions

View File

@@ -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)])[
{}]])[