https://github.com/rorth created https://github.com/llvm/llvm-project/pull/142948
As discussed in PR #142353, the current testsuite of the `clang` Python bindings has several issues: - It `libclang.so` cannot be loaded into `python` to run the testsuite, the whole `ninja check-all` aborts. - The result of running the testsuite isn't report like the `lit`-based tests, rendering them almost invisible. - The testsuite is disabled in a non-obvious way (`RUN_PYTHON_TESTS`) in `tests/CMakeLists.txt`, which again doesn't show up in the test results. All these issues can be avoided by integrating the Python bindings tests with `lit`, which is what this patch does: - The actual test lives in `clang/test/bindings/python/bindings.sh` and is run by `lit`. - The current `clang/bindings/python/tests` directory (minus the now-subperfluous `CMakeLists.txt`) is moved into the same directory. - The check if `libclang` is loadable (originally from PR #142353) is now handled via a new `lit` feature, `libclang-loadable`. - The various ways to disable the tests have been turned into `XFAIL`s as appropriate. This isn't complete and not completely tested yet. Tested on `sparc-sun-solaris2.11`, `sparcv9-sun-solaris2.11`, `i386-pc-solaris2.11`, `amd64-pc-solaris2.11`, `i686-pc-linux-gnu`, and `x86_64-pc-linux-gnu`. >From e57e53c7e5abdb4c390a04b4ce9084dec9e71dd5 Mon Sep 17 00:00:00 2001 From: Rainer Orth <r...@gcc.gnu.org> Date: Thu, 5 Jun 2025 13:40:26 +0200 Subject: [PATCH] [clang][python][test] Move python binding tests to lit framework As discussed in PR #142353, the current testsuite of the `clang` Python bindings has several issues: - It `libclang.so` cannot be loaded into `python` to run the testsuite, the whole `ninja check-all` aborts. - The result of running the testsuite isn't report like the `lit`-based tests, rendering them almost invisible. - The testsuite is disabled in a non-obvious way (`RUN_PYTHON_TESTS`) in `tests/CMakeLists.txt`, which again doesn't show up in the test results. All these issues can be avoided by integrating the Python bindings tests with `lit`, which is what this patch does: - The actual test lives in `clang/test/bindings/python/bindings.sh` and is run by `lit`. - The current `clang/bindings/python/tests` directory (minus the now-subperfluous `CMakeLists.txt`) is moved into the same directory. - The check if `libclang` is loadable (originally from PR #142353) is now handled via a new `lit` feature, `libclang-loadable`. - The various ways to disable the tests have been turned into `XFAIL`s as appropriate. This isn't complete and not completely tested yet. Tested on `sparc-sun-solaris2.11`, `sparcv9-sun-solaris2.11`, `i386-pc-solaris2.11`, `amd64-pc-solaris2.11`, `i686-pc-linux-gnu`, and `x86_64-pc-linux-gnu`. --- clang/CMakeLists.txt | 1 - clang/bindings/python/tests/CMakeLists.txt | 66 ------------------- clang/test/bindings/python/bindings.sh | 48 ++++++++++++++ clang/test/bindings/python/lit.local.cfg | 22 +++++++ .../bindings/python/tests/__init__.py | 0 .../bindings/python/tests/cindex/INPUTS/a.inc | 0 .../bindings/python/tests/cindex/INPUTS/b.inc | 0 .../tests/cindex/INPUTS/compile_commands.json | 0 .../python/tests/cindex/INPUTS/header1.h | 0 .../python/tests/cindex/INPUTS/header2.h | 0 .../python/tests/cindex/INPUTS/header3.h | 0 .../python/tests/cindex/INPUTS/hello.cpp | 0 .../python/tests/cindex/INPUTS/include.cpp | 0 .../tests/cindex/INPUTS/parse_arguments.c | 0 .../python/tests/cindex/INPUTS/testfile.c | 0 .../bindings/python/tests/cindex/__init__.py | 0 .../tests/cindex/test_access_specifiers.py | 0 .../bindings/python/tests/cindex/test_cdb.py | 0 .../tests/cindex/test_code_completion.py | 0 .../python/tests/cindex/test_comment.py | 0 .../python/tests/cindex/test_cursor.py | 0 .../python/tests/cindex/test_cursor_kind.py | 0 .../python/tests/cindex/test_diagnostics.py | 0 .../python/tests/cindex/test_enums.py | 0 .../test_exception_specification_kind.py | 0 .../bindings/python/tests/cindex/test_file.py | 0 .../python/tests/cindex/test_index.py | 0 .../bindings/python/tests/cindex/test_lib.py | 0 .../python/tests/cindex/test_linkage.py | 0 .../python/tests/cindex/test_location.py | 0 .../python/tests/cindex/test_rewrite.py | 0 .../python/tests/cindex/test_source_range.py | 0 .../python/tests/cindex/test_tls_kind.py | 0 .../python/tests/cindex/test_token_kind.py | 0 .../python/tests/cindex/test_tokens.py | 0 .../tests/cindex/test_translation_unit.py | 0 .../bindings/python/tests/cindex/test_type.py | 0 .../bindings/python/tests/cindex/util.py | 0 38 files changed, 70 insertions(+), 67 deletions(-) delete mode 100644 clang/bindings/python/tests/CMakeLists.txt create mode 100755 clang/test/bindings/python/bindings.sh create mode 100644 clang/test/bindings/python/lit.local.cfg rename clang/{ => test}/bindings/python/tests/__init__.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/a.inc (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/b.inc (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/compile_commands.json (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/header1.h (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/header2.h (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/header3.h (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/hello.cpp (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/include.cpp (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/parse_arguments.c (100%) rename clang/{ => test}/bindings/python/tests/cindex/INPUTS/testfile.c (100%) rename clang/{ => test}/bindings/python/tests/cindex/__init__.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_access_specifiers.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_cdb.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_code_completion.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_comment.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_cursor.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_cursor_kind.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_diagnostics.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_enums.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_exception_specification_kind.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_file.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_index.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_lib.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_linkage.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_location.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_rewrite.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_source_range.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_tls_kind.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_token_kind.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_tokens.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_translation_unit.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/test_type.py (100%) rename clang/{ => test}/bindings/python/tests/cindex/util.py (100%) diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index ab2ac9bc6b9ad..5111953397d04 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -533,7 +533,6 @@ if( CLANG_INCLUDE_TESTS ) clang_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/test/Unit/lit.site.cfg ) add_subdirectory(test) - add_subdirectory(bindings/python/tests) if(CLANG_BUILT_STANDALONE) umbrella_lit_testsuite_end(check-all) diff --git a/clang/bindings/python/tests/CMakeLists.txt b/clang/bindings/python/tests/CMakeLists.txt deleted file mode 100644 index a0ddabc21bb41..0000000000000 --- a/clang/bindings/python/tests/CMakeLists.txt +++ /dev/null @@ -1,66 +0,0 @@ -# Test target to run Python test suite from main build. - -# Avoid configurations including '-include' from interfering with -# our tests by setting CLANG_NO_DEFAULT_CONFIG. -add_custom_target(check-clang-python - COMMAND ${CMAKE_COMMAND} -E env - CLANG_NO_DEFAULT_CONFIG=1 - CLANG_LIBRARY_PATH=$<TARGET_FILE_DIR:libclang> - "${Python3_EXECUTABLE}" -m unittest discover - DEPENDS libclang - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/..) - -set(RUN_PYTHON_TESTS TRUE) -set_target_properties(check-clang-python PROPERTIES FOLDER "Clang/Tests") - -# Tests require libclang.so which is only built with LLVM_ENABLE_PIC=ON -if(NOT LLVM_ENABLE_PIC) - set(RUN_PYTHON_TESTS FALSE) -endif() - -# Do not try to run if libclang was built with sanitizers because -# the sanitizer library will likely be loaded too late to perform -# interception and will then fail. -# We could use LD_PRELOAD/DYLD_INSERT_LIBRARIES but this isn't -# portable so its easier just to not run the tests when building -# with ASan. -if(NOT LLVM_USE_SANITIZER STREQUAL "") - set(RUN_PYTHON_TESTS FALSE) -endif() - -# Tests fail on Windows, and need someone knowledgeable to fix. -# It's not clear whether it's a test or a valid binding problem. -if(WIN32) - set(RUN_PYTHON_TESTS FALSE) -endif() - -# The Python FFI interface is broken on AIX: https://bugs.python.org/issue38628. -if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - set(RUN_PYTHON_TESTS FALSE) -endif() - -# AArch64, Hexagon, and Sparc have known test failures that need to be -# addressed. -# SystemZ has broken Python/FFI interface: -# https://reviews.llvm.org/D52840#1265716 -if(${LLVM_NATIVE_ARCH} MATCHES "^(AArch64|Hexagon|Sparc|SystemZ)$") - set(RUN_PYTHON_TESTS FALSE) -endif() - -# Tests will fail if cross-compiling for a different target, as tests will try -# to use the host Python3_EXECUTABLE and make FFI calls to functions in target -# libraries. -if(CMAKE_CROSSCOMPILING) - # FIXME: Consider a solution that allows better control over these tests in - # a crosscompiling scenario. e.g. registering them with lit to allow them to - # be explicitly skipped via appropriate LIT_ARGS, or adding a mechanism to - # allow specifying a python interpreter compiled for the target that could - # be executed using qemu-user. - message(WARNING "check-clang-python not added to check-all as these tests fail in a cross-build setup") - set(RUN_PYTHON_TESTS FALSE) -endif() - -if(RUN_PYTHON_TESTS) - set_property(GLOBAL APPEND PROPERTY - LLVM_ALL_ADDITIONAL_TEST_TARGETS check-clang-python) -endif() diff --git a/clang/test/bindings/python/bindings.sh b/clang/test/bindings/python/bindings.sh new file mode 100755 index 0000000000000..ec4ca55e41822 --- /dev/null +++ b/clang/test/bindings/python/bindings.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +# UNSUPPORTED: !libclang-loadable + +# Tests require libclang.so which is only built with LLVM_ENABLE_PIC=ON +# +# Covered by libclang-loadable, may need to augment test for lack of +# libclang.so. + +# Do not try to run if libclang was built with sanitizers because +# the sanitizer library will likely be loaded too late to perform +# interception and will then fail. +# We could use LD_PRELOAD/DYLD_INSERT_LIBRARIES but this isn't +# portable so its easier just to not run the tests when building +# with ASan. +# +# FIXME: Handle !LLVM_USE_SANITIZER = "". +# lit.site.cfg.py has config.llvm_use_sanitizer = "" + +# Tests fail on Windows, and need someone knowledgeable to fix. +# It's not clear whether it's a test or a valid binding problem. +# XFAIL: target={{.*windows.*}} + +# The Python FFI interface is broken on AIX: https://bugs.python.org/issue38628. +# XFAIL: target={{.*-aix.*}} + +# AArch64, Hexagon, and Sparc have known test failures that need to be +# addressed. +# SystemZ has broken Python/FFI interface: +# https://reviews.llvm.org/D52840#1265716 +# XFAIL: target={{(aarch64|hexagon|sparc*|s390x)-.*}} + +# Tests will fail if cross-compiling for a different target, as tests will try +# to use the host Python3_EXECUTABLE and make FFI calls to functions in target +# libraries. +# +# FIXME: Consider a solution that allows better control over these tests in +# a crosscompiling scenario. e.g. registering them with lit to allow them to +# be explicitly skipped via appropriate LIT_ARGS, or adding a mechanism to +# allow specifying a python interpreter compiled for the target that could +# be executed using qemu-user. +# +# FIXME: Handle CMAKE_CROSSCOMPILING. +# Again, might already be handled by libclang-loadable. + +# RUN: env PYTHONPATH=%S/../../../bindings/python \ +# RUN: CLANG_LIBRARY_PATH=`llvm-config --libdir` \ +# RUN: %python -m unittest discover -s %S/tests diff --git a/clang/test/bindings/python/lit.local.cfg b/clang/test/bindings/python/lit.local.cfg new file mode 100644 index 0000000000000..d3608565f5aef --- /dev/null +++ b/clang/test/bindings/python/lit.local.cfg @@ -0,0 +1,22 @@ +def is_libclang_loadable(): + try: + sys.path.append(os.path.join(config.clang_src_dir, "bindings/python")) + from clang.cindex import Config + conf = Config() + Config.set_library_path(config.clang_lib_dir) + conf.lib + return True + except Exception as e: + # Benign error modes. + if "wrong ELF class: ELFCLASS32" in str(e): + return False + elif "No such file or directory" in str(e): + return False + # Unknown error modes. + else: + return True + +if is_libclang_loadable(): + config.available_features.add("libclang-loadable") + +config.suffixes = ['.sh'] diff --git a/clang/bindings/python/tests/__init__.py b/clang/test/bindings/python/tests/__init__.py similarity index 100% rename from clang/bindings/python/tests/__init__.py rename to clang/test/bindings/python/tests/__init__.py diff --git a/clang/bindings/python/tests/cindex/INPUTS/a.inc b/clang/test/bindings/python/tests/cindex/INPUTS/a.inc similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/a.inc rename to clang/test/bindings/python/tests/cindex/INPUTS/a.inc diff --git a/clang/bindings/python/tests/cindex/INPUTS/b.inc b/clang/test/bindings/python/tests/cindex/INPUTS/b.inc similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/b.inc rename to clang/test/bindings/python/tests/cindex/INPUTS/b.inc diff --git a/clang/bindings/python/tests/cindex/INPUTS/compile_commands.json b/clang/test/bindings/python/tests/cindex/INPUTS/compile_commands.json similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/compile_commands.json rename to clang/test/bindings/python/tests/cindex/INPUTS/compile_commands.json diff --git a/clang/bindings/python/tests/cindex/INPUTS/header1.h b/clang/test/bindings/python/tests/cindex/INPUTS/header1.h similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/header1.h rename to clang/test/bindings/python/tests/cindex/INPUTS/header1.h diff --git a/clang/bindings/python/tests/cindex/INPUTS/header2.h b/clang/test/bindings/python/tests/cindex/INPUTS/header2.h similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/header2.h rename to clang/test/bindings/python/tests/cindex/INPUTS/header2.h diff --git a/clang/bindings/python/tests/cindex/INPUTS/header3.h b/clang/test/bindings/python/tests/cindex/INPUTS/header3.h similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/header3.h rename to clang/test/bindings/python/tests/cindex/INPUTS/header3.h diff --git a/clang/bindings/python/tests/cindex/INPUTS/hello.cpp b/clang/test/bindings/python/tests/cindex/INPUTS/hello.cpp similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/hello.cpp rename to clang/test/bindings/python/tests/cindex/INPUTS/hello.cpp diff --git a/clang/bindings/python/tests/cindex/INPUTS/include.cpp b/clang/test/bindings/python/tests/cindex/INPUTS/include.cpp similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/include.cpp rename to clang/test/bindings/python/tests/cindex/INPUTS/include.cpp diff --git a/clang/bindings/python/tests/cindex/INPUTS/parse_arguments.c b/clang/test/bindings/python/tests/cindex/INPUTS/parse_arguments.c similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/parse_arguments.c rename to clang/test/bindings/python/tests/cindex/INPUTS/parse_arguments.c diff --git a/clang/bindings/python/tests/cindex/INPUTS/testfile.c b/clang/test/bindings/python/tests/cindex/INPUTS/testfile.c similarity index 100% rename from clang/bindings/python/tests/cindex/INPUTS/testfile.c rename to clang/test/bindings/python/tests/cindex/INPUTS/testfile.c diff --git a/clang/bindings/python/tests/cindex/__init__.py b/clang/test/bindings/python/tests/cindex/__init__.py similarity index 100% rename from clang/bindings/python/tests/cindex/__init__.py rename to clang/test/bindings/python/tests/cindex/__init__.py diff --git a/clang/bindings/python/tests/cindex/test_access_specifiers.py b/clang/test/bindings/python/tests/cindex/test_access_specifiers.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_access_specifiers.py rename to clang/test/bindings/python/tests/cindex/test_access_specifiers.py diff --git a/clang/bindings/python/tests/cindex/test_cdb.py b/clang/test/bindings/python/tests/cindex/test_cdb.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_cdb.py rename to clang/test/bindings/python/tests/cindex/test_cdb.py diff --git a/clang/bindings/python/tests/cindex/test_code_completion.py b/clang/test/bindings/python/tests/cindex/test_code_completion.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_code_completion.py rename to clang/test/bindings/python/tests/cindex/test_code_completion.py diff --git a/clang/bindings/python/tests/cindex/test_comment.py b/clang/test/bindings/python/tests/cindex/test_comment.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_comment.py rename to clang/test/bindings/python/tests/cindex/test_comment.py diff --git a/clang/bindings/python/tests/cindex/test_cursor.py b/clang/test/bindings/python/tests/cindex/test_cursor.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_cursor.py rename to clang/test/bindings/python/tests/cindex/test_cursor.py diff --git a/clang/bindings/python/tests/cindex/test_cursor_kind.py b/clang/test/bindings/python/tests/cindex/test_cursor_kind.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_cursor_kind.py rename to clang/test/bindings/python/tests/cindex/test_cursor_kind.py diff --git a/clang/bindings/python/tests/cindex/test_diagnostics.py b/clang/test/bindings/python/tests/cindex/test_diagnostics.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_diagnostics.py rename to clang/test/bindings/python/tests/cindex/test_diagnostics.py diff --git a/clang/bindings/python/tests/cindex/test_enums.py b/clang/test/bindings/python/tests/cindex/test_enums.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_enums.py rename to clang/test/bindings/python/tests/cindex/test_enums.py diff --git a/clang/bindings/python/tests/cindex/test_exception_specification_kind.py b/clang/test/bindings/python/tests/cindex/test_exception_specification_kind.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_exception_specification_kind.py rename to clang/test/bindings/python/tests/cindex/test_exception_specification_kind.py diff --git a/clang/bindings/python/tests/cindex/test_file.py b/clang/test/bindings/python/tests/cindex/test_file.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_file.py rename to clang/test/bindings/python/tests/cindex/test_file.py diff --git a/clang/bindings/python/tests/cindex/test_index.py b/clang/test/bindings/python/tests/cindex/test_index.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_index.py rename to clang/test/bindings/python/tests/cindex/test_index.py diff --git a/clang/bindings/python/tests/cindex/test_lib.py b/clang/test/bindings/python/tests/cindex/test_lib.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_lib.py rename to clang/test/bindings/python/tests/cindex/test_lib.py diff --git a/clang/bindings/python/tests/cindex/test_linkage.py b/clang/test/bindings/python/tests/cindex/test_linkage.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_linkage.py rename to clang/test/bindings/python/tests/cindex/test_linkage.py diff --git a/clang/bindings/python/tests/cindex/test_location.py b/clang/test/bindings/python/tests/cindex/test_location.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_location.py rename to clang/test/bindings/python/tests/cindex/test_location.py diff --git a/clang/bindings/python/tests/cindex/test_rewrite.py b/clang/test/bindings/python/tests/cindex/test_rewrite.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_rewrite.py rename to clang/test/bindings/python/tests/cindex/test_rewrite.py diff --git a/clang/bindings/python/tests/cindex/test_source_range.py b/clang/test/bindings/python/tests/cindex/test_source_range.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_source_range.py rename to clang/test/bindings/python/tests/cindex/test_source_range.py diff --git a/clang/bindings/python/tests/cindex/test_tls_kind.py b/clang/test/bindings/python/tests/cindex/test_tls_kind.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_tls_kind.py rename to clang/test/bindings/python/tests/cindex/test_tls_kind.py diff --git a/clang/bindings/python/tests/cindex/test_token_kind.py b/clang/test/bindings/python/tests/cindex/test_token_kind.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_token_kind.py rename to clang/test/bindings/python/tests/cindex/test_token_kind.py diff --git a/clang/bindings/python/tests/cindex/test_tokens.py b/clang/test/bindings/python/tests/cindex/test_tokens.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_tokens.py rename to clang/test/bindings/python/tests/cindex/test_tokens.py diff --git a/clang/bindings/python/tests/cindex/test_translation_unit.py b/clang/test/bindings/python/tests/cindex/test_translation_unit.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_translation_unit.py rename to clang/test/bindings/python/tests/cindex/test_translation_unit.py diff --git a/clang/bindings/python/tests/cindex/test_type.py b/clang/test/bindings/python/tests/cindex/test_type.py similarity index 100% rename from clang/bindings/python/tests/cindex/test_type.py rename to clang/test/bindings/python/tests/cindex/test_type.py diff --git a/clang/bindings/python/tests/cindex/util.py b/clang/test/bindings/python/tests/cindex/util.py similarity index 100% rename from clang/bindings/python/tests/cindex/util.py rename to clang/test/bindings/python/tests/cindex/util.py _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits