From 4c87c8e29f76fb57d0931b83c9b5c6c946141874 Mon Sep 17 00:00:00 2001 From: Nikita Shulga <2453524+malfet@users.noreply.github.com> Date: Fri, 6 Sep 2024 18:35:46 -0700 Subject: [PATCH] Add regression test for recursive iterator (#1981) Test plan: ``` % pip install torch==2.4.0; python test/check_binary_symbols.py lib: /home/nshulga/miniconda3/envs/py310-torch/lib/python3.10/site-packages/torch/lib/libtorch_cpu.so num_cxx11_symbols: 0 num_pre_cxx11_symbols: 1966 Traceback (most recent call last): File "/home/nshulga/git/pytorch/builder/test/check_binary_symbols.py", line 97, in main() File "/home/nshulga/git/pytorch/builder/test/check_binary_symbols.py", line 93, in main check_lib_symbols_for_abi_correctness(libtorch_cpu_path, pre_cxx11_abi) File "/home/nshulga/git/pytorch/builder/test/check_binary_symbols.py", line 78, in check_lib_symbols_for_abi_correctness raise RuntimeError(f"Found use of recursive_directory_iterator in pre-CXX11 binaries, see; {rec_iter_symbols}") RuntimeError: Found use of recursive_directory_iterator in pre-CXX11 binaries, see; ['std::filesystem::recursive_directory_iterator::recursion_pending() const', 'std::filesystem::recursive_directory_iterator::depth() const', 'std::filesystem::recursive_directory_iterator::options() const', 'std::filesystem::recursive_directory_iterator::operator*() const', 'std::filesystem::recursive_directory_iterator::disable_recursion_pending()', 'std::filesystem::recursive_directory_iterator::pop(std::error_code&)', 'std::filesystem::recursive_directory_iterator::pop()', 'std::filesystem::recursive_directory_iterator::pop() [clone .cold]', 'std::filesystem::recursive_directory_iterator::increment(std::error_code&)', 'std::filesystem::recursive_directory_iterator::increment(std::error_code&) [clone .cold]', 'std::filesystem::recursive_directory_iterator::recursive_directory_iterator(std::filesystem::path const&, std::filesystem::directory_options, std::error_code*)', 'std::filesystem::recursive_directory_iterator::recursive_directory_iterator(std::filesystem::path const&, std::filesystem::directory_options, std::error_code*)', 'std::filesystem::recursive_directory_iterator::recursive_directory_iterator(std::filesystem::path const&, std::filesystem::directory_options, std::error_code*) [clone .cold]', 'std::filesystem::recursive_directory_iterator::~recursive_directory_iterator()', 'std::filesystem::recursive_directory_iterator::~recursive_directory_iterator()', 'std::filesystem::recursive_directory_iterator::operator=(std::filesystem::recursive_directory_iterator&&)', 'std::filesystem::recursive_directory_iterator::operator=(std::filesystem::recursive_directory_iterator const&)', 'std::filesystem::recursive_directory_iterator::operator++()', 'std::filesystem::recursive_directory_iterator::operator++() [clone .cold]'] ``` Fixes https://github.com/pytorch/pytorch/issues/133437 --- test/check_binary_symbols.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/check_binary_symbols.py b/test/check_binary_symbols.py index 8aabe0685..dba11fbe9 100755 --- a/test/check_binary_symbols.py +++ b/test/check_binary_symbols.py @@ -66,6 +66,7 @@ def _get_symbols_chunk(i): tasks = [executor.submit(_grep_symbols, _get_symbols_chunk(i), patterns) for i in range(num_workers)] return functools.reduce(list.__add__, (x.result() for x in tasks), []) + def check_lib_symbols_for_abi_correctness(lib: str, pre_cxx11_abi: bool = True) -> None: print(f"lib: {lib}") cxx11_symbols = grep_symbols(lib, LIBTORCH_CXX11_PATTERNS) @@ -79,12 +80,17 @@ def check_lib_symbols_for_abi_correctness(lib: str, pre_cxx11_abi: bool = True) raise RuntimeError(f"Found cxx11 symbols, but there shouldn't be any, see: {cxx11_symbols[:100]}") if num_pre_cxx11_symbols < 1000: raise RuntimeError("Didn't find enough pre-cxx11 symbols.") + # Check for no recursive iterators, regression test for https://github.com/pytorch/pytorch/issues/133437 + rec_iter_symbols = grep_symbols(lib, [re.compile("std::filesystem::recursive_directory_iterator.*")]) + if len(rec_iter_symbols) > 0: + raise RuntimeError(f"recursive_directory_iterator in used pre-CXX11 binaries, see; {rec_iter_symbols}") else: if num_pre_cxx11_symbols > 0: raise RuntimeError(f"Found pre-cxx11 symbols, but there shouldn't be any, see: {pre_cxx11_symbols[:100]}") if num_cxx11_symbols < 100: raise RuntimeError("Didn't find enought cxx11 symbols") + def main() -> None: if "install_root" in os.environ: install_root = Path(os.getenv("install_root")) # noqa: SIM112