[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 4/6] glr2.cc: fix warnings about uninitialized locations
From: |
Akim Demaille |
Subject: |
[PATCH 4/6] glr2.cc: fix warnings about uninitialized locations |
Date: |
Sat, 26 Dec 2020 08:11:38 +0100 |
With GCC10, the CI shows tons of warnings such as
(327. actions.at:374: testing Initial location: glr2.cc):
input.cc: In member function 'YYRESULTTAG
glr_stack::yyglrReduce(state_set_index, rule_num, bool)':
input.cc:1357:11: error: '<anonymous>.glr_state::yyloc' may be used
uninitialized in this function [-Werror=maybe-uninitialized]
1357 | yyloc = other.yyloc;
| ~~~~~~^~~~~~~~~~~~~
This is because we don't have the constructors for locations. But we
should have them! That's only because of glr.cc that ctors were not
enabled by default. In glr2.cc, they should.
That fixes all the warnings when Bison's locations are used. However,
when user-defined locations without constructor are used, we still
have:
550. calc.at:1409: testing Calculator glr2.cc %locations
api.location.type={Span} ...
calc.cc: In member function 'YYRESULTTAG
glr_stack::yyglrReduce(state_set_index, rule_num, bool)':
calc.cc:1261:11: error: '<anonymous>.glr_state::yyloc' may be used
uninitialized in this function [-Werror=maybe-uninitialized]
1261 | yyloc = other.yyloc;
| ~~~~~~^~~~~~~~~~~~~
To address this case, we need glr_state to explicily initialize its
yyloc member.
* data/skeletons/glr2.cc: Use genuine objects, with ctors, for position
and location.
(glr_state): Explicitly initialize yyloc in the constructors.
---
data/skeletons/glr2.cc | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/data/skeletons/glr2.cc b/data/skeletons/glr2.cc
index 534fe8c4..8790879e 100644
--- a/data/skeletons/glr2.cc
+++ b/data/skeletons/glr2.cc
@@ -40,21 +40,14 @@ m4_define([b4_tname_if],
# (b4_parse_param_orig). Note that b4_parse_param is overquoted
# (and c.m4 strips one level of quotes). This is a PITA, and
# explains why there are so many levels of quotes.
-#
-# The locations
-#
-# We use location.cc just like lalr1.cc, but because glr.c stores
-# the locations in a union, the position and location classes
-# must not have a constructor. Therefore, contrary to lalr1.cc, we
-# must not define "b4_location_constructors". As a consequence the
-# user must initialize the first positions (in particular the
-# filename member).
# We require a pure interface.
m4_define([b4_pure_flag], [1])
m4_include(b4_skeletonsdir/[c++.m4])
-b4_bison_locations_if([m4_include(b4_skeletonsdir/[location.cc])])
+b4_bison_locations_if([
+ m4_define([b4_location_constructors])
+ m4_include(b4_skeletonsdir/[location.cc])])
m4_define([b4_parser_class],
[b4_percent_define_get([[api.parser.class]])])
@@ -777,7 +770,8 @@ public:
: yyresolved (false)
, yylrState (0)
, yyposn (0)
- , yypred (0)]b4_parse_assert_if([[
+ , yypred (0)]b4_locations_if([[
+ , yyloc ()]])[]b4_parse_assert_if([[
, magic_ (MAGIC)]])[
{}
@@ -798,7 +792,8 @@ public:
, yylrState (lrState)
, yyposn (posn)
, yypred (0)
- , yyfirstVal (0)]b4_parse_assert_if([[
+ , yyfirstVal (0)]b4_locations_if([[
+ , yyloc ()]])[]b4_parse_assert_if([[
, magic_ (MAGIC)]])[
{}
--
2.29.2
- [PATCH 0/6] glr2.cc: more fixes, Akim Demaille, 2020/12/26
- [PATCH 1/6] glr: comment changes, Akim Demaille, 2020/12/26
- [PATCH 2/6] glr2.cc: beware of self-assignment, Akim Demaille, 2020/12/26
- [PATCH 3/6] glr2.cc: provide glr_state with a genuine copy-constructor, Akim Demaille, 2020/12/26
- [PATCH 4/6] glr2.cc: fix warnings about uninitialized locations,
Akim Demaille <=
- [PATCH 5/6] glr2.cc: simplify, Akim Demaille, 2020/12/26
- [PATCH 6/6] doc: more about sanitizers, Akim Demaille, 2020/12/26