diff options
author | fche <fche@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-17 17:20:49 +0000 |
---|---|---|
committer | fche <fche@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-03-17 17:20:49 +0000 |
commit | 98c54c5e0e54290247ede10b60852f9b638ea180 (patch) | |
tree | 051d2a53b671d96bf6119f3cba06ea10336b65f8 | |
parent | cf28d4b1ad6491ff30ecd6a426d088ccb864277a (diff) | |
download | gcc-98c54c5e0e54290247ede10b60852f9b638ea180.tar.gz |
2005-03-17 Frank Ch. Eigler <fche@redhat.com>
* 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
-rw-r--r-- | libmudflap/ChangeLog | 5 | ||||
-rw-r--r-- | libmudflap/mf-runtime.c | 4 | ||||
-rw-r--r-- | libmudflap/testsuite/libmudflap.c/fail39-frag.c | 20 | ||||
-rw-r--r-- | libmudflap/testsuite/libmudflap.c/pass56-frag.c | 14 |
4 files changed, 42 insertions, 1 deletions
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog index 3dad0437233..cc0d4187735 100644 --- a/libmudflap/ChangeLog +++ b/libmudflap/ChangeLog @@ -1,3 +1,8 @@ +2005-03-17 Frank Ch. Eigler <fche@redhat.com> + + * mf-runtime.c (__mfu_check): Respect ignore_reads configuration. + * testsuite/libmudflap.c/{pass56,fail39}-frag.c: New tests. + 2005-02-13 Frank Ch. Eigler <fche@redhat.com> PR mudflap/19319 diff --git a/libmudflap/mf-runtime.c b/libmudflap/mf-runtime.c index 64b1842766c..a129990f0dd 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 <fche@redhat.com> and Graydon Hoare <graydon@redhat.com> Splay Tree code originally by Mark Mitchell <mark@markmitchell.com>, @@ -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 00000000000..4e74ea5cd5e --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/fail39-frag.c @@ -0,0 +1,20 @@ +#include <stdio.h> +#include <stdlib.h> + +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 00000000000..e22fc8dbfd6 --- /dev/null +++ b/libmudflap/testsuite/libmudflap.c/pass56-frag.c @@ -0,0 +1,14 @@ +#include <stdio.h> +#include <stdlib.h> + +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; +} |