[PATCH][mem-ref2] Add testcase for PR44468
Richard Guenther
rguenther@suse.de
Tue Jun 8 12:55:00 GMT 2010
As PR44468 is fixed on the mem-ref branch the following adds a testcase.
Committed.
Richard.
Index: ChangeLog.mem-ref2
===================================================================
*** ChangeLog.mem-ref2 (revision 160427)
--- ChangeLog.mem-ref2 (working copy)
***************
*** 1,5 ****
--- 1,10 ----
2010-06-08 Richard Guenther <rguenther@suse.de>
+ PR tree-optimization/44468
+ * gcc.c-torture/execute/pr44468.c: New testcase.
+
+ 2010-06-08 Richard Guenther <rguenther@suse.de>
+
* tree-scalar-evolution.c (follow_ssa_edge_expr): Handle
&MEM[ptr + CST] similar to POINTER_PLUS_EXPR.
* tree-data-ref.c (dr_analyze_innermost): Handle MEM_REF.
Index: testsuite/gcc.c-torture/execute/pr44468.c
===================================================================
*** testsuite/gcc.c-torture/execute/pr44468.c (revision 0)
--- testsuite/gcc.c-torture/execute/pr44468.c (revision 0)
***************
*** 0 ****
--- 1,60 ----
+ #include <stddef.h>
+
+ struct S {
+ int i;
+ int j;
+ };
+ struct R {
+ int k;
+ struct S a;
+ };
+ struct Q {
+ float k;
+ struct S a;
+ };
+ struct Q s;
+ int __attribute__((noinline,noclone))
+ test1 (void *q)
+ {
+ struct S *b = (struct S *)((char *)q + sizeof (int));
+ s.a.i = 0;
+ b->i = 3;
+ return s.a.i;
+ }
+ int __attribute__((noinline,noclone))
+ test2 (void *q)
+ {
+ struct S *b = &((struct R *)q)->a;
+ s.a.i = 0;
+ b->i = 3;
+ return s.a.i;
+ }
+ int __attribute__((noinline,noclone))
+ test3 (void *q)
+ {
+ s.a.i = 0;
+ ((struct S *)((char *)q + sizeof (int)))->i = 3;
+ return s.a.i;
+ }
+ extern void abort (void);
+ int
+ main()
+ {
+ if (sizeof (float) != sizeof (int)
+ || offsetof (struct R, a) != sizeof (int)
+ || offsetof (struct Q, a) != sizeof (int))
+ return 0;
+ s.a.i = 1;
+ s.a.j = 2;
+ if (test1 ((void *)&s) != 3)
+ abort ();
+ s.a.i = 1;
+ s.a.j = 2;
+ if (test2 ((void *)&s) != 3)
+ abort ();
+ s.a.i = 1;
+ s.a.j = 2;
+ if (test3 ((void *)&s) != 3)
+ abort ();
+ return 0;
+ }
More information about the Gcc-patches
mailing list