bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: master: c++: fix GCC8 warnings about uninitialized values


From: Akim Demaille
Subject: FYI: master: c++: fix GCC8 warnings about uninitialized values
Date: Wed, 15 Aug 2018 20:24:07 +0200

Installed in master.  I still have warning in some other
tests, but I’m unsure how to fix them.


commit 5a240e35e051c9c551a4ff0cd6b75670d3d0fce3
Author: Akim Demaille <address@hidden>
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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]