configure.ac: Add ENABLE_ASSERT_CHECKING control.
authorNathan Sidwell <nathan@codesourcery.com>
Fri, 27 Aug 2004 16:20:45 +0000 (16:20 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 27 Aug 2004 16:20:45 +0000 (16:20 +0000)
* 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
gcc/config.in
gcc/configure
gcc/configure.ac
gcc/doc/install.texi
gcc/system.h

index 62936b89e3591139d855a892b38f566abf49a6ac..b583862145c13b9d7fe9aa2b3f7f4520ba1f1774 100644 (file)
@@ -1,3 +1,12 @@
+2004-08-27  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * 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  <rsandifo@redhat.com>
 
        * rtl.h (read_rtx): Change prototype.
index 61f5ec21207e6e4500d79727ecf9cf886a903c35..a104c6739c3c4d37e987ff21a5a9414b918be3ce 100644 (file)
@@ -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
index f7e2f303e7287635411156ee8554386f28181c3d..3aaefd3ff19442342e0f2a6be953bde8a4a0789d 100755 (executable)
@@ -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]*)
index db368f3c36f687a1886f7737aab8b936bb02470b..993d81d8736b4882ea14dea026b77f64c830b907 100644 (file)
@@ -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
index e8b8d0038d6098d1a80420ddbb7246ac237e69cf..90effbf4710c382f5d3a754d04c03445d0dfaad2 100644 (file)
@@ -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}
index 14dd1de4bcdc29604a79adbc3b492978b840abbf..934a332162ff9a6e40d9e07991b1b11240339a52 100644 (file)
@@ -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.