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
Workaround for ROOT6 limitation #1842
Conversation
A new Pull Request was created by @wmtan for CMSSW_7_0_ROOT6_X. Workaround for ROOT6 limitation It involves the following packages: DataFormats/Common @cmsbuild, @Dr15Jones, @ktf, @nclopezo can you please review it and eventually sign? Thanks. |
I thought I fixed it [1] by forcing boost to use spinlocks instead of self-implemented atomics. As I recall this limitation for inline assembly should be gone before the final ROOT6 release and we should look into refactoring code to use std::shared_ptr as we already have discussed (Maybe CMSSW_7_1_X?) |
Unfortunately, contrary to what the ROOT team says, using BOOST_SP_USE_SPINLOCK does not fix the problem, for two separate reasons: 1) the headers pulled in by spinlock also contain assembler, AND 2) boost/shared_ptr contains (indirectly) a second header that includes assembler that is unaffected by spinlock. |
Help! I closed this accidentally! Please reopen!!! |
Usually there should "reopen" button. |
I've been through this before. I don't have the authority for a reopen button. None on my screen/ |
The forcing of boost to use spinlocks should now be removed. It could cause other problems. |
I only noticed performance regressions with spinlocks, which is fully expected for my eyes. Once we have the IB we could re-test if it fixes all boost related inline assembly cases. |
ROOT6 uses a version of the llvm just in time compiler that cannot handle embedded assembler code.
boost/shared_ptr.hpp contains (indirectly) two headers that contain assembler. This breaks many framework unit tests.
This workaround sets preprocessor variables recognized by boost that are used if and only if ROOTCLING is defined. These preprocessor definitions cause the assembler code to not be included. This fixes the unit test errors.
The final fix for this problem should be either that ROOT6 is fixed to handle assembler, OR that CMSSW replaces with std::shared_ptr those uses of boost::shared_ptr that cause problems