| /* This testcase is part of GDB, the GNU debugger. |
| |
| Copyright 2014-2021 Free Software Foundation, Inc. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| #include <stddef.h> |
| #define SIZE 5 |
| |
| struct foo |
| { |
| int a; |
| }; |
| |
| typedef struct bar |
| { |
| int x; |
| struct foo y; |
| } BAR; |
| |
| void |
| vla_factory (int n) |
| { |
| int int_vla[n]; |
| unsigned int unsigned_int_vla[n]; |
| double double_vla[n]; |
| float float_vla[n]; |
| long long_vla[n]; |
| unsigned long unsigned_long_vla[n]; |
| char char_vla[n]; |
| short short_vla[n]; |
| unsigned short unsigned_short_vla[n]; |
| unsigned char unsigned_char_vla[n]; |
| struct foo foo_vla[n]; |
| BAR bar_vla[n]; |
| int i; |
| |
| for (i = 0; i < n; i++) |
| { |
| int_vla[i] = i*2; |
| unsigned_int_vla[i] = i*2; |
| double_vla[i] = i/2.0; |
| float_vla[i] = i/2.0f; |
| long_vla[i] = i*2; |
| unsigned_long_vla[i] = i*2; |
| char_vla[i] = 'A'; |
| short_vla[i] = i*2; |
| unsigned_short_vla[i] = i*2; |
| unsigned_char_vla[i] = 'A'; |
| foo_vla[i].a = i*2; |
| bar_vla[i].x = i*2; |
| bar_vla[i].y.a = i*2; |
| } |
| |
| size_t int_size = sizeof(int_vla); /* vlas_filled */ |
| size_t uint_size = sizeof(unsigned_int_vla); |
| size_t double_size = sizeof(double_vla); |
| size_t float_size = sizeof(float_vla); |
| size_t long_size = sizeof(long_vla); |
| size_t char_size = sizeof(char_vla); |
| size_t short_size = sizeof(short_vla); |
| size_t ushort_size = sizeof(unsigned_short_vla); |
| size_t uchar_size = sizeof(unsigned_char_vla); |
| size_t foo_size = sizeof(foo_vla); |
| size_t bar_size = sizeof(bar_vla); |
| |
| return; /* break_end_of_vla_factory */ |
| } |
| |
| int |
| main (void) |
| { |
| vla_factory(SIZE); |
| return 0; |
| } |