[cppinterop] Upgrade to latest for cppyy migration#22728
Conversation
Test Results 23 files 23 suites 3d 13h 41m 12s ⏱️ For more details on these failures, see this check. Results for commit a0a483b. ♻️ This comment has been updated with latest results. |
|
@aaronj0, I believe we need to also move |
Yes, I have that obvious change and more patches in the pipeline.. (adapting to the new types, etc) |
7618eb1 to
8f4c938
Compare
7fa2272 to
3427288
Compare
3427288 to
09a28ec
Compare
The latest CppInterOp upgrade introduces opaque-handle structs Cpp::ObjectRef, Cpp::DeclRef, and Cpp::InterpRef (CppInterOpTypes.h) to replace void*/typedef pointer arguments.
The latest CppInterOp upgrade changes UseExternalInterpreter to also install a CppInteropDiagConsumer onto Cling's DiagnosticsEngine. Rootcling later wraps the current diag client with CheckModuleBuildClient via DiagnosticsEngine::setClient which deletes CppInterOp's previously-owned client. This leads to CheckModuleBuildClient holding a dangling fChild pointer. Without this patch, cling::Interpreter::ShutDown crashes. Since rootcling does not use CppInterOp, we can avoid registering the interpreter with CppInterOp if we are running in rootcling.
In this test, the handle-taking pointer comes from dlsym at runtime, so the compiler cannot see through it. Here the pointer is a compile-time constant and GCC 11 exploits the type mismatch (which is UB) to constant- fold the call giving a wrong reslt. Route the call through a volatile local so the compiler treats the pointer as runtime-opaque, matching dispatch
09a28ec to
4dbc826
Compare
|
I believe this upgrade now passes the CI, the windows x64 failures are visible on master. I will upstream the required patches and bump this upgrade to the latest commit. cc @guitargeek |
… MSVC Add __thiscall to the bitcast type on _M_IX86 so the caller reproduces the compiler's virtual-dispatch ABI
CreateInterpreter built ClingArgv from pointers of function-local strings (main executable path, extracted resource dir, libc++ include dir, CPPINTEROP_EXTRA_INTERPRETER_ARGS). But the interpreter keeps the raw argv pointers for its whole lifetime (cling::CompilerOptions, analagous for clang-repl), so asan reports accesses to them after CreateInterpreter returns. Fix: Collect owned copies of every argument and store it as a part of per-interpreter info, so it is released when DeleteInterpreter is called
4dbc826 to
a0a483b
Compare
| return static_cast<int>(static_cast<B*>(self)->m_x + | ||
| static_cast<B*>(self)->m_d); | ||
| // Replacement functions installed into vtable slots. | ||
| struct Repl { |
There was a problem hiding this comment.
Why we changed that to a struct?
guitargeek
left a comment
There was a problem hiding this comment.
LGTM! Thanks for the update. Unfortunately we don't have green builds on Windows, but that problem is also present in the nightlies.
Test and land the latest upgrade, required to rebase the cppyy migration PR on top