diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.dg/alias-11.c | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/alias-11.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.dg/alias-11.c | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/alias-11.c b/gcc-4.9/gcc/testsuite/gcc.dg/alias-11.c new file mode 100644 index 000000000..36175d7c2 --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.dg/alias-11.c @@ -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; + +__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; +} + +__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; +} |