1 /* Verify that VLA definitions with an unknown upper bound don't trigger
2 -Wvla-larger-than= warnings by default.
3 { dg-do compile }
4 { dg-require-effective-target alloca }
5 { dg-options "-O2 -Wall" } */
6
7 void f (void *, ...);
8
9 void nowarn_vla_int (int n)
10 {
11 char a[n];
12
13 if (n < 1234)
14 n = 1234;
15
16 char b[n];
17 f (a, b);
18 }
19
20 void nowarn_vla_uint (unsigned n)
21 {
22 char a[n];
23 f (a);
24
25 if (n < 2345)
26 n = 2345;
27
28 char b[n];
29 f (a, b);
30 }
31
32 void nowarn_vla_long (long n)
33 {
34 char a[n];
35
36 if (n < 1234)
37 n = 1234;
38
39 char b[n];
40 f (a, b);
41 }
42
43 void nowarn_vla_ulong (unsigned long n)
44 {
45 char a[n];
46 f (a);
47
48 if (n < 2345)
49 n = 2345;
50
51 char b[n];
52 f (a, b);
53 }
54
55 /* Verify that a VLA whose size is definitely in excess of PTRDIFF_MAX
56 is diagnosed by default. */
57
58 void warn_vla (__PTRDIFF_TYPE__ n)
59 {
60 int a[n];
61 f (a);
62
63 if (n <= __PTRDIFF_MAX__)
64 n = __PTRDIFF_MAX__;
65
66 int b[n]; /* { dg-warning "argument to variable-length array is too large" } */
67 f (a, b);
68 }