On 06/09/2017 01:14 PM, Ruediger Meier wrote:
Hi,
This patch looks a bit ugly, for example:
## gcc 4.8.1
CC text-utils/more-more.o
../text-utils/more.c: In function ‘command’:
../text-utils/more.c:1273:4: warning: empty declaration [enabled by
default]
UL_FALLTHROUGH;
## icc 16.0.0
text-utils/more.c(1273): warning #1292: unknown attribute "fallthrough"
UL_FALLTHROUGH;
^
diff --git a/include/c.h b/include/c.h
index a5162b964..8a67b5dfb 100644
--- a/include/c.h
+++ b/include/c.h
@@ -77,6 +77,24 @@
#endif
/*
+ * Statement Attributes
+ */
+#if defined(__clang__)
+# ifndef __has_cpp_attribute
+# define __has_cpp_attribute(x) 0
+# endif
+# if __has_cpp_attribute(clang::fallthrough)
+# define UL_FALLTHROUGH [[clang::fallthrough]]
+# else
+# define UL_FALLTHROUGH /* fall through */
+# endif
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define UL_FALLTHROUGH __attribute__((fallthrough))
+#else
+# define UL_FALLTHROUGH /* FALLTHRU */
+#endif
+
+/*
Sorry this was broken. But I've checked now all clang and gcc versions. Looks
like for clang the warning is only enabled when using C++ (clang++). So the
fallthrough warning appears currently only on gcc>=7 and this works to disable
it in a compatible way:
#ifndef __has_cpp_attribute
# define __has_cpp_attribute(x) 0
#endif
#if __has_cpp_attribute(fallthrough)
# define UL_FALLTHROUGH __attribute__((fallthrough))
#else
# define UL_FALLTHROUGH /* fall through */
#endif
Maybe just simplify like this:
#ifndef __has_attribute
#define __has_attribute(x) 0
#endif
#if __has_cpp_attribute(fallthrough)
# define UL_FALLTHROUGH [[fallthrough]]
#else
# define UL_FALLTHROUGH /* fall through */
#endif
The attribute works without "clang::" prefix on recent gcc and clang,
and maybe icc in future.
Otherwise we could check for the attribute in configure, using
autoconf-archive
AX_GCC_FUNC_ATTRIBUTE(fallthrough)
https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
cu,
Rudi
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html