================ @@ -276,6 +276,10 @@ class DecodedThread : public std::enable_shared_from_this<DecodedThread> { /// The string message of this item if it's an error std::string error; + + TraceItemStorage() {} + ~TraceItemStorage() {} ---------------- nmosier wrote:
`TraceItemStorage()` can't be defaulted because the union member `std::string error` has a non-trivial default constructor (quoted from [here](https://en.cppreference.com/w/cpp/language/union)): > If a union contains a non-static data member with a non-trivial default > constructor, the default constructor of the union is deleted by default > unless a variant member of the union has a default member initializer. `~TraceItemStorage()` can't be defaulted because the union member `std::string error` has a non-trivial destructor (quoted from [here](https://en.cppreference.com/w/cpp/language/union)): > If a union contains a non-static data member with a non-trivial special > member function (copy/move constructor, copy/move assignment, or destructor), > that function is deleted by default in the union and needs to be defined > explicitly by the programmer. Anyways, if I try to default them, I get these compile errors: ``` In file included from /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h:33, from /usr/include/c++/11/bits/allocator.h:46, from /usr/include/c++/11/unordered_map:40, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/include/lldb/Target/Trace.h:13, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:13, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:9: /usr/include/c++/11/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage]’: /usr/include/c++/11/bits/alloc_traits.h:516:17: required from ‘static void std::allocator_traits<std::allocator<_Tp1> >::construct(std::allocator_traits<std::allocator<_Tp1> >::allocator_type&, _Up*, _Args&& ...) [with _Up = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; std::allocator_traits<std::allocator<_Tp1> >::allocator_type = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>]’ /usr/include/c++/11/bits/vector.tcc:115:30: required from ‘std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Alloc = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>; std::vector<_Tp, _Alloc>::reference = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage&]’ /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:110:27: required from here /usr/include/c++/11/ext/new_allocator.h:162:11: error: use of deleted function ‘lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage::TraceItemStorage()’ 162 | { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:9: /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:280:5: note: ‘lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage::TraceItemStorage()’ is implicitly deleted because the default definition would be ill-formed: 280 | TraceItemStorage() = default; | ^~~~~~~~~~~~~~~~ /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:278:17: error: union member ‘lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage::error’ with non-trivial ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ 278 | std::string error; | ^~~~~ ``` and ``` In file included from /usr/include/c++/11/optional:44, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/include/lldb/Target/Trace.h:12, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:13, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:9: /usr/include/c++/11/bits/stl_construct.h: In instantiation of ‘void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*]’: /usr/include/c++/11/bits/alloc_traits.h:848:15: required from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator<_T2>&) [with _ForwardIterator = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage]’ /usr/include/c++/11/bits/stl_vector.h:680:15: required from ‘std::vector<_Tp, _Alloc>::~vector() [with _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Alloc = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>]’ /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:253:62: required from here /usr/include/c++/11/bits/stl_construct.h:188:51: error: static assertion failed: value type is destructible 188 | static_assert(is_destructible<_Value_type>::value, | ^~~~~ /usr/include/c++/11/bits/stl_construct.h:188:51: note: ‘std::integral_constant<bool, false>::value’ evaluates to false In file included from /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h:33, from /usr/include/c++/11/bits/allocator.h:46, from /usr/include/c++/11/unordered_map:40, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/include/lldb/Target/Trace.h:13, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:13, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:9: /usr/include/c++/11/ext/new_allocator.h: In instantiation of ‘void __gnu_cxx::new_allocator<_Tp>::destroy(_Up*) [with _Up = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage]’: /usr/include/c++/11/bits/alloc_traits.h:535:15: required from ‘static void std::allocator_traits<std::allocator<_Tp1> >::destroy(std::allocator_traits<std::allocator<_Tp1> >::allocator_type&, _Up*) [with _Up = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; std::allocator_traits<std::allocator<_Tp1> >::allocator_type = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>]’ /usr/include/c++/11/bits/vector.tcc:488:28: required from ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Alloc = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>; std::vector<_Tp, _Alloc>::iterator = std::vector<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>::iterator]’ /usr/include/c++/11/bits/vector.tcc:121:21: required from ‘std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Alloc = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>; std::vector<_Tp, _Alloc>::reference = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage&]’ /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:110:27: required from here /usr/include/c++/11/ext/new_allocator.h:168:20: error: use of deleted function ‘lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage::~TraceItemStorage()’ 168 | { __p->~_Up(); } | ~~~~~~~~~^~ In file included from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:9: /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:281:5: note: ‘lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage::~TraceItemStorage()’ is implicitly deleted because the default definition would be ill-formed: 281 | ~TraceItemStorage() = default; | ^ /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:278:17: error: union member ‘lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage::error’ with non-trivial ‘std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::~basic_string() [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]’ 278 | std::string error; | ^~~~~ In file included from /usr/include/c++/11/vector:66, from /usr/include/c++/11/functional:62, from /usr/include/c++/11/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/11/algorithm:74, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/llvm/include/llvm/ADT/DenseMap.h:25, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/llvm/include/llvm/Support/JSON.h:49, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/include/lldb/Target/Trace.h:15, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.h:13, from /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:9: /usr/include/c++/11/bits/stl_uninitialized.h: In instantiation of ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = std::move_iterator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*>; _ForwardIterator = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*]’: /usr/include/c++/11/bits/stl_uninitialized.h:333:37: required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = std::move_iterator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*>; _ForwardIterator = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage]’ /usr/include/c++/11/bits/stl_uninitialized.h:355:2: required from ‘_ForwardIterator std::__uninitialized_move_if_noexcept_a(_InputIterator, _InputIterator, _ForwardIterator, _Allocator&) [with _InputIterator = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*; _ForwardIterator = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage*; _Allocator = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>]’ /usr/include/c++/11/bits/vector.tcc:474:3: required from ‘void std::vector<_Tp, _Alloc>::_M_realloc_insert(std::vector<_Tp, _Alloc>::iterator, _Args&& ...) [with _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Alloc = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>; std::vector<_Tp, _Alloc>::iterator = std::vector<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>::iterator]’ /usr/include/c++/11/bits/vector.tcc:121:21: required from ‘std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::emplace_back(_Args&& ...) [with _Args = {}; _Tp = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage; _Alloc = std::allocator<lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage>; std::vector<_Tp, _Alloc>::reference = lldb_private::trace_intel_pt::DecodedThread::TraceItemStorage&]’ /afs/cs.stanford.edu/u/nmosier/llvm/bugfix-lldb-intelpt/lldb/source/Plugins/Trace/intel-pt/DecodedThread.cpp:110:27: required from here /usr/include/c++/11/bits/stl_uninitialized.h:138:72: error: static assertion failed: result type must be constructible from value type of input range 138 | static_assert(is_constructible<_ValueType2, decltype(*__first)>::value, | ^~~~~ /usr/include/c++/11/bits/stl_uninitialized.h:138:72: note: ‘std::integral_constant<bool, false>::value’ evaluates to false ``` https://github.com/llvm/llvm-project/pull/77252 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits