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
Fix incorrect address usage in VirtualJetProducer #25629
Conversation
The code was getting the address from a boost::shared_ptr by doing '&*ptr' and passing that value to a dynamic_cast. This caused a crash under fully optimized clang because the compiler is allowed to assume that references do not point to 'null' memory. This allowed the clang compiler to remove the check for null in the dynamic_cast call.
The code-checks are being triggered in jenkins. |
The behavior of similar code can be seen here The clang version shows the optimizer makes different code when using |
+code-checks Logs: https://cmssdt.cern.ch/SDT/code-checks/cms-sw-PR-25629/7944
|
A new Pull Request was created by @Dr15Jones (Chris Jones) for master. It involves the following packages: RecoJets/JetProducers @perrotta, @cmsbuild, @slava77 can you please review it and eventually sign? Thanks. cms-bot commands are listed here |
please test |
The tests are being triggered in jenkins. |
This fixes the crash seen in the clang RelVals for workflow 140.54. That workflow does not fail using gcc since the gcc compiler does not optimize away the check for null. |
@dan131riley thought this might interest you. |
+1 The following merge commits were also included on top of IB + this PR after doing git cms-merge-topic: |
Comparison job queued. |
Comparison is ready Comparison Summary:
|
+1
|
This pull request is fully signed and it will be integrated in one of the next master IBs (tests are also fine). This pull request will now be reviewed by the release team before it's merged. @davidlange6, @slava77, @smuzaffar, @fabiocos (and backports should be raised in the release meeting by the corresponding L2) |
+1 |
The code was getting the address from a boost::shared_ptr by doing '&*ptr' and passing that value to a dynamic_cast. This caused a crash under fully optimized clang because the compiler is allowed to assume that references do not point to 'null' memory. This allowed the clang compiler to remove the check for null in the dynamic_cast call.