From 3d7ba7a36b76310f39e0458418004a3cf6aa8da9 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 3 Apr 2026 21:54:57 +0200 Subject: [PATCH 1/3] Suppress debug assertions in gcovr --- build/Makefile.gcov | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/build/Makefile.gcov b/build/Makefile.gcov index d389cecdd192..8f9318dd6c07 100644 --- a/build/Makefile.gcov +++ b/build/Makefile.gcov @@ -27,7 +27,11 @@ GCOVR_EXCLUDES = \ 'ext/pcre/pcre2lib/.*' \ 'ext/uri/uriparser/.*' -GCOVR_EXCLUDE_LINES_BY_PATTERN = '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*' +GCOVR_EXCLUDE_LINES_BY_PATTERN = \ + '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*' \ + '\s*ZEND_UNREACHABLE\(\);\s*' \ + '\s*EMPTY_SWITCH_DEFAULT_CASE\(\)(;)?\s*' \ + '\s*ZEND_ASSERT\(.*\);\s*' lcov: lcov-html @@ -53,14 +57,14 @@ gcovr-html: @rm -rf gcovr_html/ @mkdir gcovr_html gcovr -sr . -o gcovr_html/index.html --html --html-details \ - --exclude-lines-by-pattern $(GCOVR_EXCLUDE_LINES_BY_PATTERN) \ + $(foreach pattern, $(GCOVR_EXCLUDE_LINES_BY_PATTERN), --exclude-lines-by-pattern $(pattern)) \ $(foreach lib, $(GCOVR_EXCLUDES), -e $(lib)) gcovr-xml: @echo "Generating gcovr XML" @rm -f gcovr.xml gcovr -sr . -o gcovr.xml --xml \ - --exclude-lines-by-pattern $(GCOVR_EXCLUDE_LINES_BY_PATTERN) \ + $(foreach pattern, $(GCOVR_EXCLUDE_LINES_BY_PATTERN), --exclude-lines-by-pattern $(pattern)) \ $(foreach lib, $(GCOVR_EXCLUDES), -e $(lib)) .PHONY: gcovr-html lcov-html php_lcov.info From 7c08e7f09452baa099c3b53834619d2317974e9d Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 3 Apr 2026 22:28:00 +0200 Subject: [PATCH 2/3] Avoid partial coverage of RETURN_THROWS() because of assert --- Zend/zend_API.h | 7 ++++++- build/Makefile.gcov | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Zend/zend_API.h b/Zend/zend_API.h index e56ded4e8f1b..454091789164 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -1055,7 +1055,12 @@ static zend_always_inline bool zend_char_has_nul_byte(const char *s, size_t know #define RETURN_ZVAL(zv, copy, dtor) do { RETVAL_ZVAL(zv, copy, dtor); return; } while (0) #define RETURN_FALSE do { RETVAL_FALSE; return; } while (0) #define RETURN_TRUE do { RETVAL_TRUE; return; } while (0) -#define RETURN_THROWS() do { ZEND_ASSERT(EG(exception)); (void) return_value; return; } while (0) + +#ifndef HAVE_GCOV +# define RETURN_THROWS() do { ZEND_ASSERT(EG(exception)); (void) return_value; return; } while (0) +#else +# define RETURN_THROWS() do { (void) return_value; return; } while (0) +#endif #define HASH_OF(p) (Z_TYPE_P(p)==IS_ARRAY ? Z_ARRVAL_P(p) : ((Z_TYPE_P(p)==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties(Z_OBJ_P(p)) : NULL))) diff --git a/build/Makefile.gcov b/build/Makefile.gcov index 8f9318dd6c07..2fa2946ab14c 100644 --- a/build/Makefile.gcov +++ b/build/Makefile.gcov @@ -29,9 +29,9 @@ GCOVR_EXCLUDES = \ GCOVR_EXCLUDE_LINES_BY_PATTERN = \ '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*' \ - '\s*ZEND_UNREACHABLE\(\);\s*' \ '\s*EMPTY_SWITCH_DEFAULT_CASE\(\)(;)?\s*' \ - '\s*ZEND_ASSERT\(.*\);\s*' + '\s*ZEND_ASSERT\(.*\);\s*' \ + '\s*ZEND_UNREACHABLE\(\);\s*' lcov: lcov-html From 49680dae35084374f68f9bfd76770e15ea2e5e67 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Fri, 3 Apr 2026 23:34:58 +0200 Subject: [PATCH 3/3] Exclude dstogov/ir from gcovr --- build/Makefile.gcov | 1 + 1 file changed, 1 insertion(+) diff --git a/build/Makefile.gcov b/build/Makefile.gcov index 2fa2946ab14c..9ecd85a8cfdf 100644 --- a/build/Makefile.gcov +++ b/build/Makefile.gcov @@ -24,6 +24,7 @@ GCOVR_EXCLUDES = \ 'ext/hash/sha3/.*' \ 'ext/lexbor/lexbor/.*' \ 'ext/mbstring/libmbfl/.*' \ + 'ext/opcache/jit/ir/.*' \ 'ext/pcre/pcre2lib/.*' \ 'ext/uri/uriparser/.*'