mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-26 04:14:06 +08:00
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
This commit is contained in:
parent
9d64df18fd
commit
06c37c965a
@ -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.
|
||||
|
@ -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
|
||||
|
41
gcc/configure
vendored
41
gcc/configure
vendored
@ -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]*)
|
||||
|
@ -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
|
||||
|
@ -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}
|
||||
|
13
gcc/system.h
13
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.
|
||||
|
Loading…
Reference in New Issue
Block a user