gcc 4.7 and above has atomic built-ins which slightly different APIs from those provided by clang. Add proxy functions that wrap the gcc built-ins to produce a symbol that is API equivalent to the clang built-ins. This allows libc++'s atomic library to be used with gcc-4.7 and newer.
Constexpr code for __to_gcc_order() by "Hans Boehm" <hboehm@google.com>
Test now passing using gcc-4.7:
atomics/atomics.fences/atomic_signal_fence.pass.cpp
atomics/atomics.fences/atomic_thread_fence.pass.cpp
atomics/atomics.flag/atomic_flag_clear_explicit.pass.cpp
atomics/atomics.flag/atomic_flag_clear.pass.cpp
atomics/atomics.flag/atomic_flag_test_and_set_explicit.pass.cpp
atomics/atomics.flag/atomic_flag_test_and_set.pass.cpp
atomics/atomics.flag/clear.pass.cpp
atomics/atomics.flag/default.pass.cpp
atomics/atomics.flag/init.pass.cpp
atomics/atomics.flag/test_and_set.pass.cpp
atomics/atomics.lockfree/lockfree.pass.cpp
atomics/atomics.order/kill_dependency.pass.cpp
atomics/atomics.order/memory_order.pass.cpp
atomics/atomics.types.generic/cstdint_typedefs.pass.cpp
atomics/atomics.types.generic/integral_typedefs.pass.cpp
atomics/atomics.types.generic/trivially_copyable.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_strong.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_compare_exchange_weak.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_exchange.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_add.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_and.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_or.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_sub.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_fetch_xor.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_init.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_load_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_load.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_store_explicit.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_store.pass.cpp
atomics/atomics.types.operations/atomics.types.operations.req/atomic_var_init.pass.cpp
atomics/version.pass.cpp
No regressions on other tests.