From: fche Date: Thu, 17 Mar 2005 17:20:49 +0000 (+0000) Subject: 2005-03-17 Frank Ch. Eigler X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=98c54c5e0e54290247ede10b60852f9b638ea180;p=thirdparty%2Fgcc.git 2005-03-17 Frank Ch. Eigler * mf-runtime.c (__mfu_check): Respect ignore_reads configuration. * testsuite/libmudflap.c/{pass56,fail39}-frag.c: New tests. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96620 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index 3dad04372339..cc0d41877356 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,8 @@ +2005-03-17 Frank Ch. Eigler + + * mf-runtime.c (__mfu_check): Respect ignore_reads configuration. + * testsuite/libmudflap.c/{pass56,fail39}-frag.c: New tests. + 2005-02-13 Frank Ch. Eigler PR mudflap/19319 diff --git a/libmudflap/mf-runtime.c b/libmudflap/mf-runtime.c index 64b1842766ca..a129990f0dd7 100644 --- a/libmudflap/mf-runtime.c +++ b/libmudflap/mf-runtime.c @@ -1,5 +1,5 @@ /* Mudflap: narrow-pointer bounds-checking by tree rewriting. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Frank Ch. Eigler and Graydon Hoare Splay Tree code originally by Mark Mitchell , @@ -813,6 +813,8 @@ void __mfu_check (void *ptr, size_t sz, int type, const char *location) if (UNLIKELY (__mf_opts.sigusr1_report)) __mf_sigusr1_respond (); + if (UNLIKELY (__mf_opts.ignore_reads && type == 0)) + return; TRACE ("check ptr=%p b=%u size=%lu %s location=`%s'\n", ptr, entry_idx, (unsigned long)sz, diff --git a/libmudflap/testsuite/libmudflap.c/fail39-frag.c b/libmudflap/testsuite/libmudflap.c/fail39-frag.c new file mode 100644 index 000000000000..4e74ea5cd5eb --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/fail39-frag.c @@ -0,0 +1,20 @@ +#include +#include + +int main () +{ + volatile int *k = (int *) malloc (sizeof (int)); + volatile int l; + if (k == NULL) abort (); + *k = 5; + free ((void *) k); + __mf_set_options ("-ignore-reads"); + l = *k; /* Should not trip, even though memory region just freed. */ + __mf_set_options ("-no-ignore-reads"); + l = *k; /* Should trip now. */ + return 0; +} +/* { dg-output "mudflap violation 1.*check/read.*" } */ +/* { dg-output "Nearby object 1.*" } */ +/* { dg-output "mudflap dead object.*malloc region.*" } */ +/* { dg-do run { xfail *-*-* } } */ diff --git a/libmudflap/testsuite/libmudflap.c/pass56-frag.c b/libmudflap/testsuite/libmudflap.c/pass56-frag.c new file mode 100644 index 000000000000..e22fc8dbfd61 --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/pass56-frag.c @@ -0,0 +1,14 @@ +#include +#include + +int main () +{ + volatile int *k = (int *) malloc (sizeof (int)); + volatile int l; + if (k == NULL) abort (); + *k = 5; + free ((void *) k); + __mf_set_options ("-ignore-reads"); + l = *k; /* Should not trip, even though memory region just freed. */ + return 0; +}