#   Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1999
#   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

# This file was written by Rob Savoye. (rob@cygnus.com)

if $tracelevel {
    strace $tracelevel
}

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

set testfile whatis
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info ${binfile}] {
    return -1;
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $binfile

# Define a procedure to set up an xfail for all targets that put out a
# `long' type as an `int' type.
# Sun/Ultrix cc have this problem.
# It was said that COFF targets can not distinguish int from long either.

proc setup_xfail_on_long_vs_int {} {
    global gcc_compiled

    if {!$gcc_compiled} {
	setup_xfail "*-sun-sunos4*" "*-*-ultrix*" "i*86-sequent-bsd*"
    }
}

#
# Test whatis command with basic C types
#
# The name printed now (as of 23 May 1993) is whatever name the compiler
# uses in the stabs.  So we need to deal with names both from gcc and
# native compilers.
#

gdb_test "whatis v_char" \
    "type = (unsigned char|char)" \
    "whatis char"

# If we did not use the signed keyword when compiling the file, don't
# expect GDB to know that char is signed.
if { $hp_cc_compiler || $hp_aCC_compiler } {
    set signed_keyword_not_used 1
}
if $signed_keyword_not_used then {
    set signed_char "char"
} else {
    set signed_char "signed char"
}
setup_xfail "a29k-*-*"
if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
gdb_test "whatis v_signed_char" \
    "type = $signed_char" \
    "whatis signed char"

gdb_test "whatis v_unsigned_char" \
    "type = unsigned char" \
    "whatis unsigned char"

gdb_test "whatis v_short" \
    "type = (short|short int)" \
    "whatis short"

gdb_test "whatis v_signed_short" \
    "type = (short|short int|signed short|signed short int)" \
    "whatis signed short"

gdb_test "whatis v_unsigned_short" \
    "type = (unsigned short|short unsigned int)" \
    "whatis unsigned short" 

gdb_test "whatis v_int" \
    "type = int" \
    "whatis int"

gdb_test "whatis v_signed_int" \
    "type = (signed |)int" \
    "whatis signed int"

gdb_test "whatis v_unsigned_int" \
    "type = unsigned int" \
    "whatis unsigned int"

setup_xfail_on_long_vs_int
# AIX xlc gets this wrong and unsigned long right.  Go figure.
if {!$gcc_compiled} then {setup_xfail "rs6000-*-aix*"}
gdb_test "whatis v_long" \
    "type = (long|long int)" \
    "whatis long"

setup_xfail_on_long_vs_int
# AIX xlc gets this wrong and unsigned long right.  Go figure.
if {!$gcc_compiled} then {setup_xfail "rs6000-*-aix*"}
gdb_test "whatis v_signed_long" \
    "type = (signed |)(long|long int)" \
    "whatis signed long"

setup_xfail_on_long_vs_int
gdb_test "whatis v_unsigned_long" \
    "type = (unsigned long|long unsigned int)" \
    "whatis unsigned long"

gdb_test "whatis v_float" \
    "type = float" \
    "whatis float"

gdb_test "whatis v_double" \
    "type = double" \
    "whatis double"


# test whatis command with arrays
#
# We already tested whether char prints as "char", so here we accept
# "unsigned char", "signed char", and other perversions.  No need for more
# than one xfail for the same thing.
gdb_test "whatis v_char_array" \
    "type = (signed |unsigned |)char \\\[2\\\]" \
    "whatis char array"

gdb_test "whatis v_signed_char_array" \
    "type = (signed |unsigned |)char \\\[2\\\]" \
    "whatis signed char array"

gdb_test "whatis v_unsigned_char_array" \
    "type = unsigned char \\\[2\\\]" \
    "whatis unsigned char array"

gdb_test "whatis v_short_array" \
    "type = (short|short int) \\\[2\\\]" \
    "whatis short array"

gdb_test "whatis v_signed_short_array" \
    "type = (signed |)(short|short int) \\\[2\\\]" \
    "whatis signed short array"

gdb_test "whatis v_unsigned_short_array" \
    "type = (unsigned short|short unsigned int) \\\[2\\\]" \
    "whatis unsigned short array"

gdb_test "whatis v_int_array" \
    "type = int \\\[2\\\]" \
    "whatis int array"

gdb_test "whatis v_signed_int_array" \
    "type = (signed |)int \\\[2\\\]" \
    "whatis signed int array"

gdb_test "whatis v_unsigned_int_array" \
    "type = unsigned int \\\[2\\\]" \
    "whatis unsigned int array"

# We already tested whether long prints as long, so here we accept int
# No need for more than one xfail for the same thing.
gdb_test "whatis v_long_array" \
    "type = (int|long|long int) \\\[2\\\]" \
    "whatis long array"

gdb_test "whatis v_signed_long_array" \
    "type = (signed |)(int|long|long int) \\\[2\\\]" \
    "whatis signed long array"

gdb_test "whatis v_unsigned_long_array" \
    "type = (unsigned (int|long|long int)|long unsigned int) \\\[2\\\]" \
    "whatis unsigned long array"

gdb_test "whatis v_float_array" \
    "type = float \\\[2\\\]" \
    "whatis float array"

gdb_test "whatis v_double_array" \
    "type = double \\\[2\\\]" \
    "whatis double array"


# test whatis command with pointers
#
# We already tested whether char prints as char, so accept various perversions
# here.  We especially want to make sure we test that it doesn't print as
# caddr_t.
gdb_test "whatis v_char_pointer" \
    "type = (unsigned |signed |)char \\*" \
    "whatis char pointer"

gdb_test "whatis v_signed_char_pointer" \
    "type = (unsigned |signed |)char \\*" \
    "whatis signed char pointer"

gdb_test "whatis v_unsigned_char_pointer" \
    "type = unsigned char \\*" \
    "whatis unsigned char pointer"

gdb_test "whatis v_short_pointer" \
    "type = (short|short int) \\*" \
    "whatis short pointer"

gdb_test "whatis v_signed_short_pointer" \
    "type = (signed |)(short|short int) \\*" \
    "whatis signed short pointer"

gdb_test "whatis v_unsigned_short_pointer" \
    "type = (unsigned short|short unsigned int) \\*" \
    "whatis unsigned short pointer"

gdb_test "whatis v_int_pointer" \
    "type = int \\*" \
    "whatis int pointer"

gdb_test "whatis v_signed_int_pointer" \
    "type = (signed |)int \\*" \
    "whatis signed int pointer"

gdb_test "whatis v_unsigned_int_pointer" \
    "type = unsigned int \\*" \
    "whatis unsigned int pointer"

# We already tested whether long prints as long, so here we accept int
gdb_test "whatis v_long_pointer" \
    "type = (long|int|long int) \\*" \
    "whatis long pointer"

gdb_test "whatis v_signed_long_pointer" \
    "type = (signed |)(long|int|long int) \\*" \
    "whatis signed long pointer"

gdb_test "whatis v_unsigned_long_pointer" \
    "type = (unsigned (int|long|long int)|long unsigned int) \\*" \
    "whatis unsigned long pointer"

gdb_test "whatis v_float_pointer" \
    "type = float \\*" \
    "whatis float pointer"

gdb_test "whatis v_double_pointer" \
    "type = double \\*" \
    "whatis double pointer"


if { $hp_aCC_compiler } {
    set unstruct "unnamed\.struct\..*"
    set ununion "unnamed\.union\..*"
} else {
    set unstruct "\.\.\."
    set ununion "\.\.\."
}

# test whatis command with structure types
gdb_test "whatis v_struct1" \
    "type = struct t_struct" \
    "whatis named structure"

gdb_test "whatis v_struct2" \
    "type = struct \{$unstruct\}" \
    "whatis unnamed structure"


# test whatis command with union types
gdb_test "whatis v_union" \
    "type = union t_union" \
    "whatis named union"

gdb_test "whatis v_union2" \
    "type = union \{$ununion\}" \
    "whatis unnamed union"


if { [istarget "hppa*-hp-hpux*"] && $hp_aCC_compiler } {
    # HP-UX: HP aCC compiler w/ +objdebug option detects language as
    # c++, so we need the 'void' pattern here.
    # Without +objdebug compilation option we still need to match ''.
    # - guo
    set void "(void|)"
} else {
    set void ""
}

# test whatis command with functions return type
gdb_test "whatis v_char_func" \
    "type = (signed |unsigned |)char \\($void\\)" \
    "whatis char function"

gdb_test "whatis v_signed_char_func" \
    "type = (signed |unsigned |)char \\($void\\)" \
    "whatis signed char function"

gdb_test "whatis v_unsigned_char_func" \
    "type = unsigned char \\($void\\)"	\
    "whatis unsigned char function"

gdb_test "whatis v_short_func" \
    "type = short (int |)\\($void\\)" \
    "whatis short function"

gdb_test "whatis v_signed_short_func" \
    "type = (signed |)short (int |)\\($void\\)" \
    "whatis signed short function"

gdb_test "whatis v_unsigned_short_func" \
    "type = (unsigned short|short unsigned int) \\($void\\)" \
    "whatis unsigned short function"

gdb_test "whatis v_int_func" \
    "type = int \\($void\\)" \
    "whatis int function"

gdb_test "whatis v_signed_int_func" \
    "type = (signed |)int \\($void\\)" \
    "whatis signed int function"

gdb_test "whatis v_unsigned_int_func" \
    "type = unsigned int \\($void\\)" \
    "whatis unsigned int function"

gdb_test "whatis v_long_func" \
    "type = (long|int|long int) \\($void\\)" \
    "whatis long function"

gdb_test "whatis v_signed_long_func" \
    "type = (signed |)(int|long|long int) \\($void\\)" \
    "whatis signed long function"

gdb_test "whatis v_unsigned_long_func" \
    "type = (unsigned (int|long|long int)|long unsigned int) \\($void\\)" \
    "whatis unsigned long function"

# Sun /bin/cc calls this a function returning double.
if {!$gcc_compiled} then {setup_xfail "*-sun-sunos4*"}
gdb_test "whatis v_float_func" \
    "type = float \\($void\\)" \
    "whatis float function"

gdb_test "whatis v_double_func" \
    "type = double \\($void\\)" \
    "whatis double function" \


# test whatis command with some misc complicated types
gdb_test "whatis s_link" \
    "type = struct link \\*" \
    "whatis complicated structure"

gdb_test "whatis u_link" \
    "type = union tu_link" \
    "whatis complicated union"


# test whatis command with enumerations
gdb_test "whatis clunker" \
    "type = enum cars" \
    "whatis enumeration"


# test whatis command with nested struct and union
gdb_test "whatis nested_su" \
    "type = struct outer_struct" \
    "whatis outer structure"

gdb_test "whatis nested_su.outer_int" \
    "type = int" \
    "whatis outer structure member"

if {$hp_aCC_compiler} {
    set outer "outer_struct::"
} else {
    set outer ""
}

gdb_test "whatis nested_su.inner_struct_instance" \
    "type = struct ${outer}inner_struct" \
    "whatis inner structure"

gdb_test "whatis nested_su.inner_struct_instance.inner_int" \
    "type = int" \
    "whatis inner structure member"

gdb_test "whatis nested_su.inner_union_instance" \
    "type = union ${outer}inner_union" \
    "whatis inner union"

gdb_test "whatis nested_su.inner_union_instance.inner_union_int" \
    "type = int" \
    "whatis inner union member"
