warning: avoid warnings about unreachable code

Reported by Uxio Prego.
https://lists.gnu.org/archive/html/help-bison/2018-11/msg00031.html

We also need to move the unreachable 'goto' to a reachable place,
otherwise clang complains about the code being unreachable anyway.
See also https://bugs.llvm.org/show_bug.cgi?id=39736.

Interestingly, we don't have to apply that trick to
`#define YYCDEBUG if (false) std::cerr`, clang does not warn when the
code comes from macro expansion.

* configure.ac: Use -Wunreachable-code when supported.
* data/lalr1.cc, data/yacc.c: Pacify clang's warning about `if (0)`
by using a macro.
Another possibility was to move this statement to a reachable place.
* tests/actions.at, tests/c++.at: Avoid generating unreachable code.
This commit is contained in:
Akim Demaille
2018-11-22 18:03:12 +01:00
parent 660811a6c5
commit cc050fd321
6 changed files with 24 additions and 13 deletions

View File

@@ -113,6 +113,7 @@ if test "$enable_gcc_warnings" = yes; then
-fno-color-diagnostics
-Wno-keyword-macro'
AC_LANG_PUSH([C])
# Clang supports many of GCC's -W options, but only issues warnings
# on the ones it does not recognize. In that case, gl_WARN_ADD
@@ -126,6 +127,11 @@ if test "$enable_gcc_warnings" = yes; then
# CFLAGS, and restore CFLAGS after the tests.
save_CFLAGS=$CFLAGS
gl_WARN_ADD([-Werror=unknown-warning-option], [CFLAGS])
# Accept this warning only if it is not too touchy (e.g., clang 3.3
# and 3.4).
gl_WARN_ADD([-Wunreachable-code], [WARN_CFLAGS],
[AC_LANG_PROGRAM([],
[[if (sizeof (long) < sizeof (int)) return 1;]])])
for i in $warn_common $warn_c;
do
gl_WARN_ADD([$i], [WARN_CFLAGS])
@@ -147,6 +153,7 @@ if test "$enable_gcc_warnings" = yes; then
CFLAGS=$save_CFLAGS
AC_LANG_POP([C])
AC_LANG_PUSH([C++])
save_CXXFLAGS=$CXXFLAGS
gl_WARN_ADD([-Werror=unknown-warning-option], [CXXFLAGS])
@@ -154,6 +161,11 @@ if test "$enable_gcc_warnings" = yes; then
do
gl_WARN_ADD([$i], [WARN_CXXFLAGS])
done
# Accept this warning only if it is not too touchy (e.g., clang 3.3
# and 3.4).
gl_WARN_ADD([-Wunreachable-code], [WARN_CXXFLAGS],
[AC_LANG_PROGRAM([],
[[if (sizeof (long) < sizeof (int)) return 1;]])])
gl_WARN_ADD([-Wzero-as-null-pointer-constant], [WARN_CXXFLAGS],
[AC_LANG_PROGRAM([], [nullptr])])
gl_WARN_ADD([-Werror], [WERROR_CXXFLAGS])