Skip to content

xAODCoreSTLDict Fix, master branch (2021.03.30.)

This is a weird one, and a follow-up from !41646 (merged).

It turns out that the formalism introduced by !41646 (merged) makes the build on macOS crash. For some reason genreflex gets very confused about the configuration that's currently in the master branch. 😕

[  1%] Generating xAODCoreSTLDictReflexDict.cxx
0  libCling.so              0x0000000109193eb5 llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 37
1  libCling.so              0x00000001091943f6 SignalHandler(int) + 406
2  libsystem_platform.dylib 0x00007fff6baf85fd _sigtramp + 29
3  libsystem_platform.dylib 0x00000001130b54fc _sigtramp + 2807811868
4  libCore.so               0x0000000109fe0a03 TProtoClass::~TProtoClass() + 35
5  libCore.so               0x0000000109fe0afe TProtoClass::~TProtoClass() + 14
6  libCore.so               0x0000000109f87d04 TObjArray::Delete(char const*) + 116
7  libRIO.so                0x0000000106f8253a CloseStreamerInfoROOTFile + 2890
8  libCling.so              0x000000010713386c FinalizeStreamerInfoWriting(cling::Interpreter&, bool) + 140
9  libCling.so              0x0000000107134037 GenerateFullDict(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, cling::Interpreter&, RScanner&, std::__1::list<ROOT::TMetaUtils::RConstructorType, std::__1::allocator<ROOT::TMetaUtils::RConstructorType> > const&, bool, bool, bool) + 1943
10 libCling.so              0x0000000107141299 RootClingMain(int, char**, bool) + 36537
11 libCling.so              0x000000010714a503 genreflex::invokeRootCling(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, bool, bool, bool, bool, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 7043
12 libCling.so              0x000000010714c533 GenReflexMain(int, char**) + 5347
13 libCling.so              0x000000010714cf96 ROOT_rootcling_Driver + 502
14 genreflex                0x0000000106d23f63 main + 131
15 libdyld.dylib            0x00007fff6b8ffcc9 start + 1
Stack dump:
0.	Program arguments: rootcling -v2 -f xAODCoreSTLDictReflexDict.cxx -rmf xAODCoreSTLDict.dsomap -rml libxAODCoreSTLDict.so -s libxAODCoreSTLDict.so -inlineInputHeader -noIncludePaths -I/Users/krasznaa/ATLAS/sw/projects/xaodcore/athena/Event/xAOD/xAODCore -I/Users/krasznaa/ATLAS/sw/projects/xaodcore/athena/Event/xAOD/xAODCore/xAODCore -I/Users/krasznaa/ATLAS/sw/projects/xaodcore/athena/Event/xAOD/xAODCore -I/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/include -DHAVE_64_BITS -D__IDENTIFIER_64BIT__ -DROOTCORE -DXAOD_STANDALONE -DXAOD_ANALYSIS -DPACKAGE_VERSION="xAODCore-00-00-00" -DPACKAGE_VERSION_UQ=xAODCore-00-00-00 -DEIGEN_DONT_VECTORIZE /Users/krasznaa/ATLAS/sw/projects/xaodcore/athena/Event/xAOD/xAODCore/xAODCore/xAODCoreSTLDict.h /Users/krasznaa/ATLAS/sw/projects/xaodcore/athena/Event/xAOD/xAODCore/xAODCore/selectionSTL.xml 

 *** Break *** segmentation violation
[/usr/lib/system/libsystem_platform.dylib] _sigtramp (no debug info)
[/usr/lib/dyld] ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int, ImageLoader::LinkContext const&, void (*)(), void (*)()) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCore.so] TProtoClass::~TProtoClass() (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCore.so] TProtoClass::~TProtoClass() (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCore.so] TObjArray::Delete(char const*) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libRIO.so] CloseStreamerInfoROOTFile (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCling.so] FinalizeStreamerInfoWriting(cling::Interpreter&, bool) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCling.so] GenerateFullDict(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, cling::Interpreter&, RScanner&, std::__1::list<ROOT::TMetaUtils::RConstructorType, std::__1::allocator<ROOT::TMetaUtils::RConstructorType> > const&, bool, bool, bool) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCling.so] RootClingMain(int, char**, bool) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCling.so] genreflex::invokeRootCling(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, bool, bool, bool, bool, bool, bool, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCling.so] GenReflexMain(int, char**) (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/lib/libCling.so] ROOT_rootcling_Driver (no debug info)
[/Users/krasznaa/ATLAS/Software/AnalysisBaseExternals/22.2.15/InstallArea/x86_64-mac1015-clang12-opt/bin/genreflex] main (no debug info)
[/usr/lib/system/libdyld.dylib] start (no debug info)
make[2]: *** [Event/xAOD/xAODCore/CMakeFiles/xAODCoreSTLDict.dsomap] Error 139
make[1]: *** [Event/xAOD/xAODCore/CMakeFiles/xAODCoreSTLDictDictGen.dir/all] Error 2
make: *** [all] Error 2

I tried for a while to find an incantation that would

  • generate all the required dictionaries on both macOS and Linux;
  • not crash on either of them.

But I just couldn't. On Linux we just must use the <class pattern="..." /> formalism to access types like __pair_base<string,vector<float> >. (Whose name we should really never hardcode into our dictionaries, as they're super platform specific.) But using <class pattern="..." /> just always crashes with ROOT 6.22/02 on macOS. 😦 So in the end I just decided to @#$% it, and introduce separate XML files for Linux and macOS...

For completeness, this setup results in the following types getting dictionaries on Linux:

class __pair_base<string,vector<float> >
class __pair_base<string,vector<int> >
class __pair_base<string,vector<vector<float> > >
class __pair_base<string,vector<vector<int> > >
class pair<string,vector<float> >
class pair<string,vector<int> >
class pair<string,vector<vector<float> > >
class pair<string,vector<vector<int> > >

And these ones on macOS:

class pair<basic_string<char,char_traits<char>,allocator<char> >,vector<float> >
class pair<basic_string<char,char_traits<char>,allocator<char> >,vector<int> >
class pair<basic_string<char,char_traits<char>,allocator<char> >,vector<vector<float> > >
class pair<basic_string<char,char_traits<char>,allocator<char> >,vector<vector<int> > >
class pair<std::string,std::vector<float> >
class pair<std::string,std::vector<int> >
class pair<std::string,std::vector<std::vector<float> > >
class pair<std::string,std::vector<std::vector<int> > >
class pair<string,vector<float> >
class pair<string,vector<int> >
class pair<string,vector<vector<float> > >
class pair<string,vector<vector<int> > >

Yeah, there is little rhyme or reason to the whole thing... 😕

Pinging @mnowak, @ssnyder, @krumnack.

Merge request reports