From 06c37c965a32bf125f32111fac25707bee54708a Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Fri, 27 Aug 2004 16:20:45 +0000 Subject: [PATCH] configure.ac: Add ENABLE_ASSERT_CHECKING control. * configure.ac: Add ENABLE_ASSERT_CHECKING control. Add is_release variable, use it for --enable-werror and --enable-checking defaults. * system.h (gcc_assert, gcc_unreachable): New. * doc/install.texi (--enable-checking): Update. * configure, config.in: Rebuilt. From-SVN: r86666 --- gcc/ChangeLog | 9 +++++++++ gcc/config.in | 3 +++ gcc/configure | 41 ++++++++++++++++++++++++++++++++++------- gcc/configure.ac | 39 +++++++++++++++++++++++++++++++-------- gcc/doc/install.texi | 17 +++++++++++------ gcc/system.h | 13 +++++++++++++ 6 files changed, 101 insertions(+), 21 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62936b89e359..b583862145c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2004-08-27 Nathan Sidwell + + * configure.ac: Add ENABLE_ASSERT_CHECKING control. + Add is_release variable, use it for --enable-werror and + --enable-checking defaults. + * system.h (gcc_assert, gcc_unreachable): New. + * doc/install.texi (--enable-checking): Update. + * configure, config.in: Rebuilt. + 2004-08-26 Richard Sandiford * rtl.h (read_rtx): Change prototype. diff --git a/gcc/config.in b/gcc/config.in index 61f5ec21207e..a104c6739c3c 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -21,6 +21,9 @@ __cxa_atexit in libc. */ #undef DEFAULT_USE_CXA_ATEXIT +/* Define if you want assertions enabled. This is a cheap check. */ +#undef ENABLE_ASSERT_CHECKING + /* Define if you want more run-time sanity checks. This one gets a grab bag of miscellaneous but relatively cheap checks. */ #undef ENABLE_CHECKING diff --git a/gcc/configure b/gcc/configure index f7e2f303e728..3aaefd3ff194 100755 --- a/gcc/configure +++ b/gcc/configure @@ -867,8 +867,9 @@ Optional Features: --enable-checking=LIST enable expensive run-time checks. With LIST, enable only specific categories of checks. - Categories are: fold,gc,gcac,misc,rtlflag,rtl, - tree,valgrind; default is gc,misc,rtlflag,tree + Categories are: none,assert,fold,gc,gcac,misc, + rtlflag,rtl,tree,valgrind; + default is assert,gc,misc,rtlflag,tree --enable-mapped-location location_t is fileline integer cookie --enable-coverage=LEVEL enable compiler's code coverage collection. @@ -1381,6 +1382,9 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers auto-host.h:config.in" +#Set to 1 on a release branch +is_release= + # Determine the host, build, and target systems ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do @@ -3902,13 +3906,18 @@ fi # Enable -Werror in bootstrap stage2 and later. -# Change the default to "no" on release branches. # Check whether --enable-werror or --disable-werror was given. if test "${enable_werror+set}" = set; then enableval="$enable_werror" else + if test x$is_release = x ; then + # Default to "yes" on development branches. enable_werror=yes +else + # Default to "no" on release branches. + enable_werror=no +fi fi; if test x$enable_werror = xyes ; then WERROR=-Werror @@ -3926,16 +3935,19 @@ ac_rtlflag_checking= ac_gc_checking= ac_gc_always_collect= ac_fold_checking= +ac_assert_checking= case "${enableval}" in yes) ac_checking=1 ; ac_tree_checking=1 ; ac_gc_checking=1 ; - ac_rtlflag_checking=1 ;; + ac_rtlflag_checking=1 ; ac_assert_checking=1 ;; no) ;; *) IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS," set fnord $enableval; shift IFS="$ac_save_IFS" + ac_assert_checking=1 for check do case $check in + assert) ac_assert_checking=1 ;; fold) ac_fold_checking=1 ;; gc) ac_gc_checking=1 ;; gcac) ac_gc_always_collect=1 ;; @@ -3953,8 +3965,16 @@ echo "$as_me: error: unknown check category $check" >&2;} esac else - # Enable some checks by default for development versions of GCC -ac_checking=1; ac_tree_checking=1; ac_gc_checking=1; ac_rtlflag_checking=1; + +# Determine the default checks. +if test x$is_release = x ; then + # Enable some checks for development versions of GCC + ac_assert_checking=1; + ac_checking=1; ac_tree_checking=1; ac_gc_checking=1; ac_rtlflag_checking=1; +else + # Disable all but assertions for release versions of GCC. + ac_assert_checking=1; +fi fi; nocommon_flag="" if test x$ac_checking != x ; then @@ -3966,6 +3986,13 @@ _ACEOF nocommon_flag=-fno-common fi +if test x$ac_assert_checking != x ; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_ASSERT_CHECKING 1 +_ACEOF + +fi if test x$ac_tree_checking != x ; then cat >>confdefs.h <<\_ACEOF @@ -5263,7 +5290,7 @@ if test "${gcc_cv_prog_makeinfo_modern+set}" = set; then else ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` - echo "configure:5266: version of makeinfo is $ac_prog_version" >&5 + echo "configure:5293: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; 4.[2-9]*) diff --git a/gcc/configure.ac b/gcc/configure.ac index db368f3c36f6..993d81d8736b 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -30,6 +30,9 @@ AC_INIT AC_CONFIG_SRCDIR(tree.c) AC_CONFIG_HEADER(auto-host.h:config.in) +#Set to 1 on a release branch +is_release= + # Determine the host, build, and target systems AC_CANONICAL_BUILD AC_CANONICAL_HOST @@ -370,10 +373,15 @@ fi AC_SUBST(warn_cflags) # Enable -Werror in bootstrap stage2 and later. -# Change the default to "no" on release branches. AC_ARG_ENABLE(werror, [ --enable-werror enable -Werror in bootstrap stage2 and later], [], -[enable_werror=yes]) +[if test x$is_release = x ; then + # Default to "yes" on development branches. + enable_werror=yes +else + # Default to "no" on release branches. + enable_werror=no +fi]) if test x$enable_werror = xyes ; then WERROR=-Werror fi @@ -384,8 +392,9 @@ AC_ARG_ENABLE(checking, [ --enable-checking[=LIST] enable expensive run-time checks. With LIST, enable only specific categories of checks. - Categories are: fold,gc,gcac,misc,rtlflag,rtl, - tree,valgrind; default is gc,misc,rtlflag,tree], + Categories are: none,assert,fold,gc,gcac,misc, + rtlflag,rtl,tree,valgrind; + default is assert,gc,misc,rtlflag,tree], [ac_checking= ac_tree_checking= ac_rtl_checking= @@ -393,16 +402,19 @@ ac_rtlflag_checking= ac_gc_checking= ac_gc_always_collect= ac_fold_checking= +ac_assert_checking= case "${enableval}" in yes) ac_checking=1 ; ac_tree_checking=1 ; ac_gc_checking=1 ; - ac_rtlflag_checking=1 ;; + ac_rtlflag_checking=1 ; ac_assert_checking=1 ;; no) ;; *) IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="$IFS," set fnord $enableval; shift IFS="$ac_save_IFS" + ac_assert_checking=1 for check do case $check in + assert) ac_assert_checking=1 ;; fold) ac_fold_checking=1 ;; gc) ac_gc_checking=1 ;; gcac) ac_gc_always_collect=1 ;; @@ -416,9 +428,16 @@ no) ;; done ;; esac -], -# Enable some checks by default for development versions of GCC -[ac_checking=1; ac_tree_checking=1; ac_gc_checking=1; ac_rtlflag_checking=1;]) +], [ +# Determine the default checks. +if test x$is_release = x ; then + # Enable some checks for development versions of GCC + ac_assert_checking=1; + ac_checking=1; ac_tree_checking=1; ac_gc_checking=1; ac_rtlflag_checking=1; +else + # Disable all but assertions for release versions of GCC. + ac_assert_checking=1; +fi]) nocommon_flag="" if test x$ac_checking != x ; then AC_DEFINE(ENABLE_CHECKING, 1, @@ -427,6 +446,10 @@ if test x$ac_checking != x ; then nocommon_flag=-fno-common fi AC_SUBST(nocommon_flag) +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_tree_checking != x ; then AC_DEFINE(ENABLE_TREE_CHECKING, 1, [Define if you want all operations on trees (the basic data diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index e8b8d0038d60..90effbf4710c 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1097,12 +1097,17 @@ compiler and may only work properly if you are building the compiler with GCC@. This is on by default when building from CVS or snapshots, but off for releases. More control over the checks may be had by specifying @var{list}; the categories of checks available are -@samp{misc}, @samp{tree}, @samp{gc}, @samp{rtl}, @samp{rtlflag}, -@samp{fold}, @samp{gcac} and @samp{valgrind}. The check @samp{valgrind} -requires the external @command{valgrind} simulator, available from -@uref{http://valgrind.kde.org/}. The default when @var{list} is -not specified is @samp{misc,tree,gc,rtlflag}; the checks @samp{rtl}, -@samp{gcac} and @samp{valgrind} are very expensive. +@samp{assert}, @samp{misc}, @samp{tree}, @samp{gc}, @samp{rtl}, +@samp{rtlflag}, @samp{fold}, @samp{gcac} and @samp{valgrind}. The check +@samp{valgrind} requires the external @command{valgrind} simulator, +available from @uref{http://valgrind.kde.org/}. The default when +@var{list} is not specified is @samp{assert,misc,tree,gc,rtlflag}; the +checks @samp{rtl}, @samp{gcac} and @samp{valgrind} are very expensive. +When checking is neither explicitly enabled nor disabled, assertion +checks are still done. To disable all checking, +@samp{--disable-checking} must be explicitly requested. Disabling +assertions will make the compiler slightly faster but increase the risk +undetected internal errors causing wrong code to be generated. @item --enable-coverage @itemx --enable-coverage=@var{level} diff --git a/gcc/system.h b/gcc/system.h index 14dd1de4bcdc..934a332162ff 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -505,6 +505,19 @@ extern int snprintf (char *, size_t, const char *, ...); extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; #define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__) +/* Use gcc_assert(EXPR) to test invariants. */ +#if ENABLE_ASSERT_CHECKING +#define gcc_assert(EXPR) \ + ((void)(__builtin_expect (!(EXPR), 0) \ + ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0)) +#else +#define gcc_assert(EXPR) ((void)0) +#endif + +/* Use gcc_unreachable() to mark unreachable locations (like an + unreachable default case of a switch. Do not use gcc_assert(0). */ +#define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__)) + /* Provide a fake boolean type. We make no attempt to use the C99 _Bool, as it may not be available in the bootstrap compiler, and even if it is, it is liable to be buggy. -- 2.43.5