#   Copyright (C) 2001, 2007, 2008, 2009, 2010 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/>.

# Written by Michael Snyder, Red Hat, Inc., 9/20/2001

# This file is part of the gdb testsuite
# Tests for type expressions using the new "@code" and "@data" modifiers.

if $tracelevel then {
        strace $tracelevel
        }

#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile "cvexpr"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested code-expr.exp
     return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

if [target_info exists gdb_stub] {
    gdb_step_for_stub;
}

gdb_test "set print sevenbit-strings" "" ""
gdb_test "set print address off" "" ""
gdb_test "set width 0" "" ""

set ws  "\[ \t\]*"

#
# Test casting a scalar to const
#

gdb_test "whatis (@code char) v_char" \
	"type = @code char" \
	"(@code char)"
gdb_test "whatis (@code signed char) v_signed_char" \
	"type = @code signed char" \
	"(@code signed char)"
gdb_test "whatis (@code unsigned char) v_unsigned_char" \
	"type = @code (unsigned char|char)" \
	"(@code unsigned char)"
gdb_test "whatis (@code short) v_short" \
	"type = @code (short|short int)" \
	"(@code short)"
gdb_test "whatis (@code signed short) v_signed_short" \
	"type = @code (short|short int|signed short|signed short int)" \
	"(@code signed short)"
gdb_test "whatis (@code unsigned short) v_unsigned_short" \
	"type = @code (unsigned short|short unsigned int)" \
	"(@code unsigned short)"
gdb_test "whatis (@code int) v_int" \
	"type = @code int" \
	"(@code int)"
gdb_test "whatis (@code signed int) v_signed_int" \
	"type = @code (signed int|int)" \
	"(@code signed int)"
gdb_test "whatis (@code unsigned int) v_unsigned_int" \
	"type = @code unsigned int" \
	"(@code unsigned int)"
gdb_test "whatis (@code long) v_long" \
	"type = @code (long|long int)" \
	"(@code long)"
gdb_test "whatis (@code signed long) v_signed_long" \
	"type = @code (signed |)long( int|)" \
	"(@code signed long)"
gdb_test "whatis (@code unsigned long) v_unsigned_long" \
	"type = @code (unsigned long|long unsigned int)" \
	"(@code unsigned long)"
gdb_test "whatis (@code long long) v_long_long" \
	"type = @code long long( int|)" \
	"(@code long long)"
gdb_test "whatis (@code signed long long) v_signed_long_long" \
	"type = @code (signed |)long long( int|)" \
	"(@code signed long long)"
gdb_test "whatis (@code unsigned long long) v_unsigned_long_long" \
	"type = @code (unsigned long long|long long unsigned int)" \
	"(@code unsigned long long)"
gdb_test "whatis (@code float) v_float" \
	"type = @code float" \
	"(@code float)"
gdb_test "whatis (@code double) v_double" \
	"type = @code double" \
	"(@code double)"

#
# Test casting a scalar to @data
#

gdb_test "whatis (@data char) v_char" \
	"type = @data char" \
	"(@data char)"
gdb_test "whatis (@data signed char) v_signed_char" \
	"type = @data signed char" \
	"(@data signed char)"
gdb_test "whatis (@data unsigned char) v_unsigned_char" \
	"type = @data (unsigned char|char)" \
	"(@data unsigned char)"
gdb_test "whatis (@data short) v_short" \
	"type = @data (short|short int)" \
	"(@data short)"
gdb_test "whatis (@data signed short) v_signed_short" \
	"type = @data (short|short int|signed short|signed short int)" \
	"(@data signed short)"
gdb_test "whatis (@data unsigned short) v_unsigned_short" \
	"type = @data (unsigned short|short unsigned int)" \
	"(@data unsigned short)"
gdb_test "whatis (@data int) v_int" \
	"type = @data int" \
	"(@data int)"
gdb_test "whatis (@data signed int) v_signed_int" \
	"type = @data (signed int|int)" \
	"(@data signed int)"
gdb_test "whatis (@data unsigned int) v_unsigned_int" \
	"type = @data unsigned int" \
	"(@data unsigned int)"
gdb_test "whatis (@data long) v_long" \
	"type = @data (long|long int)" \
	"(@data long)"
gdb_test "whatis (@data signed long) v_signed_long" \
	"type = @data (signed |)long( int|)" \
	"(@data signed long)"
gdb_test "whatis (@data unsigned long) v_unsigned_long" \
	"type = @data (unsigned long|long unsigned int)" \
	"(@data unsigned long)"
gdb_test "whatis (@data long long) v_long_long" \
	"type = @data long long( int|)" \
	"(@data long long)"
gdb_test "whatis (@data signed long long) v_signed_long_long" \
	"type = @data (signed |)long long( int|)" \
	"(@data signed long long)"
gdb_test "whatis (@data unsigned long long) v_unsigned_long_long" \
	"type = @data (unsigned long long|long long unsigned int)" \
	"(@data unsigned long long)"
gdb_test "whatis (@data float) v_float" \
	"type = @data float" \
	"(@data float)"
gdb_test "whatis (@data double) v_double" \
	"type = @data double" \
	"(@data double)"

#
# Now put the '@code' and '@data' keywords after the base type.
#

gdb_test "whatis (char @code) v_char" \
	"type = @code char" \
	"(char @code)"
gdb_test "whatis (signed char @code) v_signed_char" \
	"type = @code signed char" \
	"(signed char @code)"
gdb_test "whatis (unsigned char @code) v_unsigned_char" \
	"type = @code (unsigned char|char)" \
	"(unsigned char @code)"
gdb_test "whatis (short @code) v_short" \
	"type = @code (short|short int)" \
	"(short @code)"
gdb_test "whatis (signed short @code) v_signed_short" \
	"type = @code (short|short int|signed short|signed short int)" \
	"(signed short @code)"
gdb_test "whatis (unsigned short @code) v_unsigned_short" \
	"type = @code (unsigned short|short unsigned int)" \
	"(unsigned short @code)"
gdb_test "whatis (int @code) v_int" \
	"type = @code int" \
	"(int @code)"
gdb_test "whatis (signed int @code) v_signed_int" \
	"type = @code (signed int|int)" \
	"(signed int @code)"
gdb_test "whatis (unsigned int @code) v_unsigned_int" \
	"type = @code unsigned int" \
	"(unsigned int @code)"
gdb_test "whatis (long @code) v_long" \
	"type = @code (long|long int)" \
	"(long @code)"
gdb_test "whatis (signed long @code) v_signed_long" \
	"type = @code (signed |)long( int|)" \
	"(signed long @code)"
gdb_test "whatis (unsigned long @code) v_unsigned_long" \
	"type = @code (unsigned long|long unsigned int)" \
	"(unsigned long @code)"
gdb_test "whatis (long long @code) v_long_long" \
	"type = @code long long( int|)" \
	"(long long @code)"
gdb_test "whatis (signed long long @code) v_signed_long_long" \
	"type = @code (signed |)long long( int|)" \
	"(signed long long @code)"
gdb_test "whatis (unsigned long long @code) v_unsigned_long_long" \
	"type = @code (unsigned long long|long long unsigned int)" \
	"(unsigned long long @code)"
gdb_test "whatis (float @code) v_float" \
	"type = @code float" \
	"(float @code)"
gdb_test "whatis (double @code) v_double" \
	"type = @code double" \
	"(double @code)"

gdb_test "whatis (char @data) v_char" \
	"type = @data char" \
	"(char @data)"
gdb_test "whatis (signed char @data) v_signed_char" \
	"type = @data signed char" \
	"(signed char @data)"
gdb_test "whatis (unsigned char @data) v_unsigned_char" \
	"type = @data (unsigned char|char)" \
	"(unsigned char @data)"
gdb_test "whatis (short @data) v_short" \
	"type = @data (short|short int)" \
	"(short @data)"
gdb_test "whatis (signed short @data) v_signed_short" \
	"type = @data (short|short int|signed short|signed short int)" \
	"(signed short @data)"
gdb_test "whatis (unsigned short @data) v_unsigned_short" \
	"type = @data (unsigned short|short unsigned int)" \
	"(unsigned short @data)"
gdb_test "whatis (int @data) v_int" \
	"type = @data int" \
	"(int @data)"
gdb_test "whatis (signed int @data) v_signed_int" \
	"type = @data (signed int|int)" \
	"(signed int @data)"
gdb_test "whatis (unsigned int @data) v_unsigned_int" \
	"type = @data unsigned int" \
	"(unsigned int @data)"
gdb_test "whatis (long @data) v_long" \
	"type = @data (long|long int)" \
	"(long @data)"
gdb_test "whatis (signed long @data) v_signed_long" \
	"type = @data (signed |)long( int|)" \
	"(signed long @data)"
gdb_test "whatis (unsigned long @data) v_unsigned_long" \
	"type = @data (unsigned long|long unsigned int)" \
	"(unsigned long @data)"
gdb_test "whatis (long long @data) v_long_long" \
	"type = @data long long( int|)" \
	"(long long @data)"
gdb_test "whatis (signed long long @data) v_signed_long_long" \
	"type = @data (signed |)long long( int|)" \
	"(signed long long @data)"
gdb_test "whatis (unsigned long long @data) v_unsigned_long_long" \
	"type = @data (unsigned long long|long long unsigned int)" \
	"(unsigned long long @data)"
gdb_test "whatis (float @data) v_float" \
	"type = @data float" \
	"(float @data)"
gdb_test "whatis (double @data) v_double" \
	"type = @data double" \
	"(double @data)"

#
# enums
#

gdb_test "whatis (@code enum misordered) v_misordered" \
	"type = @code enum misordered" \
	"(@code enum misordered)"
gdb_test "whatis (enum misordered @code) v_misordered" \
	"type = @code enum misordered" \
	"(enum misordered @code)"
gdb_test "whatis (@data enum misordered) v_misordered" \
	"type = @data enum misordered" \
	"(@data enum misordered)"
gdb_test "whatis (enum misordered @data) v_misordered" \
	"type = @data enum misordered" \
	"(enum misordered @data)"

# 
# Pointers
#

gdb_test "whatis (@code int *) v_int_pointer" \
	"type = @code int${ws}\\*" \
	"(@code int *)"
gdb_test "whatis (int @code *) v_int_pointer" \
	"type = @code int${ws}\\*" \
	"(int @code *)"
gdb_test "whatis (int * @code) v_int_pointer" \
	"type = int \\*${ws}@code" \
	"(int * @code)"
gdb_test "whatis (@code int * @code) v_int_pointer" \
	"type = @code int${ws}\\*${ws}@code" \
	"(@code int * @code)"
gdb_test "whatis (int @code * @code) v_int_pointer" \
	"type = @code int${ws}\\*${ws}@code" \
	"(int @code * @code)"

gdb_test "whatis (@code int **) v_int_pointer_pointer" \
	"type = @code int${ws}\\*${ws}\\*" \
	"(@code int **)"
gdb_test "whatis (int @code **) v_int_pointer_pointer" \
	"type = @code int${ws}\\*${ws}\\*" \
	"(int @code **)"
gdb_test "whatis (int ** @code) v_int_pointer_pointer" \
	"type = int \\*${ws}\\*${ws}@code" \
	"(int ** @code)"
gdb_test "whatis (@code int * @code *) v_int_pointer_pointer" \
	"type = @code int${ws}\\*${ws}@code${ws}\\*" \
	"(@code int * @code *)"
gdb_test "whatis (int @code * @code *) v_int_pointer_pointer" \
	"type = @code int${ws}\\*${ws}@code${ws}\\*" \
	"(int @code * @code *)"
gdb_test "whatis (@code int * @code * @code) v_int_pointer_pointer" \
	"type = @code int${ws}\\*${ws}@code${ws}\\*${ws}@code" \
	"(@code int * @code * @code)"
gdb_test "whatis (int @code * @code * @code) v_int_pointer_pointer" \
	"type = @code int${ws}\\*${ws}@code${ws}\\*${ws}@code" \
	"(int @code * @code * @code)"

#
# Arrays TODO
#

#
# Pointers to arrays, arrays of pointers TODO
#

#
# Structs and Unions
#

gdb_test "whatis (@code struct t_struct) v_struct1" \
	"type = @code struct t_struct" \
	"(@code struct t_struct)"
gdb_test "whatis (@code union t_union) v_union" \
	"type = @code union t_union" \
	"(@code union t_union)"
gdb_test "whatis (struct t_struct @code) v_struct1" \
	"type = @code struct t_struct" \
	"(struct t_struct @code)"
gdb_test "whatis (union t_union @code) v_union" \
	"type = @code union t_union" \
	"(union t_union @code)"
gdb_test "whatis (@code struct t_struct *) &v_struct1" \
	"type = @code struct t_struct${ws}\\*" \
	"(@code struct t_struct *)"
gdb_test "whatis (@code union t_union *) &v_union" \
	"type = @code union t_union${ws}\\*" \
	"(@code union t_union *)"
gdb_test "whatis (struct t_struct @code *) &v_struct1" \
	"type = @code struct t_struct${ws}\\*" \
	"(struct t_struct @code *)"
gdb_test "whatis (union t_union @code *) &v_union" \
	"type = @code union t_union${ws}\\*" \
	"(union t_union @code *)"
gdb_test "whatis (struct t_struct * @code) &v_struct1" \
	"type = struct t_struct${ws}\\*${ws}@code" \
	"(struct t_struct * @code)"
gdb_test "whatis (union t_union * @code) &v_union" \
	"type = union t_union${ws}\\*${ws}@code" \
	"(union t_union * @code)"
gdb_test "whatis (@code struct t_struct * @code) &v_struct1" \
	"type = @code struct t_struct${ws}\\*${ws}@code" \
	"(@code struct t_struct * @code)"
gdb_test "whatis (@code union t_union * @code) &v_union" \
	"type = @code union t_union${ws}\\*${ws}@code" \
	"(@code union t_union * @code)"
gdb_test "whatis (struct t_struct @code * @code) &v_struct1" \
	"type = @code struct t_struct${ws}\\*${ws}@code" \
	"(struct t_struct @code * @code)"
gdb_test "whatis (union t_union @code * @code) &v_union" \
	"type = @code union t_union${ws}\\*${ws}@code" \
	"(union t_union @code * @code)"

#
# Function pointers TODO
#

