#include void llvm::call_once(once_flag &flag, void (*fptr)(void)) { while (flag != Done) { if (flag == Wait) { ::Sleep(1); continue; } sys::cas_flag old_val = sys::CompareAndSwap(&flag, Wait, Uninitialized); if (old_val == Uninitialized) { fptr(); sys::MemoryFence(); flag = Done; return; } } sys::MemoryFence(); }