Skip to content
Snippets Groups Projects
Commit 6c3c9435 authored by Nick Mathewson's avatar Nick Mathewson :game_die:
Browse files

Add a fallthrough macro.

This macro defers to __attribute__((fallthrough)) on GCC (and
clang).  Previously we had been using GCC's magic /* fallthrough */
comments, but clang very sensibly doesn't accept those.

Since not all compiler recognize it, we only define it when our
configure script detects that it works.

Part of a fix for 34078.
parent d380acae
No related branches found
No related tags found
No related merge requests found
......@@ -356,6 +356,22 @@ if test "$tor_cv_c_c99_designated_init" != "yes"; then
AC_MSG_ERROR([Your compiler doesn't support c99 designated initializers. This is required as of Tor 0.2.6.x])
fi
saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
AC_CACHE_CHECK([for __attribute__((fallthrough))],
tor_cv_c_attr_fallthrough,
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([extern int x; void fn(void) ;],
[[ switch (x) { case 1: fn(); __attribute__((fallthrough));
case 2: fn(); break; } ]])],
[tor_cv_c_attr_fallthrough=yes],
[tor_cv_c_attr_fallthrough=no] )])
CFLAGS="$saved_CFLAGS"
if test "$tor_cv_c_attr_fallthrough" == "yes"; then
AC_DEFINE(HAVE_ATTR_FALLTHROUGH, [1], [defined if we have the fallthrough attribute.])
fi
TORUSER=_tor
AC_ARG_WITH(tor-user,
AS_HELP_STRING(--with-tor-user=NAME, [specify username for tor daemon]),
......
......@@ -50,6 +50,12 @@
#define CHECK_SCANF(formatIdx, firstArg)
#endif /* defined(__GNUC__) */
#if defined(HAVE_ATTR_FALLTHROUGH)
#define FALLTHROUGH __attribute__((fallthrough))
#else
#define FALLTHROUGH
#endif
/* What GCC do we have? */
#ifdef __GNUC__
#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment