-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Autoload canonical namespaces #1547
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
Autoload canonical namespaces #1547
Conversation
|
Starting build on |
|
Hi Vassil, Could you enhance the commit message with a short explanation of why the fear in the comment are no longer a problem and/or what does D40901 do :) ? Thanks, |
|
Sure, will do. Let's see if it does what I expect. |
|
Build failed on mac1013/native. Warnings:
And 10 more Failing tests:
And 190 more |
|
We are still not there yet. We trigger excessive deserialization due to the eager iterations over the decl contexts. This PR likely depends on #1416. |
|
@phsft-bot build! |
|
Starting build on |
9493816 to
f1c0d02
Compare
|
Starting build on |
|
We still have to avoid extra iteration happening: |
|
@phsft-bot build! |
|
Starting build on |
|
Starting build on |
|
Build failed on slc6/gcc62. Failing tests: |
|
Build failed on centos7/gcc49. Errors:
Failing tests: |
|
Build failed on ubuntu16/native. Failing tests: |
|
Build failed on mac1013/native. Failing tests: |
|
It looks like that clang stores candidates for diagnostics and then does analysis on Second half of the This PR is not critical for the runtime cxxmodules development but it fixes the broken autoloading behavior of 'regular' ROOT. This is the only observable failure we got in a very obscure way. |
|
@phsft-bot build on centos7/gcc49, mac1013/native, slc6/gcc49, slc6/gcc62, slc6/gcc62, ubuntu16/native, ubuntu16/native, windows10/vc15 with flags -Dvc=OFF -Dimt=ON -Dccache=ON |
|
Starting build on |
|
Build failed on mac1013/native. Errors:
|
|
Build failed on slc6/gcc49. Errors:
|
|
Build failed on ubuntu16/native. Errors:
|
bcf8940 to
2880c07
Compare
|
Starting build on |
|
Build failed on ubuntu16/native. Failing tests: |
|
Build failed on slc6/gcc62. Failing tests: |
|
Build failed on centos7/gcc49. Failing tests: |
|
Build failed on slc6/gcc49. Failing tests: |
|
@phsft-bot build on centos7/gcc49, mac1013/native, slc6/gcc49, slc6/gcc62, slc6/gcc62, ubuntu16/native, ubuntu16/native, windows10/vc15 with flags -Dvc=OFF -Dimt=ON -Dccache=ON |
|
Starting build on |
|
Build failed on centos7/gcc49. Failing tests: |
|
Build failed on slc6/gcc49. Failing tests: |
|
@Axel-Naumann, look like the failures are unrelated. It looks like this is a feature that can land. |
|
Hi Axel,
No I won't be there.
Sent from my phone. Please excuse my brevity.
… On 28 Apr 2018, at 10:11, phsft-bot ***@***.***> wrote:
Build failed on slc6/gcc49.
See console output.
Failing tests:
projectroot.roottest.root.multicore.roottest_root_multicore_processExecutorH1Test
—
You are receiving this because you were assigned.
Reply to this email directly, view it on GitHub, or mute the thread.
|
|
Failed in projectroot.roottest.root.treeproxy.roottest_root_treeproxy_make / spurious load of libRooFit. I have reverted this PR in 4b57fdf |
|
Note that I do not understand how we can define a canonical namespace in the context of libraries. which of those 'two' library should be loaded when 'autoloading [the] canonical namespace' I.e. A priori autoloading namespaces is the wrong granularity and we should/can autoload things like classes, enum ... and (what we are currently missing) free standing functions. |
ROOT injects forward declarations of entities as trampolines to resolve the full definitions and load the corresponding library. This allows the ROOT users to 'just' type a name and the interpreter will resolve its definition and dlopen the library describing it.
There is a well-known (not well understood until now) limitation with this system: we cannot load entities in namespaces. Namely, if we type
ROOT::TDF::TDataFrame;the system won't be able to resolve it. This is because we enable the system to load only the contents of namespaces from the forward declarations. For example,#1is piped at root/interpreter start up; we find the DeclContext and flag it.#3triggers a lookup and#includes #2. The problem is that we do not issue a lookup in#2. The effect is that we practically cannot autoload entities from namespaces.Turning it 'just' on breaks performance and starts loading irrelevant libraries. This is because clang eagerly deserializes template specialization declarations for the decl context in question when computing linkage information in CodeGen.
All heavy lifting is done in D41416 and landed in e51a2b9. It enables finer-grained template specialization deserialization removing the effect of loading irrelevant libraries. The performance impact will be seen shortly after we land this PR.