annotate gcc/testsuite/gcc.dg/guality/pr36728-3.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR debug/36728 */
kono
parents:
diff changeset
2 /* { dg-do run } */
kono
parents:
diff changeset
3 /* { dg-options "-g" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 #include "../nop.h"
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 int __attribute__((noinline))
kono
parents:
diff changeset
8 foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7)
kono
parents:
diff changeset
9 {
kono
parents:
diff changeset
10 char *x = __builtin_alloca (arg7);
kono
parents:
diff changeset
11 int __attribute__ ((aligned(32))) y;
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 y = 2;
kono
parents:
diff changeset
14 asm (NOP : "=m" (y) : "m" (y));
kono
parents:
diff changeset
15 x[0] = 25;
kono
parents:
diff changeset
16 asm volatile (NOP : "=m" (x[0]) : "m" (x[0]));
kono
parents:
diff changeset
17 return y;
kono
parents:
diff changeset
18 }
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 /* On s390(x) r2 and r3 are (depending on the optimization level) used
kono
parents:
diff changeset
21 when adjusting the addresses in order to meet the alignment
kono
parents:
diff changeset
22 requirements above. They usually hold the function arguments arg1
kono
parents:
diff changeset
23 and arg2. So it is expected that these values are unavailable in
kono
parents:
diff changeset
24 some of these tests. */
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 /* { dg-final { gdb-test 14 "arg1" "1" { target { ! "s390*-*-*" } } } } */
kono
parents:
diff changeset
27 /* { dg-final { gdb-test 14 "arg2" "2" { target { ! "s390*-*-*" } } } } */
kono
parents:
diff changeset
28 /* { dg-final { gdb-test 14 "arg3" "3" } } */
kono
parents:
diff changeset
29 /* { dg-final { gdb-test 14 "arg4" "4" } } */
kono
parents:
diff changeset
30 /* { dg-final { gdb-test 14 "arg5" "5" } } */
kono
parents:
diff changeset
31 /* { dg-final { gdb-test 14 "arg6" "6" } } */
kono
parents:
diff changeset
32 /* { dg-final { gdb-test 14 "arg7" "30" } } */
kono
parents:
diff changeset
33 /* { dg-final { gdb-test 14 "y" "2" } } */
kono
parents:
diff changeset
34 /* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
kono
parents:
diff changeset
35 /* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
kono
parents:
diff changeset
36 /* { dg-final { gdb-test 16 "arg3" "3" } } */
kono
parents:
diff changeset
37 /* { dg-final { gdb-test 16 "arg4" "4" } } */
kono
parents:
diff changeset
38 /* { dg-final { gdb-test 16 "arg5" "5" } } */
kono
parents:
diff changeset
39 /* { dg-final { gdb-test 16 "arg6" "6" } } */
kono
parents:
diff changeset
40 /* { dg-final { gdb-test 16 "arg7" "30" } } */
kono
parents:
diff changeset
41 /* { dg-final { gdb-test 16 "*x" "(char) 25" } } */
kono
parents:
diff changeset
42 /* { dg-final { gdb-test 16 "y" "2" } } */
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 int
kono
parents:
diff changeset
45 main ()
kono
parents:
diff changeset
46 {
kono
parents:
diff changeset
47 int l = 0;
kono
parents:
diff changeset
48 asm volatile ("" : "=r" (l) : "0" (l));
kono
parents:
diff changeset
49 foo (l + 1, l + 2, l + 3, l + 4, l + 5, l + 6, l + 30);
kono
parents:
diff changeset
50 asm volatile ("" :: "r" (l));
kono
parents:
diff changeset
51 return 0;
kono
parents:
diff changeset
52 }