From 34476c449ad3a28f003a69f81c2bb721dd884248 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 14 Sep 2020 19:50:29 +0200 Subject: [PATCH] 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. --- README-hacking.md | 20 ++++++++++++++++++++ data/skeletons/c.m4 | 10 ++++++++-- data/skeletons/glr2.cc | 2 ++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/README-hacking.md b/README-hacking.md index b5245bb9..10fba1fd 100644 --- a/README-hacking.md +++ b/README-hacking.md @@ -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 ================= diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4 index c41db4d1..b3a63076 100644 --- a/data/skeletons/c.m4 +++ b/data/skeletons/c.m4 @@ -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. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ +#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 diff --git a/data/skeletons/glr2.cc b/data/skeletons/glr2.cc index 55dc3164..343489ab 100644 --- a/data/skeletons/glr2.cc +++ b/data/skeletons/glr2.cc @@ -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);