1/* { dg-do compile { target i?86-*-linux* x86_64-*-linux* } } */
2/* { dg-options "-O2" } */
3
4typedef __SIZE_TYPE__ size_t;
5extern void abort (void);
6extern char buf[0x40000000];
7
8void
9test1 (size_t x)
10{
11  char *p = &buf[8];
12  size_t i;
13
14  for (i = 0; i < x; ++i)
15    p = p + 4;
16  if (__builtin_object_size (p, 0) != sizeof (buf) - 8)
17    abort ();
18}
19
20void
21test2 (size_t x)
22{
23  char *p = &buf[8];
24  size_t i;
25
26  for (i = 0; i < x; ++i)
27    p = p + 4;
28  if (__builtin_object_size (p, 1) != sizeof (buf) - 8)
29    abort ();
30}
31
32void
33test3 (size_t x)
34{
35  char *p = &buf[8];
36  size_t i;
37
38  for (i = 0; i < x; ++i)
39    p = p + 4;
40  if (__builtin_object_size (p, 2) != 0)
41    abort ();
42}
43
44void
45test4 (size_t x)
46{
47  char *p = &buf[8];
48  size_t i;
49
50  for (i = 0; i < x; ++i)
51    p = p + 4;
52  if (__builtin_object_size (p, 3) != 0)
53    abort ();
54}
55
56/* { dg-final { scan-assembler-not "abort" } } */
57