Skip to content

Do not access known locations of non-DataObjects

Rosen Matev requested to merge fix-2018-non-DataObjects into master

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)

Merge request reports