diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-02-28 09:58:47 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-02-28 09:58:47 +0000 |
| commit | 61ed1f10c1953a1f235ec02d8795eb6ac2b9f71c (patch) | |
| tree | 02e8deb1f6a0854b3d5c12df42f42b182142adcf /libcpp | |
| parent | 3e88585b58d32cadbea3d6f9b6eb00cde3ef59fa (diff) | |
| download | ppe42-gcc-61ed1f10c1953a1f235ec02d8795eb6ac2b9f71c.tar.gz ppe42-gcc-61ed1f10c1953a1f235ec02d8795eb6ac2b9f71c.zip | |
* configure.ac: Don't define ENABLE_CHECKING whenever
--enable-checking is seen, instead use similar --enable-checking=yes
vs. --enable-checking=release default as gcc/ subdir has and
define ENABLE_CHECKING if ENABLE_CHECKING is defined in gcc/.
Define ENABLE_VALGRIND_CHECKING if requested.
* lex.c (new_buff): If ENABLE_VALGRIND_CHECKING, put _cpp_buff
struct first in the allocated buffer and result->base after it.
(_cpp_free_buff): If ENABLE_VALGRIND_CHECKING, free buff itself
instead of buff->base.
* config.in: Regenerated.
* configure: Regenerated.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196333 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp')
| -rw-r--r-- | libcpp/ChangeLog | 14 | ||||
| -rw-r--r-- | libcpp/config.in | 4 | ||||
| -rwxr-xr-x | libcpp/configure | 46 | ||||
| -rw-r--r-- | libcpp/configure.ac | 46 | ||||
| -rw-r--r-- | libcpp/lex.c | 13 |
5 files changed, 115 insertions, 8 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 22451a2103f..7a94c90b6d3 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,17 @@ +2013-02-28 Jakub Jelinek <jakub@redhat.com> + + * configure.ac: Don't define ENABLE_CHECKING whenever + --enable-checking is seen, instead use similar --enable-checking=yes + vs. --enable-checking=release default as gcc/ subdir has and + define ENABLE_CHECKING if ENABLE_CHECKING is defined in gcc/. + Define ENABLE_VALGRIND_CHECKING if requested. + * lex.c (new_buff): If ENABLE_VALGRIND_CHECKING, put _cpp_buff + struct first in the allocated buffer and result->base after it. + (_cpp_free_buff): If ENABLE_VALGRIND_CHECKING, free buff itself + instead of buff->base. + * config.in: Regenerated. + * configure: Regenerated. + 2013-02-13 Ed Smith-Rowland <3dw4rd@verizon.net> PR c++/55582 diff --git a/libcpp/config.in b/libcpp/config.in index fca690cd306..1b0b25555cf 100644 --- a/libcpp/config.in +++ b/libcpp/config.in @@ -21,6 +21,10 @@ language is requested. */ #undef ENABLE_NLS +/* Define if you want to workaround valgrind (a memory checker) warnings about + possible memory leaks because of libcpp use of interior pointers. */ +#undef ENABLE_VALGRIND_CHECKING + /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA diff --git a/libcpp/configure b/libcpp/configure index d07aed3199c..f21b361577f 100755 --- a/libcpp/configure +++ b/libcpp/configure @@ -1333,7 +1333,11 @@ Optional Features: --enable-werror-always enable -Werror despite compiler version --disable-rpath do not hardcode runtime library paths --enable-maintainer-mode enable rules only needed by maintainers - --enable-checking enable expensive run-time checks + --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 --enable-canonical-system-headers enable or disable system headers canonicalization @@ -7083,20 +7087,54 @@ else fi +# 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 + # Check whether --enable-checking was given. if test "${enable_checking+set}" = set; then : - enableval=$enable_checking; + enableval=$enable_checking; ac_checking_flags="${enableval}" +else + +# Determine the default checks. +if test x$is_release = x ; then + ac_checking_flags=yes else - enable_checking=no + ac_checking_flags=release +fi 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_valgrind_checking= ;; + no|none|release) ac_checking= ; ac_valgrind_checking= ;; + # these enable particular checks + misc) ac_checking=1 ;; + valgrind) ac_valgrind_checking=1 ;; + # accept + *) ;; + esac +done +IFS="$ac_save_IFS" -if test $enable_checking != no ; then +if test x$ac_checking != x ; then $as_echo "#define ENABLE_CHECKING 1" >>confdefs.h fi +if test x$ac_valgrind_checking != x ; then + +$as_echo "#define ENABLE_VALGRIND_CHECKING 1" >>confdefs.h + +fi + # Check whether --enable-canonical-system-headers was given. if test "${enable_canonical_system_headers+set}" = set; then : enableval=$enable_canonical_system_headers; diff --git a/libcpp/configure.ac b/libcpp/configure.ac index 34ae5c20622..e0c4ae6958f 100644 --- a/libcpp/configure.ac +++ b/libcpp/configure.ac @@ -123,15 +123,53 @@ else fi AC_SUBST(MAINT) -AC_ARG_ENABLE(checking, -[ --enable-checking enable expensive run-time checks],, -enable_checking=no) +# 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 -if test $enable_checking != no ; then +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_valgrind_checking= ;; + no|none|release) ac_checking= ; ac_valgrind_checking= ;; + # these enable particular checks + 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(ENABLE_CHECKING, 1, [Define if you want more run-time sanity checks.]) 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 + AC_ARG_ENABLE(canonical-system-headers, [ --enable-canonical-system-headers enable or disable system headers canonicalization], diff --git a/libcpp/lex.c b/libcpp/lex.c index 976d9e8b0eb..570c00733cb 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -2846,8 +2846,17 @@ new_buff (size_t len) len = MIN_BUFF_SIZE; len = CPP_ALIGN (len); +#ifdef ENABLE_VALGRIND_CHECKING + /* Valgrind warns about uses of interior pointers, so put _cpp_buff + struct first. */ + size_t slen = CPP_ALIGN2 (sizeof (_cpp_buff), 2 * DEFAULT_ALIGNMENT); + base = XNEWVEC (unsigned char, len + slen); + result = (_cpp_buff *) base; + base += slen; +#else base = XNEWVEC (unsigned char, len + sizeof (_cpp_buff)); result = (_cpp_buff *) (base + len); +#endif result->base = base; result->cur = base; result->limit = base + len; @@ -2934,7 +2943,11 @@ _cpp_free_buff (_cpp_buff *buff) for (; buff; buff = next) { next = buff->next; +#ifdef ENABLE_VALGRIND_CHECKING + free (buff); +#else free (buff->base); +#endif } } |

