/* This testcase is part of GDB, the GNU debugger. Copyright 2014-2017 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 . */ #include #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; struct vla_struct { int something; int vla_field[n]; } vla_struct_object; struct inner_vla_struct { int something; int vla_field[n]; int after; } inner_vla_struct_object; union vla_union { int vla_field[n]; } vla_union_object; vla_struct_object.something = n; inner_vla_struct_object.something = n; inner_vla_struct_object.after = n; 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; vla_struct_object.vla_field[i] = i*2; vla_union_object.vla_field[i] = i*2; inner_vla_struct_object.vla_field[i] = 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); size_t vla_struct_object_size = sizeof(vla_struct_object); size_t vla_union_object_size = sizeof(vla_union_object); size_t inner_vla_struct_object_size = sizeof(inner_vla_struct_object); return; /* break_end_of_vla_factory */ } int main (void) { vla_factory(SIZE); return 0; }