/* { dg-do compile } */ /* { dg-options "-std=c++11 -O2" } */ /* { dg-require-effective-target arm_arch_v4t_ok } */ /* { dg-add-options arm_arch_v4t } */ /* { dg-additional-options "-marm -Wno-return-type" } */ /* Duplicate version of the test in g++.dg to be able to run this test only if ARMv4t in ARM execution state can be targetted. Newer architecture don't expose the bug this testcase was written for. */ __extension__ typedef unsigned long long int uint64_t; namespace std __attribute__ ((__visibility__ ("default"))) { typedef enum memory_order { memory_order_seq_cst } memory_order; } namespace std __attribute__ ((__visibility__ ("default"))) { template < typename _Tp > struct atomic { static constexpr int _S_min_alignment = (sizeof (_Tp) & (sizeof (_Tp) - 1)) || sizeof (_Tp) > 16 ? 0 : sizeof (_Tp); static constexpr int _S_alignment = _S_min_alignment > alignof (_Tp) ? _S_min_alignment : alignof (_Tp); alignas (_S_alignment) _Tp _M_i; operator _Tp () const noexcept { return load (); } _Tp load (memory_order __m = memory_order_seq_cst) const noexcept { _Tp tmp; __atomic_load (&_M_i, &tmp, __m); } }; } namespace lldb_private { namespace imp { } class Address; } namespace lldb { typedef uint64_t addr_t; class SBSection { }; class SBAddress { void SetAddress (lldb::SBSection section, lldb::addr_t offset); lldb_private::Address & ref (); }; } namespace lldb_private { class Address { public: const Address & SetOffset (lldb::addr_t offset) { bool changed = m_offset != offset; } std::atomic < lldb::addr_t > m_offset; }; } using namespace lldb; using namespace lldb_private; void SBAddress::SetAddress (lldb::SBSection section, lldb::addr_t offset) { Address & addr = ref (); addr.SetOffset (offset); }