re PR tree-optimization/42614 (FRE optimizes away valid code after IPA inlining)
authorRichard Guenther <rguenther@suse.de>
Tue, 5 Jan 2010 13:42:40 +0000 (13:42 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 5 Jan 2010 13:42:40 +0000 (13:42 +0000)
2010-01-05  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/42614
* gcc.c-torture/execute/pr42614.c: New testcase.

From-SVN: r155647

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr42614.c [new file with mode: 0644]

index 42eb680..813e005 100644 (file)
@@ -1,3 +1,8 @@
+2010-01-05  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/42614
+       * gcc.c-torture/execute/pr42614.c: New testcase.
+
 2010-01-05  Eric Fisher  <joefoxreal@gmail.com>
 
        * gcc.dg/pr12603.c: Remove -Wunreachable-code from dg-options.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr42614.c b/gcc/testsuite/gcc.c-torture/execute/pr42614.c
new file mode 100644 (file)
index 0000000..d368053
--- /dev/null
@@ -0,0 +1,68 @@
+extern void *malloc(__SIZE_TYPE__);
+extern void abort(void);
+extern void free(void *);
+
+typedef struct SEntry
+{
+  unsigned char num;
+} TEntry;
+
+typedef struct STable
+{
+  TEntry data[2];
+} TTable;
+
+TTable *init ()
+{
+  return malloc(sizeof(TTable));
+}
+
+void
+expect_func (int a, unsigned char *b) __attribute__ ((noinline));
+
+static inline void
+inlined_wrong (TEntry *entry_p, int flag);
+
+void
+inlined_wrong (TEntry *entry_p, int flag)
+{
+  unsigned char index;
+  entry_p->num = 0;
+
+  if (flag == 0)
+    abort();
+
+  for (index = 0; index < 1; index++)
+    entry_p->num++;
+
+  if (!entry_p->num)
+    {
+      abort();
+    }
+}
+
+void
+expect_func (int a, unsigned char *b)
+{
+  if (abs ((a == 0)))
+    abort ();
+  if (abs ((b == 0)))
+    abort ();
+}
+
+int
+main ()
+{
+  unsigned char index = 0;
+  TTable *table_p = init();
+  TEntry work;
+
+  inlined_wrong (&(table_p->data[1]), 1);
+  expect_func (1, &index);
+  inlined_wrong (&work, 1);
+
+  free (table_p);
+
+  return 0;
+}
+