[libcxx] Diagnose invalid memory order arguments in <atomic>. Fixes PR21179.
authorEric Fiselier <eric@efcs.ca>
Sat, 23 Jul 2016 01:16:55 +0000 (01:16 +0000)
committerEric Fiselier <eric@efcs.ca>
Sat, 23 Jul 2016 01:16:55 +0000 (01:16 +0000)
commit586b16e16a51c2a361de35e1a467723f6a25acc7
tree61d1ae58de588055a8a9f6e9d6a2cf9020174dc1
parenta7d9ec8751b1bb045f83934e9be202a191249db8
[libcxx] Diagnose invalid memory order arguments in <atomic>. Fixes PR21179.

Summary:
This patch uses the __attribute__((enable_if)) hack suggested by @rsmith to diagnose invalid arguments when possible.

In order to diagnose an invalid argument `m` to `f(m)` we provide an additional overload of `f` that is only enabled when `m` is invalid. When that function is enabled it uses __attribute__((unavailable)) to produce a diagnostic message.

Reviewers: mclow.lists, rsmith, jfb, EricWF

Subscribers: bcraig, jfb, rsmith, cfe-commits

Differential Revision: https://reviews.llvm.org/D22557

llvm-svn: 276506
libcxx/include/atomic
libcxx/test/libcxx/atomics/diagnose_invalid_memory_order.fail.cpp [new file with mode: 0644]