1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
Work around:
SGAtomic.cxx:48:5: error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
to fix build on i386 as Simgear uses CMAKE_CXX_STANDARD=17
--- simgear/structure/SGAtomic.cxx.orig 2025-06-30 14:48:03 UTC
+++ simgear/structure/SGAtomic.cxx
@@ -29,7 +29,7 @@
#if defined(_WIN32)
# include <windows.h>
#elif defined(GCC_ATOMIC_BUILTINS_FOUND)
-#elif defined(__GNUC__) && defined(__i386__)
+#elif (__cplusplus < 201703L) && defined(__GNUC__) && defined(__i386__)
#elif defined(SGATOMIC_USE_MUTEX)
# include <mutex>
#else
@@ -43,7 +43,7 @@ SGAtomic::operator++()
return InterlockedIncrement(reinterpret_cast<long volatile*>(&mValue));
#elif defined(GCC_ATOMIC_BUILTINS_FOUND)
return __sync_add_and_fetch(&mValue, 1);
-#elif defined(__GNUC__) && defined(__i386__)
+#elif (__cplusplus < 201703L) && defined(__GNUC__) && defined(__i386__)
register volatile unsigned* mem = reinterpret_cast<volatile unsigned*>(&mValue);
register unsigned result;
__asm__ __volatile__("lock; xadd{l} {%0,%1|%1,%0}"
@@ -64,7 +64,7 @@ SGAtomic::operator--()
return InterlockedDecrement(reinterpret_cast<long volatile*>(&mValue));
#elif defined(GCC_ATOMIC_BUILTINS_FOUND)
return __sync_sub_and_fetch(&mValue, 1);
-#elif defined(__GNUC__) && defined(__i386__)
+#elif (__cplusplus < 201703L) && defined(__GNUC__) && defined(__i386__)
register volatile unsigned* mem = reinterpret_cast<volatile unsigned*>(&mValue);
register unsigned result;
__asm__ __volatile__("lock; xadd{l} {%0,%1|%1,%0}"
@@ -85,7 +85,7 @@ SGAtomic::operator unsigned() const
#elif defined(GCC_ATOMIC_BUILTINS_FOUND)
__sync_synchronize();
return mValue;
-#elif defined(__GNUC__) && defined(__i386__)
+#elif (__cplusplus < 201703L) && defined(__GNUC__) && defined(__i386__)
__asm__ __volatile__("": : : "memory");
return mValue;
#else
@@ -102,7 +102,7 @@ SGAtomic::compareAndExchange(unsigned oldValue, unsign
return oldValue == InterlockedCompareExchange(lvPtr, newValue, oldValue);
#elif defined(GCC_ATOMIC_BUILTINS_FOUND)
return __sync_bool_compare_and_swap(&mValue, oldValue, newValue);
-#elif defined(__GNUC__) && defined(__i386__)
+#elif (__cplusplus < 201703L) && defined(__GNUC__) && defined(__i386__)
register volatile unsigned* mem = reinterpret_cast<volatile unsigned*>(&mValue);
unsigned before;
__asm__ __volatile__("lock; cmpxchg{l} {%1,%2|%1,%2}"
|