summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosé Fonseca <jfonseca@vmware.com>2013-03-12 20:37:47 +0000
committerJosé Fonseca <jfonseca@vmware.com>2013-03-12 22:07:10 +0000
commit57cd1d1454653f778837eec0ee5d4060bc59c5ba (patch)
tree10ec756e0d4f3f8b8e969a404a8cac1e67fc2392
parent70fe7c6d3e1c7534f6598c4616bebf672f42668b (diff)
include: Fix build with VS 11 (i.e, 2012).
NOTE: Candidate for the stable branches. Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r--include/c99_compat.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/include/c99_compat.h b/include/c99_compat.h
index 39f958fdfdd..3a9f502a7ea 100644
--- a/include/c99_compat.h
+++ b/include/c99_compat.h
@@ -30,6 +30,37 @@
/*
+ * MSVC hacks.
+ */
+#if defined(_MSC_VER)
+ /*
+ * Visual Studio 2012 will complain if we define the `inline` keyword, but
+ * actually it only supports the keyword on C++.
+ *
+ * We could skip this check by defining _ALLOW_KEYWORD_MACROS, but there is
+ * probably value in checking this for other keywords. So simply include
+ * the checking before we define it below.
+ */
+# if _MSC_VER >= 1700
+# include <xkeycheck.h>
+# endif
+
+ /*
+ * XXX: MSVC has a `__restrict` keyword, but it also has a
+ * `__declspec(restrict)` modifier, so it is impossible to define a
+ * `restrict` macro without interfering with the latter. Furthermore the
+ * MSVC standard library uses __declspec(restrict) under the _CRTRESTRICT
+ * macro. For now resolve this issue by redefining _CRTRESTRICT, but going
+ * forward we should probably should stop using restrict, especially
+ * considering that our code does not obbey strict aliasing rules any way.
+ */
+# include <crtdefs.h>
+# undef _CRTRESTRICT
+# define _CRTRESTRICT
+#endif
+
+
+/*
* C99 inline keyword
*/
#ifndef inline
@@ -102,4 +133,15 @@
#endif
+/* Simple test case for debugging */
+#if 0
+static inline const char *
+test_c99_compat_h(const void * restrict a,
+ const void * restrict b)
+{
+ return __func__;
+}
+#endif
+
+
#endif /* _C99_COMPAT_H_ */