Skip to content
Snippets Groups Projects
  • Hal Finkel's avatar
    39f1f1f1
    Add an implementation of C11's stdatomic.h · 39f1f1f1
    Hal Finkel authored
    Adds a Clang-specific implementation of C11's stdatomic.h header. On systems,
    such as FreeBSD, where a stdatomic.h header is already provided, we defer to
    that header instead (using our __has_include_next technology). Otherwise, we
    provide an implementation in terms of our __c11_atomic_* intrinsics (that were
    created for this purpose).
    
    C11 7.1.4p1 requires function declarations for atomic_thread_fence,
    atomic_signal_fence, atomic_flag_test_and_set,
    atomic_flag_test_and_set_explicit, and atomic_flag_clear, and requires that
    they have external linkage. Accordingly, we provide these declarations, but if
    a user elides the shadowing macros and uses them, then they must have a libc
    (or similar) that actually provides definitions.
    
    atomic_flag is implemented using _Bool as the underlying type. This is
    consistent with the implementation provided by FreeBSD and also GCC 4.9 (at
    least when __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1).
    
    Patch by Richard Smith (rebased and slightly edited by me -- Richard said I
    should drive at this point).
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218957 91177308-0d34-0410-b5e6-96231b3b80d8
    39f1f1f1
    History
    Add an implementation of C11's stdatomic.h
    Hal Finkel authored
    Adds a Clang-specific implementation of C11's stdatomic.h header. On systems,
    such as FreeBSD, where a stdatomic.h header is already provided, we defer to
    that header instead (using our __has_include_next technology). Otherwise, we
    provide an implementation in terms of our __c11_atomic_* intrinsics (that were
    created for this purpose).
    
    C11 7.1.4p1 requires function declarations for atomic_thread_fence,
    atomic_signal_fence, atomic_flag_test_and_set,
    atomic_flag_test_and_set_explicit, and atomic_flag_clear, and requires that
    they have external linkage. Accordingly, we provide these declarations, but if
    a user elides the shadowing macros and uses them, then they must have a libc
    (or similar) that actually provides definitions.
    
    atomic_flag is implemented using _Bool as the underlying type. This is
    consistent with the implementation provided by FreeBSD and also GCC 4.9 (at
    least when __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1).
    
    Patch by Richard Smith (rebased and slightly edited by me -- Richard said I
    should drive at this point).
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218957 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.