// { dg-require-effective-target c++20 } // { dg-options "-O2 -fdump-tree-dce7" } template struct __new_allocator { void deallocate(int *, int) { operator delete(0); } }; template using __allocator_base = __new_allocator<_Tp>; template struct allocator : __allocator_base { [[__gnu__::__always_inline__]] void deallocate(int *__p, int __n) { __allocator_base::deallocate(__p, __n); } }; template struct allocator_traits; template struct allocator_traits> { using allocator_type = allocator<_Tp>; using pointer = _Tp *; using size_type = int; template using rebind_alloc = allocator<_Up>; static void deallocate(allocator_type &__a, pointer __p, size_type __n) { __a.deallocate(__p, __n); } }; template struct __alloc_traits : allocator_traits<_Alloc> { typedef allocator_traits<_Alloc> _Base_type; template struct rebind { typedef _Base_type::template rebind_alloc<_Tp> other; }; }; long _M_deallocate___n; struct _Vector_base { typedef __alloc_traits>::rebind::other _Tp_alloc_type; typedef __alloc_traits<_Tp_alloc_type>::pointer pointer; struct _Vector_impl_data { pointer _M_start; }; struct _Vector_impl : _Tp_alloc_type, _Vector_impl_data {}; ~_Vector_base() { _M_deallocate(_M_impl._M_start); } _Vector_impl _M_impl; void _M_deallocate(pointer __p) { if (__p) __alloc_traits<_Tp_alloc_type>::deallocate(_M_impl, __p, _M_deallocate___n); } }; struct vector : _Vector_base {}; struct aligned_storage { int dummy_; int *ptr_ref0; vector &ref() { vector *__trans_tmp_2; void *__trans_tmp_1 = &dummy_; union { void *ap_pvoid; vector *as_ptype; } caster{__trans_tmp_1}; __trans_tmp_2 = caster.as_ptype; return *__trans_tmp_2; } }; struct optional_base { optional_base operator=(optional_base &) { bool __trans_tmp_3 = m_initialized; if (__trans_tmp_3) m_initialized = false; return *this; } ~optional_base() { if (m_initialized) m_storage.ref().~vector(); } bool m_initialized; aligned_storage m_storage; }; struct optional : optional_base { optional() : optional_base() {} }; template using Optional = optional; struct Trans_NS___cxx11_basic_stringstream {}; void operator<<(Trans_NS___cxx11_basic_stringstream, int); int testfunctionfoo_myStructs[10]; void testfunctionfoo() { Optional external, internal; for (auto myStruct : testfunctionfoo_myStructs) { Trans_NS___cxx11_basic_stringstream address_stream; address_stream << myStruct; external = internal; } } // { dg-final { scan-tree-dump-not "m_initialized" "dce7" } }