[Sema] atomic_compare_exchange: check failure memory order (#74959)
commitfed564432cef76f8b303c19ab1dfc0a14878fbc3
authorFangrui Song <i@maskray.me>
Thu, 14 Dec 2023 19:03:28 +0000 (14 11:03 -0800)
committerGitHub <noreply@github.com>
Thu, 14 Dec 2023 19:03:28 +0000 (14 11:03 -0800)
treeffa392c614b3c37bfc7a30f962395e28642f5d9b
parent419c45a3252489d0ebac4535fe5a4ed9a6af6bbd
[Sema] atomic_compare_exchange: check failure memory order (#74959)

For

`__atomic_compare_exchange{,_n}/__c11_atomic_compare_exchange_{strong,weak}`,
GCC checks both the success memory order and the failure memory order
under the default -Winvalid-memory-model ("memory model" is confusing
here and "memory order" is much more common in the atomic context).

* The failure memory order, if a constant, must be one of
  relaxed/consume/acquire/seq_cst.

Clang checks just the success memory order under the default
-Watomic-memory-ordering. This patch checks the failure memory order.
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaChecking.cpp
clang/test/Sema/atomic-ops.c
clang/test/SemaCUDA/atomic-ops.cu