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,9 +43,12 @@ typedef __WCHAR_TYPE__ wchar_t;
|
||||||
|
|
||||||
#undef NULL
|
#undef NULL
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#undef __null // VC++ hack.
|
# if !defined(__MINGW32__) && !defined(_MSC_VER)
|
||||||
# define NULL __null
|
# define NULL __null
|
||||||
# else
|
# else
|
||||||
|
# define NULL 0
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
# define NULL ((void*)0)
|
# define NULL ((void*)0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -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