summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c')
-rwxr-xr-xgcc/testsuite/gcc.c-torture/execute/memcheck/t9.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c b/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c
new file mode 100755
index 0000000..f32ca01
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/memcheck/t9.c
@@ -0,0 +1,40 @@
+/* Must define:
+ int expect_error;
+ void test ();
+ void setup () NOCHECK; */
+
+#include "driver.h"
+
+int expect_error = 1;
+
+typedef struct {
+ short a;
+ char b;
+} S1;
+typedef struct {
+ struct { int x; S1 *s1p; } *p;
+} S2;
+
+S1 *s1;
+S2 *s2;
+
+void test ()
+{
+ s1 = c_malloc (sizeof (S1));
+ s2 = c_malloc (sizeof (S2));
+ s2->p = c_malloc (sizeof (*s2->p));
+ s2->p->s1p = s1;
+ s1->a = 47;
+ foo ();
+}
+
+int foo ()
+{
+ return s2->p->s1p->b;
+}
+
+void setup () /* NOCHECK */
+{
+ mark_region (&s1, sizeof (s1), ACCESS_RW);
+ mark_region (&s2, sizeof (s2), ACCESS_RW);
+}