forked from OSchip/llvm-project
Fix std::tuples EBO when targeting the MSVC ABI.
MSVC/clang-cl doesn't do a full EBO unless __declspec(empty_bases) is applied to the derived type. This causes certain tuple tests to fail. This patch adds the empty_bases attribute to __tuple_impl in order for tuple to fully provide the EBO. llvm-svn: 292159
This commit is contained in:
parent
fc26379a84
commit
b43f17c835
|
@ -100,6 +100,9 @@
|
||||||
#ifndef __is_identifier
|
#ifndef __is_identifier
|
||||||
#define __is_identifier(__x) 1
|
#define __is_identifier(__x) 1
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef __has_declspec_attribute
|
||||||
|
#define __has_declspec_attribute(__x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#define __has_keyword(__x) !(__is_identifier(__x))
|
#define __has_keyword(__x) !(__is_identifier(__x))
|
||||||
|
|
||||||
|
@ -1023,6 +1026,13 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
|
||||||
# define _LIBCPP_DIAGNOSE_ERROR(...)
|
# define _LIBCPP_DIAGNOSE_ERROR(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_LIBCPP_ABI_MICROSOFT) && \
|
||||||
|
(defined(_LIBCPP_COMPILER_MSVC) || __has_declspec_attribute(empty_bases))
|
||||||
|
# define _LIBCPP_DECLSPEC_EMPTY_BASES __declspec(empty_bases)
|
||||||
|
#else
|
||||||
|
# define _LIBCPP_DECLSPEC_EMPTY_BASES
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
|
|
||||||
#endif // _LIBCPP_CONFIG
|
#endif // _LIBCPP_CONFIG
|
||||||
|
|
|
@ -366,7 +366,7 @@ struct __all_default_constructible<__tuple_types<_Tp...>>
|
||||||
template<class _Indx, class ..._Tp> struct __tuple_impl;
|
template<class _Indx, class ..._Tp> struct __tuple_impl;
|
||||||
|
|
||||||
template<size_t ..._Indx, class ..._Tp>
|
template<size_t ..._Indx, class ..._Tp>
|
||||||
struct __tuple_impl<__tuple_indices<_Indx...>, _Tp...>
|
struct _LIBCPP_DECLSPEC_EMPTY_BASES __tuple_impl<__tuple_indices<_Indx...>, _Tp...>
|
||||||
: public __tuple_leaf<_Indx, _Tp>...
|
: public __tuple_leaf<_Indx, _Tp>...
|
||||||
{
|
{
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
_LIBCPP_INLINE_VISIBILITY
|
||||||
|
|
Loading…
Reference in New Issue