# Copyright 1988-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 <http://www.gnu.org/licenses/>.

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

#
# test running programs
#

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

standard_testfile .c

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $exec_opts] != "" } {
     untested "failed to compile"
     return -1
}

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

# Start with a fresh gdb.

clean_restart $binfile

# Define a procedure to set up an xfail for all targets that put out a
# `long' type as an `int' type.
# Sun cc has 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*" "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"

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"


# 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 \{\.\.\.\}" \
    "whatis unnamed structure"

gdb_test "whatis &v_struct1" \
    "type = struct t_struct \\*"

gdb_test "whatis &v_struct2" \
    "type = struct {\\.\\.\\.} \\*"

gdb_test "whatis v_struct_ptr1" \
    "type = struct t_struct \\*"

gdb_test "whatis v_struct_ptr2" \
    "type = struct {\\.\\.\\.} \\*"

gdb_test "whatis &v_struct_ptr1" \
    "type = struct t_struct \\*\\*"

gdb_test "whatis &v_struct_ptr2" \
    "type = struct {\\.\\.\\.} \\*\\*"

gdb_test "whatis v_struct1.v_char_member" \
    "type = char"

gdb_test "whatis v_struct2.v_char_member" \
    "type = char"

gdb_test "whatis v_struct_ptr1->v_char_member" \
    "type = char"

gdb_test "whatis v_struct_ptr2->v_char_member" \
    "type = char"

gdb_test "whatis &(v_struct1.v_char_member)" \
    "type = char \\*"

gdb_test "whatis &(v_struct2.v_char_member)" \
    "type = char \\*"

gdb_test "whatis &(v_struct_ptr1->v_char_member)" \
    "type = char \\*"

gdb_test "whatis &(v_struct_ptr2->v_char_member)" \
    "type = char \\*"

# 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 \{\.\.\.\}" \
    "whatis unnamed union"

gdb_test "whatis &v_union" \
    "type = union t_union \\*"

gdb_test "whatis &v_union2" \
    "type = union {\\.\\.\\.} \\*"

gdb_test "whatis v_union_ptr" \
    "type = union t_union \\*"

gdb_test "whatis v_union_ptr2" \
    "type = union {\\.\\.\\.} \\*"

gdb_test "whatis &v_union_ptr" \
    "type = union t_union \\*\\*"

gdb_test "whatis &v_union_ptr2" \
    "type = union {\\.\\.\\.} \\*\\*"

gdb_test "whatis v_union.v_char_member" \
    "type = char"

gdb_test "whatis v_union2.v_char_member" \
    "type = char"

gdb_test "whatis v_union_ptr->v_char_member" \
    "type = char"

gdb_test "whatis v_union_ptr2->v_char_member" \
    "type = char"

gdb_test "whatis &(v_union.v_char_member)" \
    "type = char \\*"

gdb_test "whatis &(v_union2.v_char_member)" \
    "type = char \\*"

gdb_test "whatis &(v_union_ptr->v_char_member)" \
    "type = char \\*"

gdb_test "whatis &(v_union_ptr2->v_char_member)" \
    "type = char \\*"


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

gdb_test "whatis nested_su.inner_struct_instance" \
    "type = struct 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 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"

# Regression tests for PR 9514.

gdb_test "whatis void (**)()" \
  "type = void \\(\\*\\*\\)\\(\\)" \
  "whatis applied to pointer to pointer to function"

gdb_test "whatis void (** const)()" \
  "type = void \\(\\*\\* const\\)\\(\\)" \
  "whatis applied to const pointer to pointer to function"

gdb_test "whatis void (* const *)()" \
  "type = void \\(\\* const \\*\\)\\(\\)" \
  "whatis applied to pointer to const pointer to function"

gdb_test "whatis int *(*)()" \
    "type = int \\*\\(\\*\\)\\(\\)" \
    "whatis applied to pointer to function returning pointer to int"

gdb_test "whatis int *(**)()" \
    "type = int \\*\\(\\*\\*\\)\\(\\)" \
    "whatis applied to pointer to pointer to function returning pointer to int"

gdb_test "whatis char (*(*)())\[23\]" \
    "type = char \\(\\*\\(\\*\\)\\(\\)\\)\\\[23\\\]" \
    "whatis applied to pointer to function returning pointer to array"

gdb_test "whatis int (*)(int, int)" \
    "type = int \\(\\*\\)\\(int, int\\)" \
    "whatis applied to pointer to function taking int,int and returning int"

gdb_test "whatis int (*)(const int *, ...)" \
    "type = int \\(\\*\\)\\(const int \\*, \\.\\.\\.\\)" \
    "whatis applied to pointer to function taking const int ptr and varargs and returning int"

gdb_test "whatis int (*)(void, int, int)" \
    "parameter types following 'void'" \
    "whatis applied to function with types trailing 'void'"

gdb_test "whatis int (*)(int, void, int)" \
    "'void' invalid as parameter type" \
    "whatis applied to function with 'void' parameter type"
