Hi! You most probably know, that you can't build coverage for check-world test with clang. Postgreses tests are heavy, clang profile writer uses weak hash to generate profile file names, and you will get hash collision if you try run postgres tests, profile files will be broken and everything fails.
I asked colleagues that helps us with compilers to fix that problem, and they offered a patch that allow to add binary ID to profile file name (do not even ask me what is it) and that resolves that collision problem. That patch have been just merged into llvm main branch https://github.com/llvm/llvm-project/pull/123963, and it would be available at next, 21th (or may be 20th) release. We can test it now. Build llvm main branch cmake -S llvm -B build -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="clang;clang- tools-extra" -DCMAKE_BUILD_TYPE=Debug -DLLVM_ENABLE_RUNTIMES="compiler-rt" - DLLVM_RUNTIME_TARGETS="x86_64-unknown-linux-gnu" - DLLVM_BUILTIN_TARGETS="x86_64-unknown-linux-gnu" worked for me. You will need a lot of disk space like 400Gb and some memory (64Gb bill be best) then build postgres with CFLAGS="-fprofile-instr-generate -fcoverage-mapping -Wl,--build-id" -Wl,--build-id is important part of it, and then run check-world with LLVM_PROFILE_FILE evn-var having both %m and %b in the name (But do not even try to add %p there, it breaks everything) The rest can be done according usual clang coverage manual. And you will get normal coverage. May be somebody will add this clang coverage to postgres build system, and we will have it via usual --enable-coverage. But that will not be me, I am no expert in build system and I already have not commited commitfest patches to take care about. -- Nikolay Shaplov aka Nataraj Fuzzing Engineer at Postgres Professional Matrix IM: @dhyan:nataraj.su
signature.asc
Description: This is a digitally signed message part.