Let NULL and MSVC headers coexist better.
Fixes the two issues mentioned in PR12146. llvm-svn: 155490
This commit is contained in:
parent
a8022fa70d
commit
1d725ecf93
|
@ -43,10 +43,13 @@ typedef __WCHAR_TYPE__ wchar_t;
|
|||
|
||||
#undef NULL
|
||||
#ifdef __cplusplus
|
||||
#undef __null // VC++ hack.
|
||||
#define NULL __null
|
||||
# if !defined(__MINGW32__) && !defined(_MSC_VER)
|
||||
# define NULL __null
|
||||
# else
|
||||
# define NULL 0
|
||||
# endif
|
||||
#else
|
||||
#define NULL ((void*)0)
|
||||
# define NULL ((void*)0)
|
||||
#endif
|
||||
|
||||
#define offsetof(t, d) __builtin_offsetof(t, d)
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// RUN: %clang -fsyntax-only -target i686-pc-win32 %s
|
||||
// RUN: %clang -fsyntax-only -target i386-mingw32 %s
|
||||
|
||||
// Something in MSVC's headers (pulled in e.g. by <crtdefs.h>) defines __null
|
||||
// to something, mimick that.
|
||||
#define __null
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
// __null is used as a type annotation in MS headers, with __null defined to
|
||||
// nothing in regular builds. This should continue to work even with stddef.h
|
||||
// included.
|
||||
void f(__null void* p) { }
|
||||
|
||||
// NULL should work fine even with __null defined to nothing.
|
||||
void* p = NULL;
|
Loading…
Reference in New Issue