diff options
| author | Reid Kleckner <rnk@google.com> | 2016-02-10 19:07:47 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2016-02-10 19:07:47 +0000 |
| commit | 66b780740311bbfe9f7d93a2b345c68507d76014 (patch) | |
| tree | df68a9a649f05dc0e20e40f05b62d6366ccc5f64 | |
| parent | 38c177ac1d754cde4a09d46beee547c9cd5ca5be (diff) | |
| download | bcm5719-llvm-66b780740311bbfe9f7d93a2b345c68507d76014.tar.gz bcm5719-llvm-66b780740311bbfe9f7d93a2b345c68507d76014.zip | |
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
| -rw-r--r-- | llvm/include/llvm/Support/Compiler.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h index b3416bbfffb..d28151cfc15 100644 --- a/llvm/include/llvm/Support/Compiler.h +++ b/llvm/include/llvm/Support/Compiler.h @@ -17,6 +17,10 @@ #include "llvm/Config/llvm-config.h" +#if defined(_MSC_VER) +#include <sal.h> +#endif + #ifndef __has_feature # define __has_feature(x) 0 #endif @@ -92,7 +96,7 @@ #define LLVM_LVALUE_FUNCTION #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 #else # define LLVM_CONSTEXPR @@ -124,6 +128,8 @@ #if __has_attribute(warn_unused_result) || LLVM_GNUC_PREREQ(3, 4, 0) #define LLVM_ATTRIBUTE_UNUSED_RESULT __attribute__((__warn_unused_result__)) +#elif defined(_MSC_VER) +#define LLVM_ATTRIBUTE_UNUSED_RESULT _Check_return_ #else #define LLVM_ATTRIBUTE_UNUSED_RESULT #endif @@ -206,6 +212,8 @@ #if __has_attribute(returns_nonnull) || LLVM_GNUC_PREREQ(4, 9, 0) #define LLVM_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull)) +#elif defined(_MSC_VER) +#define LLVM_ATTRIBUTE_RETURNS_NONNULL _Ret_notnull_ #else #define LLVM_ATTRIBUTE_RETURNS_NONNULL #endif |

