Do not access known locations of non-DataObjects
This is a workaround for the issue observed in this test, which probably appeared quite a bit earlier. A copy of the errors is attached: errors.log. The first few lines are
In file included from RichUtilsDict dictionary payload:53:
/workspace/build/LHCB/LHCB_2018-patches/InstallArea/x86_64-centos7-gcc62-opt/include/RichUtils/RichPixelCluster.h:136:33: error: redefinition of 'operator<<'
friend inline std::ostream& operator << ( std::ostream& s,
^
/workspace/build/LHCB/LHCB_2018-patches/InstallArea/x86_64-centos7-gcc62-opt/include/RichUtils/RichPixelCluster.h:136:33: note: previous definition is here
friend inline std::ostream& operator << ( std::ostream& s,
^
This happens in GaudiPython when node.object()
(calling DataSvcHelpers::RegistryEntry::object
), TES.retrieveObject(l)
or anything similar is called for locations that do not contain a DataObject
subclass.
In this case cling kicks in for some reason, and we get the errors above, followed by a segmentation violation.
For lack of a better fix, I blacklist the offending locations (the new Rich internal objects).
For some unknown reason, this does not happen on the 2017-patches stack (see the nightlies).
@clemenci, @jonrob, if you have an idea for a proper fix, please let me know. (I suspected double include caused by the #pragma once
directives, but reverting the MR that introduced those did not help)