brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · aaef049 Raw
82 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <atomic>10 11// struct atomic_flag12 13// void clear(memory_order = memory_order_seq_cst);14// void clear(memory_order = memory_order_seq_cst) volatile;15 16#include <atomic>17#include <cassert>18 19#include "test_macros.h"20 21int main(int, char**)22{23    {24        std::atomic_flag f; // uninitialized25        f.clear();26        assert(f.test_and_set() == 0);27        f.clear();28        assert(f.test_and_set() == 0);29    }30    {31        std::atomic_flag f;32        f.clear(std::memory_order_relaxed);33        assert(f.test_and_set() == 0);34        f.clear(std::memory_order_relaxed);35        assert(f.test_and_set() == 0);36    }37    {38        std::atomic_flag f;39        f.clear(std::memory_order_release);40        assert(f.test_and_set() == 0);41        f.clear(std::memory_order_release);42        assert(f.test_and_set() == 0);43    }44    {45        std::atomic_flag f;46        f.clear(std::memory_order_seq_cst);47        assert(f.test_and_set() == 0);48        f.clear(std::memory_order_seq_cst);49        assert(f.test_and_set() == 0);50    }51    {52        volatile std::atomic_flag f;53        f.clear();54        assert(f.test_and_set() == 0);55        f.clear();56        assert(f.test_and_set() == 0);57    }58    {59        volatile std::atomic_flag f;60        f.clear(std::memory_order_relaxed);61        assert(f.test_and_set() == 0);62        f.clear(std::memory_order_relaxed);63        assert(f.test_and_set() == 0);64    }65    {66        volatile std::atomic_flag f;67        f.clear(std::memory_order_release);68        assert(f.test_and_set() == 0);69        f.clear(std::memory_order_release);70        assert(f.test_and_set() == 0);71    }72    {73        volatile std::atomic_flag f;74        f.clear(std::memory_order_seq_cst);75        assert(f.test_and_set() == 0);76        f.clear(std::memory_order_seq_cst);77        assert(f.test_and_set() == 0);78    }79 80  return 0;81}82