From 4749e309f25b02a736f4111af71034801c10f6e9 Mon Sep 17 00:00:00 2001 From: Michael Snyder Date: Thu, 15 Nov 2001 02:16:59 +0000 Subject: 2001-11-13 Michael Snyder * gdb.base/cvexpr.c, gdb.base/cvexpr.exp: New files. Tests for expressions using 'const' and 'volatile'. --- gdb/testsuite/gdb.base/cvexpr.c | 280 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 gdb/testsuite/gdb.base/cvexpr.c (limited to 'gdb/testsuite/gdb.base/cvexpr.c') diff --git a/gdb/testsuite/gdb.base/cvexpr.c b/gdb/testsuite/gdb.base/cvexpr.c new file mode 100644 index 0000000..176bbe9 --- /dev/null +++ b/gdb/testsuite/gdb.base/cvexpr.c @@ -0,0 +1,280 @@ +/* Copyright (C) 2001 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 2 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Please email any bugs, comments, and/or additions to this file to: + bug-gdb@prep.ai.mit.edu */ + + +/* + * Initial set of typed variables borrowed from ptype.c + */ + +#if !defined (__STDC__) && !defined (_AIX) +#define signed /**/ +#endif + +char v_char; +signed char v_signed_char; +unsigned char v_unsigned_char; + +short v_short; +signed short v_signed_short; +unsigned short v_unsigned_short; + +int v_int; +signed int v_signed_int; +unsigned int v_unsigned_int; + +long v_long; +signed long v_signed_long; +unsigned long v_unsigned_long; + +long long v_long_long; +signed long long v_signed_long_long; +unsigned long long v_unsigned_long_long; + +float v_float; +double v_double; + +/* + * Now some derived types, which are arrays, functions-returning, + * pointers, structures, unions, and enumerations. + */ + +/**** arrays *******/ + +char v_char_array[2]; +signed char v_signed_char_array[2]; +unsigned char v_unsigned_char_array[2]; + +short v_short_array[2]; +signed short v_signed_short_array[2]; +unsigned short v_unsigned_short_array[2]; + +int v_int_array[2]; +signed int v_signed_int_array[2]; +unsigned int v_unsigned_int_array[2]; + +long v_long_array[2]; +signed long v_signed_long_array[2]; +unsigned long v_unsigned_long_array[2]; + +float v_float_array[2]; +double v_double_array[2]; + +/* PR 3742 */ +typedef char t_char_array[]; + +/**** pointers *******/ + +char *v_char_pointer; +signed char *v_signed_char_pointer; +unsigned char *v_unsigned_char_pointer; + +short *v_short_pointer; +signed short *v_signed_short_pointer; +unsigned short *v_unsigned_short_pointer; + +int *v_int_pointer; +signed int *v_signed_int_pointer; +unsigned int *v_unsigned_int_pointer; + +long *v_long_pointer; +signed long *v_signed_long_pointer; +unsigned long *v_unsigned_long_pointer; + +float *v_float_pointer; +double *v_double_pointer; + +char **v_char_pointer_pointer; +signed char **v_signed_char_pointer_pointer; +unsigned char **v_unsigned_char_pointer_pointer; + +short **v_short_pointer_pointer; +signed short **v_signed_short_pointer_pointer; +unsigned short **v_unsigned_short_pointer_pointer; + +int **v_int_pointer_pointer; +signed int **v_signed_int_pointer_pointer; +unsigned int **v_unsigned_int_pointer_pointer; + +long **v_long_pointer_pointer; +signed long **v_signed_long_pointer_pointer; +unsigned long **v_unsigned_long_pointer_pointer; + +float **v_float_pointer_pointer; +double **v_double_pointer_pointer; + +/**** pointers to arrays, arrays of pointers *******/ + +char *v_char_array_pointer[2]; +signed char *v_signed_char_array_pointer[2]; +unsigned char *v_unsigned_char_array_pointer[2]; + +short *v_short_array_pointer[2]; +signed short *v_signed_short_array_pointer[2]; +unsigned short *v_unsigned_short_array_pointer[2]; + +int *v_int_array_pointer[2]; +signed int *v_signed_int_array_pointer[2]; +unsigned int *v_unsigned_int_array_pointer[2]; + +long *v_long_array_pointer[2]; +signed long *v_signed_long_array_pointer[2]; +unsigned long *v_unsigned_long_array_pointer[2]; + +float *v_float_array_pointer[2]; +double *v_double_array_pointer[2]; + +char (*v_char_pointer_array)[2]; +signed char (*v_signed_char_pointer_array)[2]; +unsigned char (*v_unsigned_char_pointer_array)[2]; + +short (*v_short_pointer_array)[2]; +signed short (*v_signed_short_pointer_array)[2]; +unsigned short (*v_unsigned_short_pointer_array)[2]; + +int (*v_int_pointer_array)[2]; +signed int (*v_signed_int_pointer_array)[2]; +unsigned int (*v_unsigned_int_pointer_array)[2]; + +long (*v_long_pointer_array)[2]; +signed long (*v_signed_long_pointer_array)[2]; +unsigned long (*v_unsigned_long_pointer_array)[2]; + +float (*v_float_pointer_array)[2]; +double (*v_double_pointer_array)[2]; + + +/**** structs *******/ + +struct t_struct { + char v_char_member; + short v_short_member; + int v_int_member; + long v_long_member; + float v_float_member; + double v_double_member; +} v_struct1; + +struct t_struct *v_t_struct_p; + +struct { + char v_char_member; + short v_short_member; + int v_int_member; + long v_long_member; + float v_float_member; + double v_double_member; +} v_struct2; + +/* typedef'd struct without a tag. */ +typedef struct { + double v_double_member; + int v_int_member; +} t_struct3; +/* GCC seems to want a variable of this type, or else it won't put out + a symbol. */ +t_struct3 v_struct3; + +/**** unions *******/ + +union t_union { + char v_char_member; + short v_short_member; + int v_int_member; + long v_long_member; + float v_float_member; + double v_double_member; +} v_union; + +union { + char v_char_member; + short v_short_member; + int v_int_member; + long v_long_member; + float v_float_member; + double v_double_member; +} v_union2; + +/* typedef'd union without a tag. */ +typedef union { + double v_double_member; + int v_int_member; +} t_union3; +/* GCC seems to want a variable of this type, or else it won't put out + a symbol. */ +t_union3 v_union3; + +/**** Enumerations *******/ + +enum +/* Work around the bug for compilers which don't put out the right stabs. */ +#if __GNUC__ < 2 && !defined (_AIX) +primary1_tag +#endif +{red1, green1, blue1} primary1; + +enum {red, green, blue} primary; +enum colors {yellow, purple, pink} nonprimary; + +enum {chevy, ford} clunker; +enum cars {bmw, porsche} sportscar; + +#undef FALSE +#undef TRUE +typedef enum {FALSE, TRUE} boolean; +boolean v_boolean; +/*note: aCC has bool type predefined with 'false' and 'true'*/ +typedef enum bvals {my_false, my_true} boolean2; +boolean2 v_boolean2; + +enum misordered {two = 2, one = 1, zero = 0, three = 3}; + +/* Seems like we need a variable of this type to get the type to be put + in the executable, at least for AIX xlc. */ +enum misordered v_misordered = three; + +/**** Function pointers *******/ + +char (*v_char_func) (int, int*); +signed char (*v_signed_char_func) (int, int*); +unsigned char (*v_unsigned_char_func) (int, int*); + +short (*v_short_func) (int, int*); +signed short (*v_signed_short_func) (int, int*); +unsigned short (*v_unsigned_short_func) (int, int*); + +int (*v_int_func) (int, int*); +signed int (*v_signed_int_func) (int, int*); +unsigned int (*v_unsigned_int_func) (int, int*); + +long (*v_long_func) (int, int*); +signed long (*v_signed_long_func) (int, int*); +unsigned long (*v_unsigned_long_func) (int, int*); + +long long (*v_long_long_func) (int, int*); +signed long long (*v_signed_long_long_func) (int, int*); +unsigned long long (*v_unsigned_long_long_func) (int, int*); + +float (*v_float_func) (int, int*); +double (*v_double_func) (int, int*); + + + +int main () +{ +} -- cgit v1.1