From 66d4df05244e24143e5d2bd6de8f8fbb35c42ead Mon Sep 17 00:00:00 2001 From: Orange Date: Thu, 19 Mar 2026 20:17:10 +0300 Subject: [PATCH] fix --- scripts/coverage-llvm.sh | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/scripts/coverage-llvm.sh b/scripts/coverage-llvm.sh index 8f45249..20a271a 100755 --- a/scripts/coverage-llvm.sh +++ b/scripts/coverage-llvm.sh @@ -16,15 +16,27 @@ echo "[*] Output dir: ${OUTPUT_DIR}" # Find llvm tools - handle versioned names (Linux) and xcrun (macOS) find_llvm_tool() { local tool_name="$1" - - # macOS: use xcrun + + # macOS: derive from the same directory as the active clang to guarantee + # the profraw format version matches the compiler that instrumented the binary. if [[ "$(uname)" == "Darwin" ]]; then + local clang_path + clang_path=$(xcrun --find clang 2>/dev/null) + if [[ -n "$clang_path" ]]; then + local tool_path + tool_path="$(dirname "$clang_path")/${tool_name}" + if [[ -x "$tool_path" ]]; then + echo "$tool_path" + return 0 + fi + fi + # Fallback: xcrun if xcrun --find "${tool_name}" &>/dev/null; then echo "xcrun ${tool_name}" return 0 fi fi - + # Try versioned names (Linux with LLVM 21, 20, 19, etc.) for version in 21 20 19 18 17 ""; do local versioned_name="${tool_name}${version:+-$version}" @@ -33,7 +45,7 @@ find_llvm_tool() { return 0 fi done - + echo "" return 1 } @@ -51,6 +63,12 @@ fi echo "[*] Using: ${LLVM_PROFDATA}" echo "[*] Using: ${LLVM_COV}" +# Print version info for debugging version mismatches +if [[ "$(uname)" == "Darwin" ]]; then + echo "[*] Compiler: $(xcrun clang --version | head -1)" + echo "[*] profdata: $(${LLVM_PROFDATA} show --version 2>&1 | head -1 || true)" +fi + # Find test binary if [[ -z "${TEST_BINARY}" ]]; then for path in \