}
#endif
+static inline int preload_update_class_constants(zend_class_entry *ce) {
+ /* This is a separate function to work around what appears to be a bug in GCC
+ * maybe-uninitialized analysis. */
+ zend_try {
+ return zend_update_class_constants(ce);
+ } zend_end_try();
+ return FAILURE;
+}
+
static zend_class_entry *preload_load_prop_type(zend_property_info *prop, zend_string *name) {
zend_class_entry *ce;
if (zend_string_equals_literal_ci(name, "self")) {
#endif
if (!(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
- int result = SUCCESS;
- zend_try {
- result = zend_update_class_constants(ce);
- } zend_catch {
- /* Provide some context for the generated error. */
- zend_error_noreturn(E_ERROR,
- "Error generated while resolving initializers of class %s during preloading",
- ZSTR_VAL(ce->name));
- } zend_end_try();
- if (result == FAILURE) {
- /* Just present to be safe: We generally always throw some
- * other fatal error as part of update_class_constants(). */
+ if (preload_update_class_constants(ce) == FAILURE) {
zend_error_noreturn(E_ERROR,
"Failed to resolve initializers of class %s during preloading",
ZSTR_VAL(ce->name));
--EXPECTF--
Fatal error: Undefined class constant 'self::DOES_NOT_EXIST' in Unknown on line 0
-Fatal error: Error generated while resolving initializers of class Foo during preloading in Unknown on line 0
+Fatal error: Failed to resolve initializers of class Foo during preloading in Unknown on line 0