-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ROOT fails to parse <boost/shared_ptr.hpp> at runtime on macOS #6454
Comments
How critical is this? I'd prefer to see whether the ongoing llvm upgrade to llvm9 fixes this. (And yes, I can reproduce something similar even with bare ROOT) |
It makes the ATLAS "analysis releases" (partly) non-functional on macOS. 😦 I came across this when running our unit test suite using Xcode 12.0. Since macOS is only used for analysis code development by some people in ATLAS, and nobody uses the analysis releases "in production" on that platform, this is not the most burning issue ever. It is however definitely something that would be nice to see fixed (eventually). |
Sure thing; will get fixed. Though it might be even more productive to change |
FYI: FairRoot is currently also affected by this issue. Apparently Boost.program_options uses |
Llvm9 is in master. Can someone check whether it helps? (I am aware of a general runtime issue with AliROOT and thus likely FairROOT that's being worked on.) |
With master (@ 5b06edd) I get the same error it seems:
|
The following "patch" ;-) resolves this issue for me: diff --git a/interpreter/llvm/src/tools/clang/lib/Headers/stdatomic.h b/interpreter/llvm/src/tools/clang/lib/Headers/stdatomic.h
index 665551ea69..c64e6f5954 100644
--- a/interpreter/llvm/src/tools/clang/lib/Headers/stdatomic.h
+++ b/interpreter/llvm/src/tools/clang/lib/Headers/stdatomic.h
@@ -10,167 +10,5 @@
#ifndef __CLANG_STDATOMIC_H
#define __CLANG_STDATOMIC_H
-/* If we're hosted, fall back to the system's stdatomic.h. FreeBSD, for
- * example, already has a Clang-compatible stdatomic.h header.
- */
-#if __STDC_HOSTED__ && __has_include_next(<stdatomic.h>)
-# include_next <stdatomic.h>
-#else
-
-#include <stddef.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* 7.17.1 Introduction */
-
-#define ATOMIC_BOOL_LOCK_FREE __CLANG_ATOMIC_BOOL_LOCK_FREE
-#define ATOMIC_CHAR_LOCK_FREE __CLANG_ATOMIC_CHAR_LOCK_FREE
-#define ATOMIC_CHAR16_T_LOCK_FREE __CLANG_ATOMIC_CHAR16_T_LOCK_FREE
-#define ATOMIC_CHAR32_T_LOCK_FREE __CLANG_ATOMIC_CHAR32_T_LOCK_FREE
-#define ATOMIC_WCHAR_T_LOCK_FREE __CLANG_ATOMIC_WCHAR_T_LOCK_FREE
-#define ATOMIC_SHORT_LOCK_FREE __CLANG_ATOMIC_SHORT_LOCK_FREE
-#define ATOMIC_INT_LOCK_FREE __CLANG_ATOMIC_INT_LOCK_FREE
-#define ATOMIC_LONG_LOCK_FREE __CLANG_ATOMIC_LONG_LOCK_FREE
-#define ATOMIC_LLONG_LOCK_FREE __CLANG_ATOMIC_LLONG_LOCK_FREE
-#define ATOMIC_POINTER_LOCK_FREE __CLANG_ATOMIC_POINTER_LOCK_FREE
-
-/* 7.17.2 Initialization */
-
-#define ATOMIC_VAR_INIT(value) (value)
-#define atomic_init __c11_atomic_init
-
-/* 7.17.3 Order and consistency */
-
-typedef enum memory_order {
- memory_order_relaxed = __ATOMIC_RELAXED,
- memory_order_consume = __ATOMIC_CONSUME,
- memory_order_acquire = __ATOMIC_ACQUIRE,
- memory_order_release = __ATOMIC_RELEASE,
- memory_order_acq_rel = __ATOMIC_ACQ_REL,
- memory_order_seq_cst = __ATOMIC_SEQ_CST
-} memory_order;
-
-#define kill_dependency(y) (y)
-
-/* 7.17.4 Fences */
-
-/* These should be provided by the libc implementation. */
-void atomic_thread_fence(memory_order);
-void atomic_signal_fence(memory_order);
-
-#define atomic_thread_fence(order) __c11_atomic_thread_fence(order)
-#define atomic_signal_fence(order) __c11_atomic_signal_fence(order)
-
-/* 7.17.5 Lock-free property */
-
-#define atomic_is_lock_free(obj) __c11_atomic_is_lock_free(sizeof(*(obj)))
-
-/* 7.17.6 Atomic integer types */
-
-#ifdef __cplusplus
-typedef _Atomic(bool) atomic_bool;
-#else
-typedef _Atomic(_Bool) atomic_bool;
-#endif
-typedef _Atomic(char) atomic_char;
-typedef _Atomic(signed char) atomic_schar;
-typedef _Atomic(unsigned char) atomic_uchar;
-typedef _Atomic(short) atomic_short;
-typedef _Atomic(unsigned short) atomic_ushort;
-typedef _Atomic(int) atomic_int;
-typedef _Atomic(unsigned int) atomic_uint;
-typedef _Atomic(long) atomic_long;
-typedef _Atomic(unsigned long) atomic_ulong;
-typedef _Atomic(long long) atomic_llong;
-typedef _Atomic(unsigned long long) atomic_ullong;
-typedef _Atomic(uint_least16_t) atomic_char16_t;
-typedef _Atomic(uint_least32_t) atomic_char32_t;
-typedef _Atomic(wchar_t) atomic_wchar_t;
-typedef _Atomic(int_least8_t) atomic_int_least8_t;
-typedef _Atomic(uint_least8_t) atomic_uint_least8_t;
-typedef _Atomic(int_least16_t) atomic_int_least16_t;
-typedef _Atomic(uint_least16_t) atomic_uint_least16_t;
-typedef _Atomic(int_least32_t) atomic_int_least32_t;
-typedef _Atomic(uint_least32_t) atomic_uint_least32_t;
-typedef _Atomic(int_least64_t) atomic_int_least64_t;
-typedef _Atomic(uint_least64_t) atomic_uint_least64_t;
-typedef _Atomic(int_fast8_t) atomic_int_fast8_t;
-typedef _Atomic(uint_fast8_t) atomic_uint_fast8_t;
-typedef _Atomic(int_fast16_t) atomic_int_fast16_t;
-typedef _Atomic(uint_fast16_t) atomic_uint_fast16_t;
-typedef _Atomic(int_fast32_t) atomic_int_fast32_t;
-typedef _Atomic(uint_fast32_t) atomic_uint_fast32_t;
-typedef _Atomic(int_fast64_t) atomic_int_fast64_t;
-typedef _Atomic(uint_fast64_t) atomic_uint_fast64_t;
-typedef _Atomic(intptr_t) atomic_intptr_t;
-typedef _Atomic(uintptr_t) atomic_uintptr_t;
-typedef _Atomic(size_t) atomic_size_t;
-typedef _Atomic(ptrdiff_t) atomic_ptrdiff_t;
-typedef _Atomic(intmax_t) atomic_intmax_t;
-typedef _Atomic(uintmax_t) atomic_uintmax_t;
-
-/* 7.17.7 Operations on atomic types */
-
-#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
-#define atomic_store_explicit __c11_atomic_store
-
-#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
-#define atomic_load_explicit __c11_atomic_load
-
-#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
-#define atomic_exchange_explicit __c11_atomic_exchange
-
-#define atomic_compare_exchange_strong(object, expected, desired) __c11_atomic_compare_exchange_strong(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
-#define atomic_compare_exchange_strong_explicit __c11_atomic_compare_exchange_strong
-
-#define atomic_compare_exchange_weak(object, expected, desired) __c11_atomic_compare_exchange_weak(object, expected, desired, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)
-#define atomic_compare_exchange_weak_explicit __c11_atomic_compare_exchange_weak
-
-#define atomic_fetch_add(object, operand) __c11_atomic_fetch_add(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_add_explicit __c11_atomic_fetch_add
-
-#define atomic_fetch_sub(object, operand) __c11_atomic_fetch_sub(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_sub_explicit __c11_atomic_fetch_sub
-
-#define atomic_fetch_or(object, operand) __c11_atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_or_explicit __c11_atomic_fetch_or
-
-#define atomic_fetch_xor(object, operand) __c11_atomic_fetch_xor(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_xor_explicit __c11_atomic_fetch_xor
-
-#define atomic_fetch_and(object, operand) __c11_atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST)
-#define atomic_fetch_and_explicit __c11_atomic_fetch_and
-
-/* 7.17.8 Atomic flag type and operations */
-
-typedef struct atomic_flag { atomic_bool _Value; } atomic_flag;
-
-#define ATOMIC_FLAG_INIT { 0 }
-
-/* These should be provided by the libc implementation. */
-#ifdef __cplusplus
-bool atomic_flag_test_and_set(volatile atomic_flag *);
-bool atomic_flag_test_and_set_explicit(volatile atomic_flag *, memory_order);
-#else
-_Bool atomic_flag_test_and_set(volatile atomic_flag *);
-_Bool atomic_flag_test_and_set_explicit(volatile atomic_flag *, memory_order);
-#endif
-void atomic_flag_clear(volatile atomic_flag *);
-void atomic_flag_clear_explicit(volatile atomic_flag *, memory_order);
-
-#define atomic_flag_test_and_set(object) __c11_atomic_exchange(&(object)->_Value, 1, __ATOMIC_SEQ_CST)
-#define atomic_flag_test_and_set_explicit(object, order) __c11_atomic_exchange(&(object)->_Value, 1, order)
-
-#define atomic_flag_clear(object) __c11_atomic_store(&(object)->_Value, 0, __ATOMIC_SEQ_CST)
-#define atomic_flag_clear_explicit(object, order) __c11_atomic_store(&(object)->_Value, 0, order)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STDC_HOSTED__ */
#endif /* __CLANG_STDATOMIC_H */
Unfortunately, I could not figure out where this C header is included. It appears that neither ROOT, Boost, nor clang includes it anywhere - so, my current assumption is that the interpreter somehow pulls it in (I am not too familiar with this compiled header mechanism; maybe I overlooked something there)? I will leave it to the experts to find the right switch to disable it if my assumption is even correct. |
https://reviews.llvm.org/D45470 This change in a more recent version of this header in libcxx also made me believe it is not meant to combine |
I agree we should not |
TODO: Replace with proper fix eventually
TODO: Replace with proper fix eventually
It causes a clash of a macro defined in stdatomic with an identifier in boost. Fixes root-project#6454.
It causes a clash of a macro defined in stdatomic with an identifier in boost. Fixes root-project#6454. (cherry picked from commit 7a3896a)
Peter Hristov for Alice confirmed that the above PRs fix this issue. |
It causes a clash of a macro defined in stdatomic with an identifier in boost. Fixes #6454.
Let me know if you still see this in v6-24-00-patches or the upcoming v6.24/02 and I'll reopen this issue! |
It causes a clash of a macro defined in stdatomic with an identifier in boost. Fixes root-project#6454.
Describe the bug
I just ran into an issue while trying to use the ATLAS analysis software on the latest version of macOS, with the latest version of Xcode. While trying to load the dictionary of a class whose header includes
<boost/shared_ptr.hpp>
, my test application dies.To simplify things a bit, I put a simple reproducer under: https://github.com/krasznaa/root-boost-dictionary-error With which I see the following:
Expected behavior
When using the same demonstrator code on Linux, everything goes as expected.
To Reproduce
Just take the demonstrator code from https://github.com/krasznaa/root-boost-dictionary-error, tweak its Makefile to work correctly for you, and then try to have interactive ROOT load the dictionary for the
MyClass
type, as I've shown above.Setup
Additional context
N/A
The text was updated successfully, but these errors were encountered: