Emit an error when mixing <stdatomic.h> and <atomic>
Atomics in C and C++ are incompatible at the moment and mixing the headers can result in confusing error messages. Emit an error explicitly telling about the incompatibility. Introduce the macro `__ALLOW_STDC_ATOMICS_IN_CXX__` that allows to choose in C++ between C atomics and C++ atomics. rdar://problem/27435938 Reviewers: rsmith, EricWF, mclow.lists Reviewed By: mclow.lists Subscribers: jkorous-apple, christof, bumblebritches57, JonChesterfield, smeenai, cfe-commits Differential Revision: https://reviews.llvm.org/D45470 llvm-svn: 331378
This commit is contained in:
parent
dcc815d015
commit
c0a278aada
|
@ -31,6 +31,10 @@
|
|||
# include_next <stdatomic.h>
|
||||
#else
|
||||
|
||||
#if !defined(__ALLOW_STDC_ATOMICS_IN_CXX__) && defined(__cplusplus)
|
||||
#error "<stdatomic.h> is incompatible with the C++ standard library; define __ALLOW_STDC_ATOMICS_IN_CXX__ to proceed."
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// RUN: %clang_cc1 %s -verify
|
||||
// RUN: %clang_cc1 -D__ALLOW_STDC_ATOMICS_IN_CXX__ %s -verify
|
||||
|
||||
#include <stdatomic.h>
|
||||
|
||||
#ifndef __ALLOW_STDC_ATOMICS_IN_CXX__
|
||||
// expected-error@stdatomic.h:* {{<stdatomic.h> is incompatible with the C++ standard library}}
|
||||
#else
|
||||
// expected-no-diagnostics
|
||||
#endif
|
Loading…
Reference in New Issue