This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[tree-ssa mudflap] regression fix
- From: "Frank Ch. Eigler" <fche at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Mon, 12 Jan 2004 15:28:41 -0500
- Subject: [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 *-*-* } } */