// PR debug/83084
// { dg-do compile }
// { dg-options "-O2 -fcompare-debug -Wno-return-type" }
enum E { F };
template <E = F> struct A {
  bool foo ();
  int b;
};
template <> bool A<>::foo () {
  int a;
  do
    if (a)
      return false;
  while (__atomic_compare_exchange_n (&b, &a, 0, 1, 4, 0));
}