-
Notifications
You must be signed in to change notification settings - Fork 2.2k
[SmartHolder] fix(clang-tidy): apply clang-tidy performance fixes #3048
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
[SmartHolder] fix(clang-tidy): apply clang-tidy performance fixes #3048
Conversation
Just so you're not surprised: the failing Centos 8 build is disabled on this branch. |
aargh - a flake (CI-SH-DEF / 🐍 3 • CentOS7 / PGI 20.9 • x64) Please ignore, or when it's done you can go to Actions and just rerun the CI-SH-DEF workflow. Sadly we cannot rerun just one job. |
Hmm, can't figure out how to rerun. Are the rest flakes? |
Yes, the macos failure is because there was no machine available to run the job :-( |
I initiated the Google-internal global testing for this PR. Results will be available tomorrow morning (Pacific timezone). I ran interactive tests with ASAN and MSAN, covering unit tests in a couple other libraries using pybind11: no issues. |
Good news: The global testing was successful, no issues at all! I'm strongly in favor of merging on master and here in tandem, as soon as possible. @henryiii, what do you think? A couple things I'm confused about:
|
So it's a little more complicated than I initially though. Disabling the checks in the tests folder works, but since there are no targets with performance checks left after that, clang-tidy won't run any performacne checks against the header files (the header files exist as part of the compilation chain from the test folder). I can't easily filter out all the warnings in the tests folder either while leaving them enabled in the include folder. Turning this check on probably warrants its own PR. We will need to enable performance checks in the test folder and then manually nolint all the test cases where we want explicit, but unnecessary copies/moves/etc so that clang-tidy is happy. As such, neither of these PR enables the performance checks to run automatically. (I currently generate these fixes by apply fixes to the whole repo and then resetting everything outside of include). |
Thanks for the explanation! Just to verify for myself that I understand correctly, is the following true?
(I'm totally fine with all of this, if correct.) |
Yeah, here let me edit the config to
Exactly. Also, I just realized the automated fixes didn't fix everything. It didn't fix the 'PYBIND11_ENUM_OP*' macros which copies in the objects there. I can add those fixes by hand to this PR, but I don't want to make you have to rerun it on the Google Wide codebase for performance fix that doesn't seem that consequential. |
Awesome, thanks! Please feel free adding more to this PR. I will have to rerun the testing anyway after the changes are merged here, so that I have less to explain for the internal reviewers. BUT another thing: you probably noticed that we don't have a great track record with fast decision making on the master branch. I'm not sure how soon another maintainer will be able to approve the merge there, but I'm pretty actively working on the smart_holder code and prefer to merge your smart_holder-specific fixes basically straightaway, to avoid a mess of conflicts. I looked through the changes pretty carefully and it looks like the fixes for master are nicely separated from the smart_holder-specific fixes, along file boundaries (I was worried about cast.h and pybind11.h, but the smart_holder code in there seems to be unaffected). Is that also your observation? Basically, the smart_holder-specfic changes are in only two files:
Would it make sense to also merge the .clang-tidy change, to have it active on the smart_holder branch ahead of master (I'm still not sure what the change does)? How about reverting all but these 2 or 3 files here, I'll merge it straightaway, then you only have to worry about the master branch, while I'm pretty sure now that there aren't any complicated merge conflicts in the making. |
@rwgk Done |
For reference, all the .clang-tidy change does is remove a false positive from one of the checks. |
Thanks Aaron! |
…major and/or influential contributors to smart_holder branch * pybind#2904 by @rhaschke was merged on Mar 16, 2021 * pybind#3012 by @rhaschke was merged on May 28, 2021 * pybind#3039 by @jakobandersen was merged on Jun 29, 2021 * pybind#3048 by @Skylion007 was merged on Jun 18, 2021 * pybind#3588 by @virtuald was merged on Jan 3, 2022 * pybind#3633 by @wangxf123456 was merged on Jan 25, 2022 * pybind#3635 by @virtuald was merged on Jan 26, 2022 * pybind#3645 by @wangxf123456 was merged on Jan 25, 2022 * pybind#3796 by @wangxf123456 was merged on Mar 10, 2022 * pybind#3807 by @wangxf123456 was merged on Mar 18, 2022 * pybind#3838 by @wangxf123456 was merged on Apr 15, 2022 * pybind#3929 by @tomba was merged on May 7, 2022 * pybind#4031 by @wangxf123456 was merged on Jun 27, 2022 * pybind#4343 by @wangxf123456 was merged on Nov 18, 2022 * pybind#4381 by @wangxf123456 was merged on Dec 5, 2022 * pybind#4539 by @wangxf123456 was merged on Feb 28, 2023 * pybind#4609 by @wangxf123456 was merged on Apr 6, 2023 * pybind#4775 by @wangxf123456 was merged on Aug 3, 2023 * pybind#4921 by @iwanders was merged on Nov 7, 2023 * pybind#4924 by @iwanders was merged on Nov 6, 2023 * pybind#5401 by @msimacek was merged on Oct 8, 2024 Co-authored-by: Aaron Gokaslan <[email protected]> Co-authored-by: Dustin Spicuzza <[email protected]> Co-authored-by: Ivor Wanders <[email protected]> Co-authored-by: Jakob Lykke Andersen <[email protected]> Co-authored-by: Michael Šimáček <[email protected]> Co-authored-by: Robert Haschke <[email protected]> Co-authored-by: Tomi Valkeinen <[email protected]> Co-authored-by: Xiaofei Wang <[email protected]>
* Pure `git merge --squash smart_holder` (no manual interventions). * Remove ubench/ directory. * Remove include/pybind11/smart_holder.h * [ci skip] smart_ptrs.rst updates [WIP/unfinished] * [ci skip] smart_ptrs.rst updates continued; also updating classes.rst, advanced/classes.rst * Remove README_smart_holder.rst * Restore original README.rst from master * [ci skip] Minimal change to README.rst, to leave a hint that this is pybind11v3 * [ci skip] Work in ChatGPT suggestions. * Change macro name to PYBIND11_RUN_TESTING_WITH_SMART_HOLDER_AS_DEFAULT_BUT_NEVER_USE_IN_PRODUCTION_PLEASE * Add a note pointing to the holder reinterpret_cast. * Incorporate suggestion by @virtuald: #5542 (comment) * Systematically change most py::class_ to py::classh under docs/ * Remove references to README_smart_holder.rst This should have been part of commit eb550d0. * [ci skip] Fix minor oversight (``class_`` -> ``py::class_``) noticed by chance. * [ci skip] Resolve suggestion by @virtuald #5542 (comment) * [ci skip] Apply suggestions by @timohl (thanks!) * #5542 (comment) * #5542 (comment) * #5542 (comment) * Replace `classh : class_` inhertance with `using`, as suggested by @henryiii #5542 (comment) * Revert "Systematically change most py::class_ to py::classh under docs/" This reverts commit ac9d31e. * docs: focus on py::smart_holder instead of py::classh Signed-off-by: Henry Schreiner <[email protected]> * Restore minor general fixes that got lost when ac9d31e was reverted. * Remove `- smart_holder` from list of branches in all .github/workflows * Extend classh note to explain whitespace noise motivation. * Suggest `py::smart_holder` for "most situations for safety" * Add back PYBIND11_HAS_INTERNALS_WITH_SMART_HOLDER_SUPPORT This define was * introduced with #5286 * removed with #5531 It is has been in use here: * https://github.com/pybind/pybind11_protobuf/blob/f02a2b7653bc50eb5119d125842a3870db95d251/pybind11_protobuf/native_proto_caster.h#L89-L101 Currently pybind11 unit tests for the two holder caster backwards compatibility traits * `copyable_holder_caster_shared_ptr_with_smart_holder_support_enabled` * `move_only_holder_caster_unique_ptr_with_smart_holder_support_enabled` are missing. * Add py::trampoline_self_life_support to all trampoline examples under docs/. Address suggestion by @timohl: * #5542 (comment) Add to the "please think twice" note: the overhead for safety is likely in the noise. Also fix a two-fold inconsistency introduced by revert-commit 1e646c9: 1. py::trampoline_self_life_support is mentioned in a note, but is missing in the example right before. 2. The section starting with To enable safely passing a ``std::unique_ptr`` to a trampoline object between is obsolete. * Fix whitespace accident (indentation) introduced with 1e646c9 Apparently the mis-indentation was introduced when resolving merge conflicts for what became 1e646c9 * WHITESPACE CHANGES ONLY in README.rst (list of people that made significant contributions) * Add Ethan Steinberg to list of people that made significant contributions (for completeness, unrelated to smart_holder work). * [ci skip] Add to list of people that made significant contributions: major and/or influential contributors to smart_holder branch * #2904 by @rhaschke was merged on Mar 16, 2021 * #3012 by @rhaschke was merged on May 28, 2021 * #3039 by @jakobandersen was merged on Jun 29, 2021 * #3048 by @Skylion007 was merged on Jun 18, 2021 * #3588 by @virtuald was merged on Jan 3, 2022 * #3633 by @wangxf123456 was merged on Jan 25, 2022 * #3635 by @virtuald was merged on Jan 26, 2022 * #3645 by @wangxf123456 was merged on Jan 25, 2022 * #3796 by @wangxf123456 was merged on Mar 10, 2022 * #3807 by @wangxf123456 was merged on Mar 18, 2022 * #3838 by @wangxf123456 was merged on Apr 15, 2022 * #3929 by @tomba was merged on May 7, 2022 * #4031 by @wangxf123456 was merged on Jun 27, 2022 * #4343 by @wangxf123456 was merged on Nov 18, 2022 * #4381 by @wangxf123456 was merged on Dec 5, 2022 * #4539 by @wangxf123456 was merged on Feb 28, 2023 * #4609 by @wangxf123456 was merged on Apr 6, 2023 * #4775 by @wangxf123456 was merged on Aug 3, 2023 * #4921 by @iwanders was merged on Nov 7, 2023 * #4924 by @iwanders was merged on Nov 6, 2023 * #5401 by @msimacek was merged on Oct 8, 2024 Co-authored-by: Aaron Gokaslan <[email protected]> Co-authored-by: Dustin Spicuzza <[email protected]> Co-authored-by: Ivor Wanders <[email protected]> Co-authored-by: Jakob Lykke Andersen <[email protected]> Co-authored-by: Michael Šimáček <[email protected]> Co-authored-by: Robert Haschke <[email protected]> Co-authored-by: Tomi Valkeinen <[email protected]> Co-authored-by: Xiaofei Wang <[email protected]> --------- Signed-off-by: Henry Schreiner <[email protected]> Co-authored-by: Henry Schreiner <[email protected]> Co-authored-by: Aaron Gokaslan <[email protected]> Co-authored-by: Dustin Spicuzza <[email protected]> Co-authored-by: Ivor Wanders <[email protected]> Co-authored-by: Jakob Lykke Andersen <[email protected]> Co-authored-by: Michael Šimáček <[email protected]> Co-authored-by: Robert Haschke <[email protected]> Co-authored-by: Tomi Valkeinen <[email protected]> Co-authored-by: Xiaofei Wang <[email protected]>
Description
Suggested changelog entry: