PR c++/67273
[official-gcc.git] / gcc / testsuite / gcc.target / arm / pr67989.C
blob0006924e24f698711e1e501d09b5098049522ad6
1 /* { dg-do compile } */
2 /* { dg-options "-std=c++11 -O2" } */
3 /* { dg-require-effective-target arm_arch_v4t_ok } */
4 /* { dg-add-options arm_arch_v4t } */
5 /* { dg-additional-options "-marm" } */
7 /* Duplicate version of the test in g++.dg to be able to run this test only if
8    ARMv4t in ARM execution state can be targetted.  Newer architecture don't
9    expose the bug this testcase was written for.  */
12 __extension__ typedef unsigned long long int uint64_t;
13 namespace std __attribute__ ((__visibility__ ("default")))
15   typedef enum memory_order
16   {
17     memory_order_seq_cst
18   } memory_order;
21 namespace std __attribute__ ((__visibility__ ("default")))
23   template < typename _Tp > struct atomic
24   {
25     static constexpr int _S_min_alignment
26       = (sizeof (_Tp) & (sizeof (_Tp) - 1)) || sizeof (_Tp) > 16
27       ? 0 : sizeof (_Tp);
28     static constexpr int _S_alignment
29       = _S_min_alignment > alignof (_Tp) ? _S_min_alignment : alignof (_Tp);
30       alignas (_S_alignment) _Tp _M_i;
31     operator  _Tp () const noexcept
32     {
33       return load ();
34     }
35     _Tp load (memory_order __m = memory_order_seq_cst) const noexcept
36     {
37       _Tp tmp;
38         __atomic_load (&_M_i, &tmp, __m);
39     }
40   };
43 namespace lldb_private
45   namespace imp
46   {
47   }
48   class Address;
50 namespace lldb
52   typedef uint64_t addr_t;
53   class SBSection
54   {
55   };
56   class SBAddress
57   {
58     void SetAddress (lldb::SBSection section, lldb::addr_t offset);
59       lldb_private::Address & ref ();
60   };
62 namespace lldb_private
64   class Address
65   {
66   public:
67     const Address & SetOffset (lldb::addr_t offset)
68     {
69       bool changed = m_offset != offset;
70     }
71     std::atomic < lldb::addr_t > m_offset;
72   };
75 using namespace lldb;
76 using namespace lldb_private;
77 void
78 SBAddress::SetAddress (lldb::SBSection section, lldb::addr_t offset)
80   Address & addr = ref ();
81   addr.SetOffset (offset);