(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
attr-alloc_size-11.c
       1  /* Verify that -Walloc-size-greater-than doesn't cause false positives
       2     for anti-ranges.  Note that not all of the statements below result
       3     in the argument being represented as an anti-range.
       4  
       5     { dg-do compile }
       6     { dg-options "-O2 -Walloc-size-larger-than=12 -ftrack-macro-expansion=0" } */
       7  
       8  #define SCHAR_MAX __SCHAR_MAX__
       9  #define SCHAR_MIN (-SCHAR_MAX - 1)
      10  #define UCHAR_MAX (SCHAR_MAX * 2 + 1)
      11  
      12  #define SHRT_MAX  __SHRT_MAX__
      13  #define SHRT_MIN  (-SHRT_MAX - 1)
      14  #define USHRT_MAX (SHRT_MAX * 2U + 1)
      15  
      16  #define INT_MAX   __INT_MAX__
      17  #define INT_MIN   (-INT_MAX - 1)
      18  #define UINT_MAX  (INT_MAX * 2U + 1)
      19  
      20  #define LONG_MAX __LONG_MAX__
      21  #define LONG_MIN (-LONG_MAX - 1)
      22  #define ULONG_MAX (LONG_MAX * 2LU + 1)
      23  
      24  #define PTRDIFF_MAX __PTRDIFF_MAX__
      25  #define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
      26  #define SIZE_MAX    __SIZE_MAX__
      27  
      28  #define ALLOC_MAX   12
      29  
      30  typedef __PTRDIFF_TYPE__ ptrdiff_t;
      31  typedef __SIZE_TYPE__    size_t;
      32  
      33  #define CONCAT(a, b)  a ## b
      34  #define CAT(a, b)     CONCAT (a, b)
      35  
      36  /* Macro to generate a unique function to test the anti-range
      37     ~[MIN, MAX] for type T.  */
      38  #define TEST(T, min, max)					\
      39    void* CAT (test_anti_range_, __LINE__)(T n)			\
      40    {								\
      41      extern void* CAT (alloc_anti_range_, __LINE__)(T)		\
      42        __attribute__ ((alloc_size (1)));				\
      43      if (min <= n && n <= max)					\
      44        n = min - 1;						\
      45      return CAT (alloc_anti_range_, __LINE__)(n);		\
      46    } typedef void dummy   /* Require a semicolon.  */
      47  
      48  /* The following tests fail because of missing range information.  The xfail
      49     exclusions are PR79356.  */
      50  TEST (signed char, SCHAR_MIN + 2, ALLOC_MAX);   /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" "missing range info for signed char" { xfail { ! { aarch64*-*-* arm*-*-* avr-*-* alpha*-*-* cris-*-* ia64-*-* mips*-*-* or1k*-*-* pdp11*-*-* powerpc*-*-* sparc*-*-* s390*-*-* visium-*-* msp430-*-* nvptx*-*-*} } } } */
      51  TEST (short, SHRT_MIN + 2, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" "missing range info for short" { xfail { ! { aarch64*-*-* arm*-*-* alpha*-*-* avr-*-* cris-*-* ia64-*-* mips*-*-* or1k*-*-* pdp11*-*-* powerpc*-*-* sparc*-*-* s390x-*-* visium-*-* msp430-*-* nvptx*-*-* } } } } */
      52  TEST (int, INT_MIN + 2, ALLOC_MAX);    /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      53  TEST (int, -3, ALLOC_MAX);             /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      54  TEST (int, -2, ALLOC_MAX);             /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      55  TEST (int, -1, ALLOC_MAX);             /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      56  TEST (int,  0, ALLOC_MAX);             /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      57  TEST (int,  1, ALLOC_MAX);             /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      58  TEST (int,  1, INT_MAX - 1);           /* { dg-warning "argument 1 range \\\[\[0-9\]+, \[0-9\]+\\\] exceeds maximum object size 12" } */
      59  
      60  /* The following two aren't necessarily anti-ranges.  */
      61  TEST (int,  1, INT_MAX);               /* { dg-warning "argument 1 range \\\[-\[0-9\]+, 0\\\] is negative" } */
      62  TEST (int,  0, INT_MAX);               /* { dg-warning "argument 1 range \\\[-\[0-9\]+, -1\\\] is negative" } */
      63  
      64  TEST (long, LONG_MIN + 2, ALLOC_MAX);  /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      65  TEST (ptrdiff_t, PTRDIFF_MIN + 2, ALLOC_MAX);  /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      66  
      67  TEST (unsigned, 0, ALLOC_MAX);         /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      68  TEST (unsigned long, 0, ALLOC_MAX);    /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
      69  TEST (size_t, 0, ALLOC_MAX);           /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */