[PATCH] D46164: Support: assume `std::is_final` with MSVC

Saleem Abdulrasool via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 26 17:58:45 PDT 2018


compnerd created this revision.
compnerd added a reviewer: rnk.

According to MSDN, Visual Studio 2015 included support for `std::is_final`.  Additionally, a bug in the Visual Studio compiler results in the incorrect definition of `__cplusplus`.  Due to the conditions in the else case not holding either, we end up with no definition of `LLVM_IS_FINAL` when building with MSVC.  This has not yet been a problem with LLVM/clang, however, the uses of `LLVM_IS_FINAL` is more prevalent in swift, which uses the ADT library and causes issues when building lldb with Visual Studio.

Workaround the issue by always assuming that the definition of `std::is_final` is available with Visual Studio.  Since we currently require VS 2015+ for building LLVM, this condition should always hold for the users in LLVM/clang (and for swift).


Repository:
  rL LLVM

https://reviews.llvm.org/D46164

Files:
  include/llvm/Support/type_traits.h


Index: include/llvm/Support/type_traits.h
===================================================================
--- include/llvm/Support/type_traits.h
+++ include/llvm/Support/type_traits.h
@@ -109,7 +109,7 @@
 // If the compiler supports detecting whether a class is final, define
 // an LLVM_IS_FINAL macro. If it cannot be defined properly, this
 // macro will be left undefined.
-#if __cplusplus >= 201402L
+#if __cplusplus >= 201402L || defined(_MSC_VER)
 #define LLVM_IS_FINAL(Ty) std::is_final<Ty>()
 #elif __has_feature(is_final) || LLVM_GNUC_PREREQ(4, 7, 0)
 #define LLVM_IS_FINAL(Ty) __is_final(Ty)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D46164.144256.patch
Type: text/x-patch
Size: 607 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180427/2e41e1f7/attachment.bin>


More information about the llvm-commits mailing list