diff options
author | Anatol Belski <ab@php.net> | 2014-09-08 20:34:26 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2014-09-08 20:34:26 +0200 |
commit | 9ee4a40f27c7c7fcd0edcd3a7420ea7cdf299f45 (patch) | |
tree | 4061e877b7326a01da8574644d88ffd8e4446b2f /Zend/zend.c | |
parent | 6561d03a41772309aaff6027dced8b349eaf1458 (diff) | |
download | php-git-9ee4a40f27c7c7fcd0edcd3a7420ea7cdf299f45.tar.gz |
made Visual Studio to understand that zend_error_noreturn() will not return
- windows only, on linux gcc would cause a warning that the function returns,
as no noreturn functions are used
- ZEND_NORETURN works on windows as well now, using __declspec(noreturn),
which is useful for the other cases
- one more function call will be needed, which is not critical for the
error reporting
- the way is open to enable the same for gcc as soon as it's not causing a warning
Diffstat (limited to 'Zend/zend.c')
-rw-r--r-- | Zend/zend.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Zend/zend.c b/Zend/zend.c index 334a8df29b..de13108673 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1031,11 +1031,17 @@ ZEND_API zval *zend_get_configuration_directive(zend_string *name) /* {{{ */ } \ } while (0) +#ifndef ZEND_WIN32 ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ +#else +static void zend_error_va_list(int type, const char *format, va_list args) +#endif { char *str; int len; +#ifndef ZEND_WIN32 va_list args; +#endif va_list usr_copy; zval params[5]; zval retval; @@ -1138,7 +1144,9 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ } #endif /* HAVE_DTRACE */ +#ifndef ZEND_WIN32 va_start(args, format); +#endif /* if we don't have a user defined error handler */ if (Z_TYPE(EG(user_error_handler)) == IS_UNDEF @@ -1249,7 +1257,9 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ break; } +#ifndef ZEND_WIN32 va_end(args); +#endif if (type == E_PARSE) { /* eval() errors do not affect exit_status */ @@ -1266,6 +1276,24 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ #if defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__) void zend_error_noreturn(int type, const char *format, ...) __attribute__ ((alias("zend_error"),noreturn)); +#elif defined(ZEND_WIN32) +ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ +{ + va_list va; + + va_start(va, format); + zend_error_va_list(type, format, va); + va_end(va); +} + +ZEND_API ZEND_NORETURN void zend_error_noreturn(int type, const char *format, ...) +{ + va_list va; + + va_start(va, format); + zend_error_va_list(type, format, va); + va_end(va); +} #endif ZEND_API void zend_output_debug_string(zend_bool trigger_break, const char *format, ...) /* {{{ */ |