Current source level coverage is often confusing. Primarily because of instrumentation optimizations and instrumenting edges rather than basic blocks.
Collect coverage information from a separate build configuration built without sanitizers, with -O1 -fsanitize-coverage=bb and sanitizer-coverage-prune-block disabled.