aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2004-08-27 16:20:45 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2004-08-27 16:20:45 +0000
commit06c37c965a32bf125f32111fac25707bee54708a (patch)
treee2fce412e85b16b97075f73dc19c83b703a40a39 /gcc
parent9d64df18fd9175749aea2742096b172f59a5ebeb (diff)
downloadgcc-06c37c965a32bf125f32111fac25707bee54708a.zip
gcc-06c37c965a32bf125f32111fac25707bee54708a.tar.gz
gcc-06c37c965a32bf125f32111fac25707bee54708a.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config.in3
-rwxr-xr-xgcc/configure41
-rw-r--r--gcc/configure.ac39
-rw-r--r--gcc/doc/install.texi17
-rw-r--r--gcc/system.h13
6 files changed, 101 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 62936b8..b583862 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config.in b/gcc/config.in
index 61f5ec2..a104c67 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 f7e2f30..3aaefd3 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 db368f3..993d81d 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 e8b8d00..90effbf 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 14dd1de..934a332 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.