aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@redhat.com>2005-03-17 17:20:49 +0000
committerFrank Ch. Eigler <fche@redhat.com>2005-03-17 17:20:49 +0000
commitd2e7af58cdd0e4199a359f7a8b8dc08e86496a27 (patch)
tree051d2a53b671d96bf6119f3cba06ea10336b65f8
parentecf59780ffc7c45972adbc70049d8be416904be8 (diff)
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: https://gcc.gnu.org/svn/gcc/trunk@96620 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libmudflap/ChangeLog5
-rw-r--r--libmudflap/mf-runtime.c4
-rw-r--r--libmudflap/testsuite/libmudflap.c/fail39-frag.c20
-rw-r--r--libmudflap/testsuite/libmudflap.c/pass56-frag.c14
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;
+}