glr2.cc: disable GCC 4.6 warning

231. conflicts.at:1096: testing Syntax error in consistent error state: glr2.cc ...
    tests/conflicts.at:1096: $CXX $CXXFLAGS $CPPFLAGS  $LDFLAGS -o input input.cc $LIBS
    input.cc: In member function 'YYRESULTTAG glr_stack::yyresolveValue(glr_state*)':
    input.cc:2674:36: error: 'yysval' may be used uninitialized in this function [-Werror=uninitialized]

Do not initialize the variable: this way ASAN can really make sure we
do set it to a proper value.
If we initialize it, ASAN would report nothing.

* data/skeletons/c.m4 (YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN): Disable
GCC 4.6's -Wuninitialized.
* data/skeletons/glr2.cc: Disable the warning locally.
This commit is contained in:
Akim Demaille
2020-09-14 19:50:29 +02:00
parent 795a59aba4
commit 34476c449a
3 changed files with 30 additions and 2 deletions

View File

@@ -560,6 +560,26 @@ re-run the tests, run:
make check
## Docker
Running old compilers is not very easy. Docker can be used for some of
them. Have a look at .travis.yml for setups. Move the tarball in /tmp and
run, for instance:
```
docker run -v /tmp:/tmp -it ubuntu:xenial
```
### GCC 4.6
On Ubuntu Xenial.
```
apt-get update
apt-get install software-properties-common
apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
apt-get update
apt-get install -y gcc-4.6 g++-4.6 m4 make
```
Release Procedure
=================

View File

@@ -394,12 +394,18 @@ dnl use C' _Noreturn in C++, to avoid -Wc11-extensions warnings.
# define YYUSE(E) /* empty */
#endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
/* Suppress an incorrect diagnostic about yylval being uninitialized. */
#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
# else
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# endif
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else

View File

@@ -2551,7 +2551,9 @@ public:
if (yyflag == yyok)
{
yys->yyresolved = true;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
yys->semanticVal() = yysval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
else
yys->setFirstVal(YY_NULLPTR);