diff gcc/testsuite/gcc.dg/alias-11.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/gcc.dg/alias-11.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,111 @@
+/* { dg-do run } */
+/* { dg-require-alias "" } */
+/* { dg-options "-O2" } */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct dw_cfi_struct
+{
+  struct dw_cfi_struct *dw_cfi_next;
+  const char *dw_cfi_addr;
+}
+dw_cfi_node;
+
+typedef struct dw_fde_struct
+{
+  const char *dw_fde_current_label;
+  dw_cfi_node *dw_fde_cfi;
+}
+dw_fde_node;
+
+dw_cfi_node *cie_cfi_head;
+unsigned fde_table_in_use;
+dw_fde_node *fde_table;
+
+static __inline__ void
+add_cfi (dw_cfi_node **list_head, dw_cfi_node *cfi)
+{
+  dw_cfi_node **p;
+
+  for (p = list_head; (*p) != ((void *)0); p = &(*p)->dw_cfi_next)
+    ;
+
+  *p = cfi;
+}
+
+static __inline__ struct dw_cfi_struct *
+new_cfi (void)
+{
+  dw_cfi_node *cfi = (dw_cfi_node *) malloc (sizeof (dw_cfi_node));
+
+  memset (cfi, 0, sizeof (dw_cfi_node));
+  return cfi;
+}
+
+char *
+dwarf2out_cfi_label (void)
+{
+  static char label[20];
+  static unsigned long label_num = 0;
+
+  sprintf (label, "*.%s%u", "LCFI", (unsigned) (label_num++));
+  return label;
+}
+
+void
+add_fde_cfi (const char *label, dw_cfi_node *cfi)
+{
+  if (label)
+    {
+      dw_fde_node *fde = fde_table + fde_table_in_use - 1;
+
+      if (*label == 0)
+	label = dwarf2out_cfi_label ();
+
+      if (fde->dw_fde_current_label == ((void *)0)
+	  || strcmp (label, fde->dw_fde_current_label))
+	{
+	  dw_cfi_node *xcfi;
+
+	  fde->dw_fde_current_label = label = strdup (label);
+
+	  xcfi = new_cfi ();
+	  xcfi->dw_cfi_addr = label;
+	  add_cfi (&fde->dw_fde_cfi, xcfi);
+	}
+
+      add_cfi (&fde->dw_fde_cfi, cfi);
+    }
+  else
+    add_cfi (&cie_cfi_head, cfi);
+}
+
+int
+main ()
+{
+  dw_cfi_node *cfi;
+  dw_fde_node *fde;
+
+  fde_table_in_use = 1;
+  fde_table = (dw_fde_node *) realloc (fde_table,
+				       sizeof (dw_fde_node));
+  memset (fde_table, 0, sizeof (dw_fde_node));
+  cfi = new_cfi ();
+  add_fde_cfi ("", cfi);
+
+  fde = &fde_table[0];
+  cfi = fde->dw_fde_cfi;
+
+  if (cfi == NULL)
+    abort ();
+
+  if (cfi->dw_cfi_addr == NULL)
+    abort ();
+
+  if (strcmp ("*.LCFI0", cfi->dw_cfi_addr))
+    abort ();
+
+  return 0;
+}