mf-runtime.c (__mfu_check): Respect ignore_reads configuration.
authorFrank Ch. Eigler <fche@redhat.com>
Thu, 17 Mar 2005 17:20:49 +0000 (17:20 +0000)
committerFrank Ch. Eigler <fche@gcc.gnu.org>
Thu, 17 Mar 2005 17:20:49 +0000 (17:20 +0000)
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.

From-SVN: r96620

libmudflap/ChangeLog
libmudflap/mf-runtime.c
libmudflap/testsuite/libmudflap.c/fail39-frag.c [new file with mode: 0644]
libmudflap/testsuite/libmudflap.c/pass56-frag.c [new file with mode: 0644]

index 3dad043..cc0d418 100644 (file)
@@ -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
index 64b1842..a129990 100644 (file)
@@ -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 (file)
index 0000000..4e74ea5
--- /dev/null
@@ -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 (file)
index 0000000..e22fc8d
--- /dev/null
@@ -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;
+}