This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[tree-ssa mudflap] regression fix


Hi -

The following patch fixes regressions found by Uli Drepper.


2004-01-12  Frank Ch. Eigler  <fche@redhat.com>

	* tree-mudflap.c (mf_xform_derefs): Restore instrumentation of
	RETURN_EXPRs.


Index: gcc/tree-mudflap.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-mudflap.c,v
retrieving revision 1.1.2.64
diff -u -r1.1.2.64 tree-mudflap.c
--- gcc/tree-mudflap.c	9 Jan 2004 08:50:42 -0000	1.1.2.64
+++ gcc/tree-mudflap.c	12 Jan 2004 20:26:51 -0000
@@ -615,14 +615,28 @@
     {
       tree s = tsi_stmt (i);
 
-      /* Gimplified, nothing but MODIFY statements can reference memory.  */
-      if (TREE_CODE (s) != MODIFY_EXPR)
-	continue;
+      /* Only a few GIMPLE statements can reference memory.  */
+      switch (TREE_CODE (s))
+        {
+        case MODIFY_EXPR:
+          mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 0), EXPR_LOCUS (s),
+                             integer_one_node);
+          mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 1), EXPR_LOCUS (s),
+                             integer_zero_node);
+          break;
 
-      mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 0), EXPR_LOCUS (s),
-			 integer_one_node);
-      mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 1), EXPR_LOCUS (s),
-			 integer_zero_node);
+        case RETURN_EXPR:
+          if (TREE_CODE (TREE_OPERAND (s, 0)) == MODIFY_EXPR)
+            mf_xform_derefs_1 (&i, &TREE_OPERAND (TREE_OPERAND (s, 0), 1), EXPR_LOCUS (s),
+                               integer_zero_node);
+          else
+            mf_xform_derefs_1 (&i, &TREE_OPERAND (s, 0), EXPR_LOCUS (s),
+                               integer_zero_node);
+          break;
+
+        default:
+          ;
+        }
     }
 }

 
2004-01-12  Frank Ch. Eigler  <fche@redhat.com>

	* testsuite/libmudflap.c/fail{28,29,30}.c: New tests.



Index: libmudflap/testsuite/libmudflap.c/fail28-frag.c
===================================================================
RCS file: libmudflap/testsuite/libmudflap.c/fail28-frag.c
diff -N libmudflap/testsuite/libmudflap.c/fail28-frag.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libmudflap/testsuite/libmudflap.c/fail28-frag.c	12 Jan 2004 20:26:51 -0000
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int foo (int *u, int i)
+{
+   return u[i];  /* this dereference should be instrumented */
+}
+
+int main ()
+{
+int *k = malloc (6);
+return foo (k, 8);
+}
+/* { dg-output "mudflap violation 1.*" } */
+/* { dg-output "Nearby object.*" } */
+/* { dg-output "mudflap object.*malloc region.*alloc" } */
+/* { dg-do run { xfail *-*-* } } */
Index: libmudflap/testsuite/libmudflap.c/fail29-frag.c
===================================================================
RCS file: libmudflap/testsuite/libmudflap.c/fail29-frag.c
diff -N libmudflap/testsuite/libmudflap.c/fail29-frag.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libmudflap/testsuite/libmudflap.c/fail29-frag.c	12 Jan 2004 20:26:51 -0000
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int foo (int u[10])
+{
+   return u[8];  /* this dereference should be instrumented */
+}
+
+int main ()
+{
+int *k = malloc (6);
+return foo (k);
+}
+/* { dg-output "mudflap violation 1.*" } */
+/* { dg-output "Nearby object.*" } */
+/* { dg-output "mudflap object.*malloc region.*alloc" } */
+/* { dg-do run { xfail *-*-* } } */
Index: libmudflap/testsuite/libmudflap.c/fail30-frag.c
===================================================================
RCS file: libmudflap/testsuite/libmudflap.c/fail30-frag.c
diff -N libmudflap/testsuite/libmudflap.c/fail30-frag.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ libmudflap/testsuite/libmudflap.c/fail30-frag.c	12 Jan 2004 20:26:51 -0000
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int foo (int u)
+{
+   return u*u;
+}
+
+int main ()
+{
+int *k = malloc(5);
+int j = foo (k[8]);  /* this call argument should be instrumented */
+return j;
+}
+/* { dg-output "mudflap violation 1.*" } */
+/* { dg-output "Nearby object.*" } */
+/* { dg-output "mudflap object.*malloc region.*alloc" } */
+/* { dg-do run { xfail *-*-* } } */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]