# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1999, 2002, 2003,
# 2004, 2007, 2008 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/>.

# 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

if [target_info exists no_long_long] {
    set exec_opts [list debug additional_flags=-DNO_LONG_LONG]
} else {
    set exec_opts [list debug]
}

set testfile whatis
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $exec_opts] != "" } {
     untested whatis.exp
     return -1
}

# 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 {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" }
gdb_test "whatis v_signed_char" \
    "type = (signed char|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"


if ![target_info exists no_long_long] {
    gdb_test "whatis v_unsigned_long_long" \
	"type = (unsigned long long|long long unsigned int)" \
	"whatis unsigned long 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"

if ![target_info exists no_long_long] {
    gdb_test "whatis v_unsigned_long_long_array" \
	"type = (unsigned long long|long 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"

if ![target_info exists no_long_long] {
    gdb_test "whatis v_long_long_pointer" \
	"type = long long(| int) \\*" \
	"whatis long long pointer"

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

    gdb_test "whatis v_unsigned_long_long_pointer" \
	"type = (unsigned long long|long long unsigned int) \\*" \
	"whatis unsigned long 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 struct t_struct" \
    "type = struct t_struct" \
    "whatis named structure using type name"

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 union t_union" \
    "type = union t_union" \
    "whatis named union using type name"

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


# 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
# Also, using stabs we will mark these functions as prototyped.  This
# is harmless but causes an extra VOID to be printed.
set void "(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"

if ![target_info exists no_long_long] {
    gdb_test "whatis v_long_long_func" \
	"type = long long(| int) \\($void\\)" \
	"whatis long long function"

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

    gdb_test "whatis v_unsigned_long_long_func" \
	"type = (unsigned long long(| int)|long long unsigned int) \\($void\\)" \
	"whatis unsigned long 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"

gdb_test "whatis enum cars" \
    "type = enum cars" \
    "whatis enumeration using type name"


# 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"

# test whatis command with typedefs

gdb_test "whatis char_addr" \
    "type = char \\*" \
    "whatis using typedef type name"

gdb_test "whatis a_char_addr" \
    "type = char_addr" \
    "whatis applied to variable defined by typedef"
