[PATCH] D50743: libcxx: Mark __temp_value::__temp_value as _LIBCPP_NO_CFI.
Peter Collingbourne via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 14 16:05:27 PDT 2018
pcc created this revision.
pcc added reviewers: mclow.lists, EricWF.
Herald added a subscriber: christof.
This constructor needs to cast a pointer to uninitialized
memory to a pointer to object type in order to call
allocator_traits::construct(). This cast is not allowed when CFI cast
checks are enabled.
I did this instead of marking __addr() as _LIBCPP_NO_CFI so that we
don't lose CFI checks on get() or the dtor.
Repository:
rL LLVM
https://reviews.llvm.org/D50743
Files:
libcxx/include/memory
Index: libcxx/include/memory
===================================================================
--- libcxx/include/memory
+++ libcxx/include/memory
@@ -5631,8 +5631,11 @@
_Tp & get() { return *__addr(); }
template<class... _Args>
- __temp_value(_Alloc &__alloc, _Args&& ... __args) : __a(__alloc)
- { _Traits::construct(__a, __addr(), _VSTD::forward<_Args>(__args)...); }
+ _LIBCPP_NO_CFI
+ __temp_value(_Alloc &__alloc, _Args&& ... __args) : __a(__alloc) {
+ _Traits::construct(__a, reinterpret_cast<_Tp*>(addressof(__v)),
+ _VSTD::forward<_Args>(__args)...);
+ }
~__temp_value() { _Traits::destroy(__a, __addr()); }
};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50743.160712.patch
Type: text/x-patch
Size: 692 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180814/05db57e0/attachment.bin>
More information about the llvm-commits
mailing list