Index: tests/concurrency/suspend_then.cfa
===================================================================
--- tests/concurrency/suspend_then.cfa	(revision b3609b2d7adb62e64922155f7611b28417c8f02e)
+++ tests/concurrency/suspend_then.cfa	(revision d9235b6b52c0c803228f96d6d38ce3b319d154c9)
@@ -5,4 +5,5 @@
 #include <stdlib.hfa>
 #include <string.h>
+#include <bits/atomic.hfa>
 
 #define __kick_rate 150000ul
@@ -30,13 +31,14 @@
 
 volatile bool done = false;
-Coroutine * volatile the_cor = 0p;
+Coroutine c;
+Coroutine * the_cor = &c;
 
-void store(Coroutine & cor) {
-	__atomic_store_n( &the_cor, &cor, __ATOMIC_SEQ_CST );
+void store( Coroutine & cor ) {
+	AtomicStr( the_cor, &cor );
 }
 
 Coroutine * take( void ) {
 	Coroutine * val = 0p;
-	Coroutine * ret = __atomic_exchange_n( &the_cor, val, __ATOMIC_SEQ_CST );
+	Coroutine * ret = AtomicFas( the_cor, val );
 	assert( ! ret || ! the_cor );
 	return ret;
@@ -68,5 +70,4 @@
 		mine = take();
 		if ( ! mine ) continue;
-
 		print( "T - took\n" );
 		resume( *mine );
@@ -77,16 +78,5 @@
 int main() {
 	processor p[2];
-	Coroutine c;
-	resume( c ); // Prime the coroutine to avoid one of the threads being its starter
-
-#if defined(__GNUC__) && __GNUC__ == 12
-	#pragma GCC diagnostic push
-	#pragma GCC diagnostic ignored "-Wdangling-pointer"	// this assignment is ok
-#endif // defined(__GNUC__) && __GNUC__ == 12
-	the_cor = &c;
-#if defined(__GNUC__) && __GNUC__ == 12
-	#pragma GCC diagnostic pop
-#endif // defined(__GNUC__) && __GNUC__ == 12
-
+	resume( c );										// prime coroutine to make program main its starter
 	{
 		Thread t[2];
