[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