Viewing file: 20070507-1.c (1.63 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* This failed on s390x due to bug in loop.c. loop.c failed to remove a REG_EQUAL note when hoisting an insn from a loop body. */
/* { dg-options "-O3 -fPIC" } */ /* { dg-do run { target fpic } } */
typedef __SIZE_TYPE__ size_t; int memcmp(const void *s1, const void *s2, size_t n);
typedef struct { char name[30]; int a; } LOCAL;
int global = 0; int sy = 1; int subroutine_offset;
LOCAL local = { "local", 0 }; LOCAL keywords = { "keywords", 1 }; int local_table = 0; int keywords_table = 0;
void __attribute__((noinline)) bar (char *p_buffer) { p_buffer[255] = 1; }
int __attribute__((noinline)) foo (char *p_str1) { global = 1; return 1; }
int __attribute__((noinline)) loop_next (int *p_table, char *p_table_head) { static int loop_next = 0;
if (loop_next == 1) return 1;
loop_next = 1; return 0; }
int main () { char buffer[256]; int ende = 0; int index; int local_base = 2;
keywords.a = 1; for (sy = 0;; sy++) { for (index = 1;;) { bar (buffer); if (buffer[sy] != 0) { ende = 1; break; }; if (foo (buffer)) { keywords.a += index - 1; break; } index++; } if (ende) break; }
subroutine_offset = 0;
for (;;) { if (loop_next (&keywords_table, (char*)&keywords)) break;
if ((!memcmp (keywords.name, "+++", 3))) local_base = 100; else local_base = 0;
if ((!memcmp (keywords.name, "+++", 3))) subroutine_offset += local_table;
for (;;) { if (loop_next (&local_table, (char*)&local)) break;; if ((local.a == 0)) continue;; foo (local.name); } } return 0; }
|