PR middle-end/77357 - strlen of constant strings not folded
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / pr25967-1.c
blobfd26a8b8ce30c7d670b3e81ab7d6d7f91e2210ef
1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-options "-mgeneral-regs-only" } */
4 extern void exit (int);
6 typedef unsigned int uword_t __attribute__ ((mode (__word__)));
8 #define ERROR 0x12345670
9 #define IP 0x12345671
10 #define CS 0x12345672
11 #define FLAGS 0x12345673
12 #define SP 0x12345674
13 #define SS 0x12345675
15 #define STRING(x) XSTRING(x)
16 #define XSTRING(x) #x
17 #define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
18 #define ASMNAME2(prefix, cname) XSTRING (prefix) cname
20 struct interrupt_frame
22 uword_t ip;
23 uword_t cs;
24 uword_t flags;
25 uword_t sp;
26 uword_t ss;
29 __attribute__((naked, used))
30 void
31 fn (void)
33 register uword_t *sp __asm__("sp");
34 uword_t error = *sp;
35 struct interrupt_frame *frame = (struct interrupt_frame *) (sp + 1);
36 if (ERROR != error) /* BREAK */
37 __builtin_abort ();
38 if (IP != frame->ip)
39 __builtin_abort ();
40 if (CS != frame->cs)
41 __builtin_abort ();
42 if (FLAGS != frame->flags)
43 __builtin_abort ();
44 if (SP != frame->sp)
45 __builtin_abort ();
46 if (SS != frame->ss)
47 __builtin_abort ();
49 exit (0);
52 int
53 main ()
55 asm ("push $" STRING (SS) "; \
56 push $" STRING (SP) "; \
57 push $" STRING (FLAGS) "; \
58 push $" STRING (CS) "; \
59 push $" STRING (IP) "; \
60 push $" STRING (ERROR) "; \
61 jmp " ASMNAME ("fn"));
62 return 0;