blob: a0ae6d83b2d1c86a38d6bb67c03a7840a85b808f [file] [log] [blame]
// RUN: %check_clang_tidy %s zircon-fbl-atomic %t -- -- -isystem %S/Inputs/zircon
#include <fbl/atomic.h>
// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: including fbl/atomic.h is deprecated
// CHECK-FIXES-NOT: #include <fbl/atomic.h>
namespace fbl {
enum memory_order : int {
memory_order_relaxed = 0,
memory_order_acquire = 1,
memory_order_release = 2,
memory_order_acq_rel = 3,
memory_order_seq_cst = 4,
};
template <typename T> struct atomic {
bool compare_exchange_weak(T *expected, T desired,
memory_order success_order,
memory_order failure_order) {
return true;
}
bool compare_exchange_strong(T *expected, T desired,
memory_order success_order,
memory_order failure_order) {
return true;
}
};
template <class T> struct atomic<T *> {
bool compare_exchange_weak(T **expected, T *desired,
memory_order success_order,
memory_order failure_order) {
return true;
}
bool compare_exchange_strong(T **expected, T *desired,
memory_order success_order,
memory_order failure_order) {
return true;
}
};
template <typename T>
void atomic_store(atomic<T> *atomic_ptr, T value,
memory_order order = memory_order_seq_cst) {} // NOLINT
template <typename T> void atomic_init(atomic<T> *atomic_ptr, T value) {}
void atomic_thread_fence(memory_order order = memory_order_seq_cst) {} // NOLINT
void atomic_signal_fence(memory_order order = memory_order_seq_cst) {} // NOLINT
using atomic_char = atomic<char>;
} // namespace fbl
namespace std {
typedef enum memory_order {
memory_order_relaxed,
memory_order_consume, // load-consume
memory_order_acquire, // load-acquire
memory_order_release, // store-release
memory_order_acq_rel, // store-release load-acquire
memory_order_seq_cst // store-release load-acquire
} memory_order;
template <class T> struct atomic {
bool compare_exchange_weak(T &expc, T desr, memory_order s, memory_order f) {
return true;
}
bool compare_exchange_strong(T &expc, T desr, memory_order s,
memory_order f) {
return true;
}
};
template <class T> struct atomic<T *> {
bool compare_exchange_weak(T *&expc, T *desr, memory_order s,
memory_order f) {
return true;
}
bool compare_exchange_strong(T *&expc, T *desr, memory_order s,
memory_order f) {
return true;
}
};
template <class _Tp>
inline void atomic_store(atomic<_Tp> *__o, _Tp __d) {}
template <class _Tp>
inline void atomic_store_explicit(atomic<_Tp> *__o, _Tp __d, memory_order __m) {
}
template <class T> void atomic_init(atomic<T> *obj, T desr) {}
void atomic_thread_fence(memory_order m) {}
void atomic_signal_fence(memory_order m) {}
typedef atomic<char> atomic_char;
} // namespace std
int main() {
int a = fbl::memory_order_relaxed;
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use of fbl::memory_order_relaxed is deprecated, use std::memory_order_relaxed instead
// CHECK-FIXES: int a = std::memory_order_relaxed;
int b = std::memory_order_relaxed;
int c = fbl::memory_order_acquire;
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use of fbl::memory_order_acquire is deprecated, use std::memory_order_acquire instead
// CHECK-FIXES: int c = std::memory_order_acquire;
int d = std::memory_order_acquire;
int e = fbl::memory_order_release;
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use of fbl::memory_order_release is deprecated, use std::memory_order_release instead
// CHECK-FIXES: int e = std::memory_order_release;
int f = std::memory_order_release;
int g = fbl::memory_order_acq_rel;
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use of fbl::memory_order_acq_rel is deprecated, use std::memory_order_acq_rel instead
// CHECK-FIXES: int g = std::memory_order_acq_rel;
int h = std::memory_order_acq_rel;
fbl::memory_order order = fbl::memory_order_seq_cst;
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::memory_order is deprecated, use std::memory_order instead
// CHECK-MESSAGES: :[[@LINE-2]]:29: warning: use of fbl::memory_order_seq_cst is deprecated, use std::memory_order_seq_cst instead
// CHECK-FIXES: std::memory_order order = std::memory_order_seq_cst;
std::memory_order order_std = std::memory_order_seq_cst;
int expc = 1;
int *expc_ptr = &expc;
int desr = 2;
fbl::atomic<int> k;
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic<int> is deprecated, use std::atomic<int> instead
// CHECK-FIXES: std::atomic<int> k;
std::atomic<int> l;
bool weak_k = k.compare_exchange_weak(&expc, desr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:41: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool weak_k = k.compare_exchange_weak(expc, desr, order, order);
bool weak_ptr_k = k.compare_exchange_weak(expc_ptr, desr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:45: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool weak_ptr_k = k.compare_exchange_weak(*expc_ptr, desr, order, order);
bool strong_k = k.compare_exchange_strong(&expc, desr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:45: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool strong_k = k.compare_exchange_strong(expc, desr, order, order);
bool strong_ptr_k = k.compare_exchange_strong(expc_ptr, desr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool strong_ptr_k = k.compare_exchange_strong(*expc_ptr, desr, order, order);
bool weak_l = l.compare_exchange_weak(expc, desr, order_std, order_std);
bool weak_ptr_l = l.compare_exchange_weak(*expc_ptr, desr, order_std, order_std);
bool strong_l = l.compare_exchange_strong(expc, desr, order_std, order_std);
bool strong_ptr_l = l.compare_exchange_strong(*expc_ptr, desr, order_std, order_std);
int **expc_ptr_ptr = &expc_ptr;
int *desr_ptr = &desr;
fbl::atomic<int *> m;
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic<int *> is deprecated, use std::atomic<int *> instead
// CHECK-FIXES: std::atomic<int *> m;
std::atomic<int *> n;
auto o = fbl::atomic<int *>();
// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: use of fbl::atomic<int *> is deprecated, use std::atomic<int *> instead
// CHECK-FIXES: auto o = std::atomic<int *>();
auto p = std::atomic<int *>();
bool weak_m = m.compare_exchange_weak(&expc_ptr, desr_ptr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:42: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool weak_m = m.compare_exchange_weak(expc_ptr, desr_ptr, order, order);
bool weak_ptr_m = m.compare_exchange_weak(expc_ptr_ptr, desr_ptr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:45: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool weak_ptr_m = m.compare_exchange_weak(*expc_ptr_ptr, desr_ptr, order, order);
bool strong_m = m.compare_exchange_strong(&expc_ptr, desr_ptr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:45: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool strong_m = m.compare_exchange_strong(expc_ptr, desr_ptr, order, order);
bool strong_ptr_m = m.compare_exchange_strong(expc_ptr_ptr, desr_ptr, order, order);
// CHECK-MESSAGES: :[[@LINE-1]]:49: warning: std::atomic requires references instead of pointers
// CHECK-FIXES: bool strong_ptr_m = m.compare_exchange_strong(*expc_ptr_ptr, desr_ptr, order, order);
bool weak_n = n.compare_exchange_weak(expc_ptr, desr_ptr, order_std, order_std);
bool weak_ptr_n = n.compare_exchange_weak(*expc_ptr_ptr, desr_ptr, order_std, order_std);
bool strong_n = n.compare_exchange_strong(expc_ptr, desr_ptr, order_std, order_std);
bool strong_ptr_n = n.compare_exchange_strong(*expc_ptr_ptr, desr_ptr, order_std, order_std);
fbl::atomic_store(&m, expc_ptr);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic_store is deprecated, use std::atomic_store instead
// CHECK-FIXES: std::atomic_store(&m, expc_ptr);
fbl::atomic_store(&m, expc_ptr, order);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic_store is deprecated, use std::atomic_store_explicit instead
// CHECK-FIXES: std::atomic_store_explicit(&m, expc_ptr, order);
std::atomic_store(&n, expc_ptr);
std::atomic_store_explicit(&n, expc_ptr, order_std);
fbl::atomic_init(&m, expc_ptr);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic_init is deprecated, use std::atomic_init instead
// CHECK-FIXES: std::atomic_init(&m, expc_ptr);
std::atomic_store(&n, expc_ptr);
fbl::atomic_thread_fence(order);
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic_thread_fence is deprecated, use std::atomic_thread_fence instead
// CHECK-FIXES: std::atomic_thread_fence(order);
fbl::atomic_thread_fence();
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic_thread_fence is deprecated, use std::atomic_thread_fence instead
// CHECK-FIXES: std::atomic_thread_fence(std::memory_order_seq_cst);
std::atomic_thread_fence(order_std);
fbl::atomic_char q;
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: use of fbl::atomic_char is deprecated, use std::atomic_char instead
// CHECK-FIXES: std::atomic_char q;
std::atomic_char r;
auto s = fbl::atomic_char();
// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: use of fbl::atomic_char is deprecated, use std::atomic_char instead
// CHECK-FIXES: auto s = std::atomic_char();
auto t = std::atomic_char();
}