annotate gcc/testsuite/gcc.dg/attr-alloc_size-11.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Verify that -Walloc-size-greater-than doesn't cause false positives
kono
parents:
diff changeset
2 for anti-ranges. Note that not all of the statements below result
kono
parents:
diff changeset
3 in the argument being represented as an anti-range.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 { dg-do compile }
kono
parents:
diff changeset
6 { dg-options "-O2 -Walloc-size-larger-than=12 -ftrack-macro-expansion=0" } */
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 #define SCHAR_MAX __SCHAR_MAX__
kono
parents:
diff changeset
9 #define SCHAR_MIN (-SCHAR_MAX - 1)
kono
parents:
diff changeset
10 #define UCHAR_MAX (SCHAR_MAX * 2 + 1)
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 #define SHRT_MAX __SHRT_MAX__
kono
parents:
diff changeset
13 #define SHRT_MIN (-SHRT_MAX - 1)
kono
parents:
diff changeset
14 #define USHRT_MAX (SHRT_MAX * 2 + 1)
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 #define INT_MAX __INT_MAX__
kono
parents:
diff changeset
17 #define INT_MIN (-INT_MAX - 1)
kono
parents:
diff changeset
18 #define UINT_MAX (INT_MAX * 2U + 1)
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 #define LONG_MAX __LONG_MAX__
kono
parents:
diff changeset
21 #define LONG_MIN (-LONG_MAX - 1)
kono
parents:
diff changeset
22 #define ULONG_MAX (LONG_MAX * 2LU + 1)
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 #define PTRDIFF_MAX __PTRDIFF_MAX__
kono
parents:
diff changeset
25 #define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
kono
parents:
diff changeset
26 #define SIZE_MAX __SIZE_MAX__
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 #define ALLOC_MAX 12
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 typedef __PTRDIFF_TYPE__ ptrdiff_t;
kono
parents:
diff changeset
31 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 #define CONCAT(a, b) a ## b
kono
parents:
diff changeset
34 #define CAT(a, b) CONCAT (a, b)
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 /* Macro to generate a unique function to test the anti-range
kono
parents:
diff changeset
37 ~[MIN, MAX] for type T. */
kono
parents:
diff changeset
38 #define TEST(T, min, max) \
kono
parents:
diff changeset
39 void* CAT (test_anti_range_, __LINE__)(T n) \
kono
parents:
diff changeset
40 { \
kono
parents:
diff changeset
41 extern void* CAT (alloc_anti_range_, __LINE__)(T) \
kono
parents:
diff changeset
42 __attribute__ ((alloc_size (1))); \
kono
parents:
diff changeset
43 if (min <= n && n <= max) \
kono
parents:
diff changeset
44 n = min - 1; \
kono
parents:
diff changeset
45 return CAT (alloc_anti_range_, __LINE__)(n); \
kono
parents:
diff changeset
46 } typedef void dummy /* Require a semicolon. */
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 /* The following tests fail because of missing range information. The xfail
kono
parents:
diff changeset
49 exclusions are PR79356. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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*-*-* ia64-*-* mips*-*-* powerpc*-*-* sparc*-*-* s390*-*-* visium-*-* } } } } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
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-*-* ia64-*-* mips*-*-* powerpc*-*-* sparc*-*-* s390x-*-* visium-*-* } } } } */
111
kono
parents:
diff changeset
52 TEST (int, INT_MIN + 2, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
53 TEST (int, -3, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
54 TEST (int, -2, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
55 TEST (int, -1, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
56 TEST (int, 0, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
57 TEST (int, 1, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
58 TEST (int, 1, INT_MAX - 1); /* { dg-warning "argument 1 range \\\[\[0-9\]+, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 /* The following two aren't necessarily anti-ranges. */
kono
parents:
diff changeset
61 TEST (int, 1, INT_MAX); /* { dg-warning "argument 1 range \\\[-\[0-9\]+, 0\\\] is negative" } */
kono
parents:
diff changeset
62 TEST (int, 0, INT_MAX); /* { dg-warning "argument 1 range \\\[-\[0-9\]+, -1\\\] is negative" } */
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 TEST (long, LONG_MIN + 2, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
65 TEST (ptrdiff_t, PTRDIFF_MIN + 2, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 TEST (unsigned, 0, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
68 TEST (unsigned long, 0, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */
kono
parents:
diff changeset
69 TEST (size_t, 0, ALLOC_MAX); /* { dg-warning "argument 1 range \\\[13, \[0-9\]+\\\] exceeds maximum object size 12" } */