(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
builtin-object-size-5.c
       1  /* { dg-do compile { target i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } */
       2  /* { dg-options "-O2" } */
       3  
       4  #ifndef N
       5  # define N 0x40000000
       6  #endif
       7  
       8  typedef __SIZE_TYPE__ size_t;
       9  extern void abort (void);
      10  extern char buf[N];
      11  
      12  void
      13  test1 (size_t x)
      14  {
      15    char *p = &buf[8];
      16    size_t i;
      17  
      18    for (i = 0; i < x; ++i)
      19      p = p + 4;
      20  #ifdef __builtin_object_size
      21    if (__builtin_object_size (p, 0) != sizeof (buf) - 8 - 4 * x)
      22  #else
      23    if (__builtin_object_size (p, 0) != sizeof (buf) - 8)
      24  #endif
      25      abort ();
      26  }
      27  
      28  void
      29  test2 (size_t x)
      30  {
      31    char *p = &buf[8];
      32    size_t i;
      33  
      34    for (i = 0; i < x; ++i)
      35      p = p + 4;
      36  #ifdef __builtin_object_size
      37    if (__builtin_object_size (p, 1) != sizeof (buf) - 8 - 4 * x)
      38  #else
      39    if (__builtin_object_size (p, 1) != sizeof (buf) - 8)
      40  #endif
      41      abort ();
      42  }
      43  
      44  void
      45  test3 (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  #ifdef __builtin_object_size
      53    if (__builtin_object_size (p, 2) != sizeof (buf) - 8 - 4 * x)
      54  #else
      55    if (__builtin_object_size (p, 2) != 0)
      56  #endif
      57      abort ();
      58  }
      59  
      60  void
      61  test4 (size_t x)
      62  {
      63    char *p = &buf[8];
      64    size_t i;
      65  
      66    for (i = 0; i < x; ++i)
      67      p = p + 4;
      68  #ifdef __builtin_object_size
      69    if (__builtin_object_size (p, 3) != sizeof (buf) - 8 - 4 * x)
      70  #else
      71    if (__builtin_object_size (p, 3) != 0)
      72  #endif
      73      abort ();
      74  }
      75  
      76  void
      77  test5 (void)
      78  {
      79    char *p = &buf[0x90000004];
      80    if (__builtin_object_size (p + 2, 0) != 0)
      81      abort ();
      82  }
      83  
      84  void
      85  test6 (void)
      86  {
      87    char *p = &buf[-4];
      88    if (__builtin_object_size (p + 2, 0) != 0)
      89      abort ();
      90  }
      91  
      92  #ifdef __builtin_object_size
      93  void
      94  test7 (void)
      95  {
      96    char *buf2 = __builtin_malloc (8);
      97    char *p = &buf2[0x90000004];
      98    if (__builtin_object_size (p + 2, 0) != 0)
      99      abort ();
     100  }
     101  #endif
     102  
     103  /* { dg-final { scan-assembler-not "abort" } } */