Commit 2b7489437b1 for php.net
commit 2b7489437b1b085bab57c62a64153de0a1431d6d
Author: Ilija Tovilo <ilija.tovilo@me.com>
Date: Fri Apr 3 21:54:57 2026 +0200
More gcov improvements
- Suppress debug assertions
- Exclude ext/opcache/jit/ir
Closes GH-21629
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index e56ded4e8f1..1ec5813678a 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -1055,7 +1055,13 @@ 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
+/* Drop ZEND_ASSERT() to avoid untested branch warning in gcov. */
+# 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 d389cecdd19..d0dde7c120c 100644
--- a/build/Makefile.gcov
+++ b/build/Makefile.gcov
@@ -24,10 +24,15 @@ GCOVR_EXCLUDES = \
'ext/hash/sha3/.*' \
'ext/lexbor/lexbor/.*' \
'ext/mbstring/libmbfl/.*' \
+ 'ext/opcache/jit/ir/.*' \
'ext/pcre/pcre2lib/.*' \
'ext/uri/uriparser/.*'
-GCOVR_EXCLUDE_LINES_BY_PATTERN = '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*'
+GCOVR_EXCLUDE_LINES_BY_PATTERNS = \
+ '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*' \
+ '\s*EMPTY_SWITCH_DEFAULT_CASE\(\)(;)?\s*' \
+ '\s*ZEND_ASSERT\(.*\);\s*' \
+ '\s*ZEND_UNREACHABLE\(\);\s*'
lcov: lcov-html
@@ -53,14 +58,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_PATTERNS), --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_PATTERNS), --exclude-lines-by-pattern $(pattern)) \
$(foreach lib, $(GCOVR_EXCLUDES), -e $(lib))
.PHONY: gcovr-html lcov-html php_lcov.info