mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
Enable constexpr on Visual Studio 2015, add support for two equivalent attributes
Patch by Alexander Riccio This patch enables `constexpr` on Visual Studio 2015 by adding `|| LLVM_MSC_PREREQ(1900)` to the preprocessor `#if` statement. Since VS2013 doesn't support `constexpr`, that's purposely excluded. The `LLVM_CONSTEXPR` macro is used in ~25 places. I also added the MSVC/SAL equivalent of: - `__attribute__((__warn_unused_result__))` as an `LLVM_ATTRIBUTE_UNUSED_RESULT` definition - `__attribute__((returns_nonnull))` as an `LLVM_ATTRIBUTE_RETURNS_NONNULL` definition ...in case anybody ever decides to run `/analyze` on LLVM (probably myself, if anybody) Reviewers: rnk, aaron.ballman Differential Revision: http://reviews.llvm.org/D16751 llvm-svn: 260410
This commit is contained in:
parent
abdf63cb3b
commit
637b37f5e7
@ -17,6 +17,10 @@
|
|||||||
|
|
||||||
#include "llvm/Config/llvm-config.h"
|
#include "llvm/Config/llvm-config.h"
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#include <sal.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __has_feature
|
#ifndef __has_feature
|
||||||
# define __has_feature(x) 0
|
# define __has_feature(x) 0
|
||||||
#endif
|
#endif
|
||||||
@ -92,7 +96,7 @@
|
|||||||
#define LLVM_LVALUE_FUNCTION
|
#define LLVM_LVALUE_FUNCTION
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __has_feature(cxx_constexpr) || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
#if __has_feature(cxx_constexpr) || defined(__GXX_EXPERIMENTAL_CXX0X__) || LLVM_MSC_PREREQ(1900)
|
||||||
# define LLVM_CONSTEXPR constexpr
|
# define LLVM_CONSTEXPR constexpr
|
||||||
#else
|
#else
|
||||||
# define LLVM_CONSTEXPR
|
# define LLVM_CONSTEXPR
|
||||||
@ -124,6 +128,8 @@
|
|||||||
|
|
||||||
#if __has_attribute(warn_unused_result) || LLVM_GNUC_PREREQ(3, 4, 0)
|
#if __has_attribute(warn_unused_result) || LLVM_GNUC_PREREQ(3, 4, 0)
|
||||||
#define LLVM_ATTRIBUTE_UNUSED_RESULT __attribute__((__warn_unused_result__))
|
#define LLVM_ATTRIBUTE_UNUSED_RESULT __attribute__((__warn_unused_result__))
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define LLVM_ATTRIBUTE_UNUSED_RESULT _Check_return_
|
||||||
#else
|
#else
|
||||||
#define LLVM_ATTRIBUTE_UNUSED_RESULT
|
#define LLVM_ATTRIBUTE_UNUSED_RESULT
|
||||||
#endif
|
#endif
|
||||||
@ -206,6 +212,8 @@
|
|||||||
|
|
||||||
#if __has_attribute(returns_nonnull) || LLVM_GNUC_PREREQ(4, 9, 0)
|
#if __has_attribute(returns_nonnull) || LLVM_GNUC_PREREQ(4, 9, 0)
|
||||||
#define LLVM_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
|
#define LLVM_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define LLVM_ATTRIBUTE_RETURNS_NONNULL _Ret_notnull_
|
||||||
#else
|
#else
|
||||||
#define LLVM_ATTRIBUTE_RETURNS_NONNULL
|
#define LLVM_ATTRIBUTE_RETURNS_NONNULL
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user