aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/941014-2.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.c-torture/execute/941014-2.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.c-torture/execute/941014-2.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/941014-2.c b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/941014-2.c
new file mode 100644
index 000000000..3932a34ce
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.c-torture/execute/941014-2.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct {
+ unsigned short a;
+ unsigned short b;
+} foo_t;
+
+void a1 (unsigned long offset) {}
+
+volatile foo_t *
+f ()
+{
+ volatile foo_t *foo_p = (volatile foo_t *)malloc (sizeof (foo_t));
+
+ a1((unsigned long)foo_p-30);
+ if (foo_p->a & 0xf000)
+ printf("%d\n", foo_p->a);
+ foo_p->b = 0x0100;
+ a1 ((unsigned long)foo_p + 2);
+ a1 ((unsigned long)foo_p - 30);
+ return foo_p;
+}
+
+main ()
+{
+ volatile foo_t *foo_p;
+
+ foo_p = f ();
+ if (foo_p->b != 0x0100)
+ abort ();
+ exit (0);
+}