Skip to content
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

Closed
krasznaa opened this issue Sep 25, 2020 · 11 comments · Fixed by #8541 or #8542
Closed

ROOT fails to parse <boost/shared_ptr.hpp> at runtime on macOS #6454

krasznaa opened this issue Sep 25, 2020 · 11 comments · Fixed by #8541 or #8542

Comments

@krasznaa
Copy link
Contributor

krasznaa commented Sep 25, 2020

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:

[bash][eowyn-1]:root-boost-dictionary-error > root
   ------------------------------------------------------------------
  | Welcome to ROOT 6.22/02                        https://root.cern |
  | (c) 1995-2020, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for macosx64 on Aug 17 2020, 12:46:52                      |
  | From tags/v6-22-02@v6-22-02                                      |
  | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'       |
   ------------------------------------------------------------------

root [0] MyClass c;
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1072:31: error: expected expression
template<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_SP_NOEXCEPT
                              ^
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:83:73: note: expanded from macro 'atomic_is_lock_free'
#define atomic_is_lock_free(obj) __c11_atomic_is_lock_free(sizeof(*(obj)))
                                                                        ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1072:81: error: expected ';' at end of declaration
template<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_SP_NOEXCEPT
                                                                                ^
                                                                                ;
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1072:82: error: expected unqualified-id
template<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_SP_NOEXCEPT
                                                                                 ^
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/detail/sp_noexcept.hpp:28:29: note: expanded from macro 'BOOST_SP_NOEXCEPT'
#  define BOOST_SP_NOEXCEPT BOOST_NOEXCEPT
                            ^
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/config/detail/suffix.hpp:965:26: note: expanded from macro 'BOOST_NOEXCEPT'
#  define BOOST_NOEXCEPT noexcept
                         ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1077:33: error: expected parameter declarator
template<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p ) BOOST_SP_NOEXCEPT
                                ^
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:134:55: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                                      ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1077:33: error: expected ')'
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:134:55: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                                      ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1077:33: note: to match this '('
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:134:46: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                             ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1088:24: error: expected parameter declarator
template<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r ) BOOST_SP_NOEXCEPT
                       ^
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:131:75: note: expanded from macro 'atomic_store'
#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
                                                                          ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1088:24: error: expected ')'
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:131:75: note: expanded from macro 'atomic_store'
#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
                                                                          ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1088:24: note: to match this '('
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:131:57: note: expanded from macro 'atomic_store'
#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
                                                        ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1099:33: error: expected parameter declarator
template<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T> r ) BOOST_SP_NOEXCEPT
                                ^
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:137:81: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
                                                                                ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from libMyLibrary dictionary payload:5:
In file included from ./MyClass.h:6:
In file included from /Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/shared_ptr.hpp:17:
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1099:33: error: expected ')'
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:137:81: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
                                                                                ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/Users/krasznaa/ATLAS/sw/projects/externals/install/AnalysisBaseExternals/22.0.0/InstallArea/x86_64-mac1015-clang12-opt/include/boost/smart_ptr/shared_ptr.hpp:1099:33: note: to match this '('
/Users/krasznaa/ATLAS/sw/projects/externals/build/src/ROOT-build/etc/cling/lib/clang/5.0.0/include/stdatomic.h:137:63: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOMIC_SEQ_CST)
                                                              ^
Error in <TInterpreter::AutoParse>: Error parsing payload code for class MyClass with content:

#line 1 "libMyLibrary dictionary payload"


#define _BACKWARD_BACKWARD_WARNING_H
// Inline headers
#include "MyClass.h"

#undef  _BACKWARD_BACKWARD_WARNING_H

ROOT_prompt_0:1:1: error: must use 'class' tag to refer to type 'MyClass' in this scope
MyClass c;
^
class 
ROOT_prompt_0:1:1: note: class 'MyClass' is hidden by a non-type declaration of 'MyClass' here
ROOT_prompt_0:1:9: error: variable has incomplete type 'MyClass'
MyClass c;
        ^
libMyLibrary dictionary forward declarations' payload:5:62: note: forward declaration of 'MyClass'
class __attribute__((annotate("$clingAutoload$MyClass.h")))  MyClass;
                                                             ^
root [1]

Expected behavior

When using the same demonstrator code on Linux, everything goes as expected.

[bash][Legolas]:root-boost-dictionary-error > root
   ------------------------------------------------------------------
  | Welcome to ROOT 6.22/02                        https://root.cern |
  | (c) 1995-2020, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for linuxx8664gcc on Aug 17 2020, 12:46:52                 |
  | From tags/v6-22-02@v6-22-02                                      |
  | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'       |
   ------------------------------------------------------------------

root [0] MyClass c;
root [1]

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

  • ROOT 6.22/02;
  • Boost 1.73.0;
  • macOS 10.15.6;
  • Xcode 12.0.

Additional context

N/A

@krasznaa krasznaa added the bug label Sep 25, 2020
@github-actions github-actions bot added this to Needs triage in Triage Sep 25, 2020
@Axel-Naumann Axel-Naumann self-assigned this Sep 28, 2020
@eguiraud eguiraud moved this from Needs triage to Rest in Triage Oct 6, 2020
@Axel-Naumann
Copy link
Member

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)

@krasznaa
Copy link
Contributor Author

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).

@Axel-Naumann
Copy link
Member

Sure thing; will get fixed. Though it might be even more productive to change boost::shared_ptr to std::shared_ptr ;-) But I will revisit this once llvm9 is in.

@dennisklein
Copy link
Contributor

FYI: FairRoot is currently also affected by this issue. Apparently Boost.program_options uses boost::shared_ptr internally. We see it on macOS 11.2, CLT/Xcode 12.4, ROOT 6.22.06, Boost 1.7[2,5].

@Axel-Naumann
Copy link
Member

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.)

@dennisklein
Copy link
Contributor

Llvm9 is in master. Can someone check whether it helps?

With master (@ 5b06edd) I get the same error it seems:

$ export ROOT_INCLUDE_PATH=$(brew --prefix boost)/include
$ cat test.C
#include <boost/smart_ptr/shared_ptr.hpp>

void test() {}
$ root -q test.C
   ------------------------------------------------------------------
  | Welcome to ROOT 6.23/01                        https://root.cern |
  | (c) 1995-2021, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for macosx64 on Mar 03 2021, 00:17:00                      |
  | From heads/master@v6-23-01-RF-binSampling-1035-g5b06edd125       |
  | With Apple clang version 12.0.0 (clang-1200.0.32.29)             |
  | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'       |
   ------------------------------------------------------------------


Processing test.C...
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:17:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/detail/shared_count.hpp:26:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base.hpp:40:
/usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp:65:30: error: expected parameter declarator
inline boost::uint_least32_t atomic_load( boost::uint_least32_t const * pw )
                             ^
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:55: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                                      ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:17:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/detail/shared_count.hpp:26:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base.hpp:40:
/usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp:65:30: error: expected ')'
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:55: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                                      ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp:65:30: note: to match this '('
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:46: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                             ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:17:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/detail/shared_count.hpp:26:
In file included from /usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base.hpp:40:
/usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp:140:16: error: no matching function for call to '__c11_atomic_load'
        return atomic_load( &use_count_ );
               ^~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:29: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                            ^~~~~~~~~~~~~~~~~
/usr/local/opt/boost/include/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp:65:30: note: candidate function not viable: requires single argument 'pw', but 2 arguments were provided
inline boost::uint_least32_t atomic_load( boost::uint_least32_t const * pw )
                             ^
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:29: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                            ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1081:31: error: expected expression
template<class T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST...
                              ^
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:69:73: note: expanded from macro 'atomic_is_lock_free'
#define atomic_is_lock_free(obj) __c11_atomic_is_lock_free(sizeof(*(obj)))
                                                                        ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1081:81: error: expected ';' at end of declaration
  ...T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_SP_NOEXCEPT
                                                                      ^
                                                                      ;
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1081:82: error: expected unqualified-id
  ...T> inline bool atomic_is_lock_free( shared_ptr<T> const * /*p*/ ) BOOST_SP_NOEXCEPT
                                                                       ^
/usr/local/opt/boost/include/boost/smart_ptr/detail/sp_noexcept.hpp:28:29: note: expanded from macro 'BOOST_SP_NOEXCEPT'
#  define BOOST_SP_NOEXCEPT BOOST_NOEXCEPT
                            ^
/usr/local/opt/boost/include/boost/config/detail/suffix.hpp:974:26: note: expanded from macro 'BOOST_NOEXCEPT'
#  define BOOST_NOEXCEPT noexcept
                         ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1086:33: error: expected parameter declarator
template<class T> shared_ptr<T> atomic_load( shared_ptr<T> const * p ) BOOST_SP_NOEXCEPT
                                ^
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:55: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                                      ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1086:33: error: expected ')'
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:55: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                                      ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1086:33: note: to match this '('
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:120:46: note: expanded from macro 'atomic_load'
#define atomic_load(object) __c11_atomic_load(object, __ATOMIC_SEQ_CST)
                                             ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1097:24: error: expected parameter declarator
template<class T> void atomic_store( shared_ptr<T> * p, shared_ptr<T> r ) BOOST_SP_NOEXCEPT
                       ^
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:117:75: note: expanded from macro 'atomic_store'
#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
                                                                          ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1097:24: error: expected ')'
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:117:75: note: expanded from macro 'atomic_store'
#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
                                                                          ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1097:24: note: to match this '('
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:117:57: note: expanded from macro 'atomic_store'
#define atomic_store(object, desired) __c11_atomic_store(object, desired, __ATOMIC_SEQ_CST)
                                                        ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1108:33: error: expected parameter declarator
template<class T> shared_ptr<T> atomic_exchange( shared_ptr<T> * p, shared_ptr<T> r ) ...
                                ^
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:123:81: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOM...
                                                                                ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
In file included from input_line_8:1:
In file included from /Users/alfaci/dklein/root/test.C:1:
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1108:33: error: expected ')'
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:123:81: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOM...
                                                                                ^
<built-in>:16:26: note: expanded from here
#define __ATOMIC_SEQ_CST 5
                         ^
/usr/local/opt/boost/include/boost/smart_ptr/shared_ptr.hpp:1108:33: note: to match this '('
/Users/alfaci/dklein/root/build_/etc/cling/lib/clang/9.0.1/include/stdatomic.h:123:63: note: expanded from macro 'atomic_exchange'
#define atomic_exchange(object, desired) __c11_atomic_exchange(object, desired, __ATOM...
                                                              ^
$ sw_vers
ProductName:    macOS
ProductVersion: 11.2
BuildVersion:   20D64
$ c++ --version
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ brew info boost
boost: stable 1.75.0 (bottled), HEAD
Collection of portable C++ source libraries
https://www.boost.org/
/usr/local/Cellar/boost/1.75.0_2 (15,058 files, 524.2MB) *
(...)
$ brew config
HOMEBREW_VERSION: 3.0.4-8-gb024954
ORIGIN: https://github.com/Homebrew/brew
HEAD: b024954a0f203a4f439cc95eefb1180c96e943ce
Last commit: 8 hours ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 7254d2fa9b1b01351be360ed99c57e1158f7b53f
Core tap last commit: 42 minutes ago
Core tap branch: master
HOMEBREW_PREFIX: /usr/local
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 12
Homebrew Ruby: 2.6.3 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
CPU: dodeca-core 64-bit kabylake
Clang: 12.0 build 1200
Git: 2.24.3 => /Library/Developer/CommandLineTools/usr/bin/git
Curl: 7.64.1 => /usr/bin/curl
macOS: 11.2-x86_64
CLT: 12.4.0.0.1.1610135815
Xcode: 12.3

@dennisklein
Copy link
Contributor

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.

@dennisklein
Copy link
Contributor

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 <stdatomic.h> and <atomic> in the same C++ program.

@Axel-Naumann
Copy link
Member

I agree we should not #include stdatomic.h. I'll see where it comes from - I bet it's the libc module.

dennisklein added a commit to FairRootGroup/FairSoft that referenced this issue Mar 31, 2021
TODO: Replace with proper fix eventually
dennisklein added a commit to ChristianTackeGSI/FairSoft that referenced this issue Apr 6, 2021
TODO: Replace with proper fix eventually
Axel-Naumann added a commit to Axel-Naumann/root that referenced this issue Jun 25, 2021
It causes a clash of a macro defined in stdatomic with an identifier in boost.
Fixes root-project#6454.
Axel-Naumann added a commit to Axel-Naumann/root that referenced this issue Jun 25, 2021
It causes a clash of a macro defined in stdatomic with an identifier in boost.
Fixes root-project#6454.

(cherry picked from commit 7a3896a)
@Axel-Naumann Axel-Naumann added this to the 6.24/02 milestone Jun 25, 2021
@Axel-Naumann
Copy link
Member

Peter Hristov for Alice confirmed that the above PRs fix this issue.

Axel-Naumann added a commit that referenced this issue Jun 25, 2021
It causes a clash of a macro defined in stdatomic with an identifier in boost.
Fixes #6454.

(cherry picked from commit 7a3896a)
Axel-Naumann added a commit that referenced this issue Jun 25, 2021
It causes a clash of a macro defined in stdatomic with an identifier in boost.
Fixes #6454.
@Axel-Naumann Axel-Naumann added this to Issues in Fixed in 6.24/02 via automation Jun 25, 2021
@Axel-Naumann
Copy link
Member

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!

pzhristov pushed a commit to alisw/root that referenced this issue Aug 27, 2021
It causes a clash of a macro defined in stdatomic with an identifier in boost.
Fixes root-project#6454.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment