diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl index 2f1ef9ed66d6ed..4701a1c8f4bf21 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl @@ -182,7 +182,7 @@ def _add(ctx, linking_statically): def _get_file_content(objects): result = [] for obj in objects: - result.append(obj.short_path) + result.append(obj.path) result.append("\n") return "".join(result) @@ -192,7 +192,7 @@ def _add_transitive_info_providers(ctx, cc_toolchain, cpp_config, feature_config runtime_objects_list = ctx.actions.declare_file(ctx.label.name + "runtime_objects_list.txt") file_content = _get_file_content(runtime_objects_for_coverage) ctx.actions.write(output = runtime_objects_list, content = file_content, is_executable = False) - additional_meta_data = [runtime_objects_list] + additional_meta_data = [runtime_objects_list] + runtime_objects_for_coverage instrumented_files_provider = cc_helper.create_cc_instrumented_files_info( ctx = ctx, diff --git a/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh b/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh index d2cf0dab910e94..aef7677d9e5447 100755 --- a/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh +++ b/src/test/shell/bazel/bazel_coverage_cc_test_llvm.sh @@ -154,6 +154,55 @@ end_of_record" assert_equals "$expected_result" "$(cat $(get_coverage_file_path_from_test_log))" } +function test_cc_test_llvm_coverage_produces_lcov_report_with_split_postprocessing() { + local -r clang="/usr/bin/clang" + if [[ ! -x ${clang} ]]; then + return + fi + local -r clang_version=$(clang --version | grep -o "clang version [0-9]*" | cut -d " " -f 3) + if [ "$clang_version" -lt 9 ] || [ "$clang_version" -eq 10 ] || [ "$clang_version" -eq 11 ]; then + # No lcov produced with <9.0, no branch coverage with 10.0 and 11.0. + echo "clang versions <9.0 as well as 10.0 and 11.0 are not supported." && return + fi + + local -r llvm_profdata="/usr/bin/llvm-profdata" + if [[ ! -x ${llvm_profdata} ]]; then + return + fi + + local -r llvm_cov="/usr/bin/llvm-cov" + if [[ ! -x ${llvm_cov} ]]; then + return + fi + + setup_a_cc_lib_and_t_cc_test + + BAZEL_USE_LLVM_NATIVE_COVERAGE=1 GCOV=$llvm_profdata CC=$clang \ + BAZEL_LLVM_COV=$llvm_cov bazel coverage --experimental_generate_llvm_lcov \ + --experimental_split_coverage_postprocessing --experimental_fetch_all_coverage_outputs \ + --test_env=VERBOSE_COVERAGE=1 --test_output=all //:t &>$TEST_log || fail "Coverage for //:t failed" + + + + local expected_result="SF:a.cc +FN:3,_Z1ab +FNDA:1,_Z1ab +FNF:1 +FNH:1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,0 +DA:8,0 +DA:9,1 +LH:5 +LF:7 +end_of_record" + + assert_equals "$expected_result" "$(cat $(get_coverage_file_path_from_test_log))" +} + function test_cc_test_with_runtime_objects_not_in_runfiles() { local -r clang="/usr/bin/clang" if [[ ! -x ${clang} ]]; then diff --git a/tools/test/collect_cc_coverage.sh b/tools/test/collect_cc_coverage.sh index 91747c76521def..d043562680cddd 100755 --- a/tools/test/collect_cc_coverage.sh +++ b/tools/test/collect_cc_coverage.sh @@ -85,9 +85,7 @@ function llvm_coverage_lcov() { while read -r line; do if [[ ${line: -24} == "runtime_objects_list.txt" ]]; then while read -r line_runtime_object; do - if [[ -e "${RUNFILES_DIR}/${TEST_WORKSPACE}/${line_runtime_object}" ]]; then - object_param+=" -object ${RUNFILES_DIR}/${TEST_WORKSPACE}/${line_runtime_object}" - fi + object_param+=" -object ${line_runtime_object}" done < "${line}" fi done < "${COVERAGE_MANIFEST}"