On Tue, Jul 20, 2021 at 04:21:34PM +0100, Iain Sandoe wrote:

> --- a/c++tools/configure.ac
> +++ b/c++tools/configure.ac
> @@ -41,6 +41,8 @@ MISSING=`cd $ac_aux_dir && ${PWDCMD-pwd}`/missing
>  AC_CHECK_PROGS([AUTOCONF], [autoconf], [$MISSING autoconf])
>  AC_CHECK_PROGS([AUTOHEADER], [autoheader], [$MISSING autoheader])
>  
> +AC_LANG(C++)
> +
>  dnl Enabled by default
>  AC_MSG_CHECKING([whether to build C++ tools])
>    AC_ARG_ENABLE(c++-tools, 
> @@ -67,6 +69,62 @@ AC_MSG_RESULT([$maintainer_mode])
>  test "$maintainer_mode" = yes && MAINTAINER=yes
>  AC_SUBST(MAINTAINER)
>  
> +# Enable expensive internal checks
> +is_release=
> +if test -f $srcdir/../gcc/DEV-PHASE \
> +   && test x"`cat $srcdir/../gcc/DEV-PHASE`" != xexperimental; then
> +  is_release=yes
> +fi
> +
> +AC_ARG_ENABLE(checking,
> +[AS_HELP_STRING([[--enable-checking[=LIST]]],
> +             [enable expensive run-time checks.  With LIST,
> +              enable only specific categories of checks.
> +              Categories are: yes,no,all,none,release.
> +              Flags are: misc,valgrind or other strings])],
> +[ac_checking_flags="${enableval}"],[
> +# Determine the default checks.
> +if test x$is_release = x ; then
> +  ac_checking_flags=yes
> +else
> +  ac_checking_flags=release
> +fi])
> +IFS="${IFS=  }"; ac_save_IFS="$IFS"; IFS="$IFS,"
> +for check in release $ac_checking_flags
> +do
> +     case $check in
> +     # these set all the flags to specific states
> +     yes|all) ac_checking=1 ; ac_assert_checking=1 ; ac_valgrind_checking= ;;
> +     no|none) ac_checking= ; ac_assert_checking= ; ac_valgrind_checking= ;;
> +     release) ac_checking= ; ac_assert_checking=1 ; ac_valgrind_checking= ;;
> +     # these enable particular checks
> +     assert) ac_assert_checking=1 ;;
> +     misc) ac_checking=1 ;;
> +     valgrind) ac_valgrind_checking=1 ;;
> +     # accept
> +     *) ;;
> +     esac
> +done
> +IFS="$ac_save_IFS"
> +
> +if test x$ac_checking != x ; then
> +  AC_DEFINE(CHECKING_P, 1,
> +[Define to 1 if you want more run-time sanity checks.])
> +else
> +  AC_DEFINE(CHECKING_P, 0)
> +fi
> +
> +if test x$ac_assert_checking != x ; then
> +  AC_DEFINE(ENABLE_ASSERT_CHECKING, 1,
> +[Define if you want assertions enabled.  This is a cheap check.])
> +fi
> +
> +if test x$ac_valgrind_checking != x ; then
> +  AC_DEFINE(ENABLE_VALGRIND_CHECKING, 1,
> +[Define if you want to workaround valgrind (a memory checker) warnings about
> + possible memory leaks because of libcpp use of interior pointers.])
> +fi

I guess we could simplify it, I think at least right now we only care
about ENABLE_ASSERT_CHECKING and nothing else, so the is_release computation
could go, make ac_checking_flags just default to yes, drop the ac_checking,
ac_valgrind_checking variables and simplify the case so that it perhaps
handles all we care together.  That would be
        case $check in
        yes|all|release|assert) ac_assert_checking=1 ; ;;
        no|none) ac_assert_checking= ; ;;
        *) ;;
        esac
or so. and then only AC_DEFINE ENABLE_ASSERT_CHECKING and from server.cc
drop the CHECKING_P stuff.
> @@ -92,6 +96,35 @@ along with GCC; see the file COPYING3.  If not see
>  #define DIR_SEPARATOR '/'
>  #endif
>  
> +/* Imported from libcpp/system.h
> +   Use gcc_assert(EXPR) to test invariants.  */
> +#if ENABLE_ASSERT_CHECKING || CHECKING_P
> +#define gcc_assert(EXPR)                                                \
> +   ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
> +#elif (GCC_VERSION >= 4005)
> +#define gcc_assert(EXPR)                                                \
> +  ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
> +#else
> +/* Include EXPR, so that unused variable warnings do not occur.  */
> +#define gcc_assert(EXPR) ((void)(0 && (EXPR)))
> +#endif
> +
> +#if CHECKING_P
> +#define gcc_checking_assert(EXPR) gcc_assert (EXPR)
> +#else
> +/* N.B.: in release build EXPR is not evaluated.  */
> +#define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
> +#endif

I'd drop the gcc_checking_assert macro, we don't use it...

Otherwise LGTM.

        Jakub

Reply via email to