util: fix NORETURN for msvc, add HAVE_FUNC_ATTRIBUTE_NORETURN to c99_compat.h
authorRoland Scheidegger <sroland@vmware.com>
Thu, 11 Jan 2018 00:49:00 +0000 (01:49 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 12 Jan 2018 01:52:10 +0000 (02:52 +0100)
We've seen some problems internally due to macro redefinition.
Fix this by adding HAVE_FUNC_ATTRIBUTE_NORETURN to c99_compat.h,
and defining it for msvc.
And avoid redefinition just in case.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
include/c99_compat.h
src/util/macros.h

index cb690c6e2a0180702a5b0ee8c1d535435d6c78aa..81621a7fabcba77fe8432cd2fa69ce82dea9aeeb 100644 (file)
@@ -164,6 +164,7 @@ test_c99_compat_h(const void * restrict a,
 #    define HAVE_FUNC_ATTRIBUTE_FORMAT 1
 #    define HAVE_FUNC_ATTRIBUTE_PACKED 1
 #    define HAVE_FUNC_ATTRIBUTE_ALIAS 1
+#    define HAVE_FUNC_ATTRIBUTE_NORETURN 1
 
 #    if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
        /* https://gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/Other-Builtins.html */
index d6e37053b15ed7c3513d72bda5d0e69fa41cfb37..432d5139301adcce4a667f98f2fc3682f6ea1360 100644 (file)
@@ -171,10 +171,14 @@ do {                       \
 #define ATTRIBUTE_RETURNS_NONNULL
 #endif
 
-#ifdef HAVE_FUNC_ATTRIBUTE_NORETURN
-#define NORETURN __attribute__((__noreturn__))
-#else
-#define NORETURN
+#ifndef NORETURN
+#  ifdef _MSC_VER
+#    define NORETURN __declspec(noreturn)
+#  elif defined HAVE_FUNC_ATTRIBUTE_NORETURN
+#    define NORETURN __attribute__((__noreturn__))
+#  else
+#    define NORETURN
+#  endif
 #endif
 
 #ifdef __cplusplus