Browse Source

include: Fix build with VS 11 (i.e, 2012).

NOTE: Candidate for the stable branches.

Reviewed-by: Brian Paul <brianp@vmware.com>
tags/mesa-9.2-rc1
José Fonseca 12 years ago
parent
commit
57cd1d1454
1 changed files with 42 additions and 0 deletions
  1. 42
    0
      include/c99_compat.h

+ 42
- 0
include/c99_compat.h View File

@@ -29,6 +29,37 @@
#define _C99_COMPAT_H_


/*
* 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
*/
@@ -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_ */

Loading…
Cancel
Save