Browse Source
Don't fiddle with NDEBUG in C code (GH-16511)
* Don't fiddle with NDEBUG in C code
It is way to late to do this in php.h, since assert.h has already been
included. Even pushing that down to zend_portability.h may not have
the desired effect. Instead we define or undefine NDEBUG as CFLAG, so
that it works in all circumstances.
As a last resort we fail at build time, if `NDEBUG` is defined when
`ZEND_DEBUG` is enabled.
We also remove the useless workaround in zend_test to include assert.h
again, since that usually won't have any effect anyway.
Co-authored-by: Arnaud Le Blanc <arnaud.lb@gmail.com>
pull/16619/head
Christoph M. Becker
12 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with
10 additions and
14 deletions
Zend/zend_portability.h
configure.ac
ext/zend_test/test.c
main/php.h
win32/build/confutils.js
@ -47,6 +47,9 @@
# include "../TSRM/TSRM.h"
# include <stdio.h>
# if ZEND_DEBUG && defined(NDEBUG)
# error "NDEBUG must not be defined when ZEND_DEBUG is enabled"
# endif
# include <assert.h>
# include <math.h>
@ -799,6 +799,8 @@ PHP_ARG_ENABLE([debug],
AS_VAR_IF([PHP_DEBUG], [yes], [
PHP_DEBUG=1
ZEND_DEBUG=yes
CFLAGS="$CFLAGS -UNDEBUG"
CXXFLAGS="$CXXFLAGS -UNDEBUG"
PHP_REMOVE_OPTIMIZATION_FLAGS
dnl Add -O0 only if GCC or ICC is used.
if test "$GCC" = "yes" || test "$ICC" = "yes"; then
@ -817,6 +819,8 @@ AS_VAR_IF([PHP_DEBUG], [yes], [
], [
PHP_DEBUG=0
ZEND_DEBUG=no
CFLAGS="$CFLAGS -DNDEBUG"
CXXFLAGS="$CXXFLAGS -DNDEBUG"
])
PHP_ARG_ENABLE([debug-assertions],
@ -829,6 +833,8 @@ PHP_ARG_ENABLE([debug-assertions],
AS_VAR_IF([PHP_DEBUG_ASSERTIONS], [yes], [
PHP_DEBUG=1
ZEND_DEBUG=yes
CFLAGS="$CFLAGS -UNDEBUG"
CXXFLAGS="$CXXFLAGS -UNDEBUG"
])
AC_ARG_ENABLE([zts],
@ -38,12 +38,6 @@
# include "zend_exceptions.h"
# include "zend_mm_custom_handlers.h"
/ / ` php . h ` sets ` NDEBUG ` when not ` PHP_DEBUG ` which will make ` assert ( ) ` from
/ / assert . h a no - op . In order to have ` assert ( ) ` working on NDEBUG builds , we
/ / undefine ` NDEBUG ` and re - include assert . h
# undef NDEBUG
# include "assert.h"
# if defined(HAVE_LIBXML) && !defined(PHP_WIN32)
# include <libxml / globals.h>
# include <libxml / parser.h>
@ -109,13 +109,6 @@ typedef int pid_t;
# endif
# endif
# if PHP_DEBUG
# undef NDEBUG
# else
# ifndef NDEBUG
# define NDEBUG
# endif
# endif
# include <assert.h>
# ifdef HAVE_UNIX_H
@ -3429,7 +3429,7 @@ function toolset_setup_common_libs()
function toolset_setup_build_mode ( )
{
if ( PHP_DEBUG == "yes" ) {
ADD_FLAG ( "CFLAGS" , "/LDd /MDd /Od /D ZEND_DEBUG=1 " +
ADD_FLAG ( "CFLAGS" , "/LDd /MDd /Od /U NDebug /U NDEBUG / D ZEND_DEBUG=1 " +
( TARGET_ARCH == 'x86' ? "/ZI" : "/Zi" ) ) ;
ADD_FLAG ( "LDFLAGS" , "/debug" ) ;
// Avoid problems when linking to release libraries that use the release