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

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

if $tracelevel then {
	strace $tracelevel
	}

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

set testfile "ptype"
set srcfile0 ${testfile}.c
set srcfile1 ${testfile}1.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile0}" "${binfile}0.o" object {debug}] != "" } {
     untested ptype.exp
     return -1
}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${binfile}1.o" object {debug}] != "" } {
     untested ptype.exp
     return -1
}
if  { [gdb_compile "${binfile}0.o ${binfile}1.o" "${binfile}" executable {debug}] != "" } {
     untested ptype.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;
}

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

# Test ptype of unnamed enumeration members before any action causes
# the partial symbol table to be expanded to full symbols.  This fails
# with stabs compilers which fail to use a nameless stab (such as
# pre-2.4.5 versions of gcc and most non-gcc compilers).

send_gdb "ptype red1\n"
gdb_expect {
    -re "type = enum primary1_tag \{red1, green1, blue1\}.*$gdb_prompt $"\
	{
	    # The workaround is in effect.  As this is a compiler, not GDB,
	    # bug, we'll make it a PASS but perhaps it should be an XFAIL.
	    pass "ptype unnamed enumeration member (worked around)"
	}
    -re "type = enum \{red1, green1, blue1\}.*$gdb_prompt $"\
			{ pass "ptype unnamed enumeration member" }
    -re ".*$gdb_prompt $"	{ fail "ptype unnamed enumeration member" }
    timeout		{ fail "(timeout) ptype unnamed enumeration member" }
}

#
# test ptype command with structures
#
# Here and elsewhere, we accept
# "long", "long int", or "int" for long variables (whatis.exp already
# has an XFAIL for "int" (Sun cc bug), so no need to fail it here).
gdb_test "ptype struct t_struct" "type = struct t_struct \{.*\[\r\n\]    (unsigned |)char v_char_member;.*\[\r\n\]    (short|short int) v_short_member;.*\[\r\n\]    int v_int_member;.*\[\r\n\]    (long|long int|int) v_long_member;.*\[\r\n\]    float v_float_member;.*\[\r\n\]    double v_double_member;.*\[\r\n\]\}.*" "ptype structure" 


# Test the equivalence between '.' and '->' for struct member references.

if [gdb_test "ptype v_struct1.v_float_member"	"type = float"]<0 then {
    return -1
}
if [gdb_test "ptype v_struct1->v_float_member"	"type = float"]<0 then {
    return -1
}
if [gdb_test "ptype v_t_struct_p.v_float_member"	"type = float"]<0 then {
    return -1
}
if [gdb_test "ptype v_t_struct_p->v_float_member"	"type = float"]<0 then {
    return -1
}


# IBM's xlc puts out bogus stabs--the stuff field is type 42,
# which isn't defined.

gdb_test "ptype struct link" "type = struct link \{\[\r\n\]+\[ \t\]+struct link \\*next;\[\r\n\]+\[ \t\]+struct link \\*\\(\\*linkfunc\\)\\((struct link \\*, int|void|)\\);\[\r\n\]+\[ \t\]+struct t_struct stuff.1..2..3.;\[\r\n\]+\}.*" "ptype linked list structure" 

#
# test ptype command with unions
#
gdb_test "ptype union t_union" "type = union t_union \{.*\[\r\n\]    (unsigned |)char v_char_member;.*\[\r\n\]    (short|short int) v_short_member;.*\[\r\n\]    int v_int_member;.*\[\r\n\]    (long|long int|int) v_long_member;.*\[\r\n\]    float v_float_member;.*\[\r\n\]    double v_double_member;.*\[\r\n\]\}.*" "ptype union" 

# IBM's xlc puts out bogus stabs--the stuff field is type 42,
# which isn't defined.
gdb_test "ptype union tu_link" "type = union tu_link \{\[\r\n\]+\[ \t\]+struct link \\*next;\[\r\n\]+\[ \t\]+struct link \\*\\(\\*linkfunc\\)\\((struct link \\*, int|void|)\\);\[\r\n\]+\[ \t\]+struct t_struct stuff.1..2..3.;\[\r\n\]+\}.*" "ptype linked list union" 

#
# test ptype command with enums
#

gdb_test "ptype primary" "type = enum .red, green, blue.*" "ptype unnamed enumeration" 

gdb_test "ptype enum colors" "type = enum colors \{yellow, purple, pink\}.*" "ptype named enumeration" 


#
# test ptype command with enums as typedef
#
gdb_test "ptype boolean" "type = enum (boolean |)\{FALSE, TRUE\}.*" "ptype unnamed typedef'd enumeration" 

# And check that whatis shows the name, not "enum {...}".
# This probably fails for all DWARF 1 cases, so assume so for now. -fnf
# The problem with xlc is that the stabs look like
#   :t51=eFALSE:0,TRUE:1,;
#   boolean:t55=51
#   v_boolean:G51
# GDB's behavior is correct; the type which the variable is defined
# as (51) doesn't have a name.  Only 55 has a name.

if {!$gcc_compiled && !$hp_aCC_compiler} {
    setup_xfail "rs6000-*-*" "i*86-*-sysv4*"
    setup_xfail "hppa*-*-*" CLLbs14773
}

# For get_debug_format to do its job, we need to have a current source file.
gdb_test "list main" ""
get_debug_format
gdb_test "whatis v_boolean" "type = (enum |)boolean" \
  "whatis unnamed typedef'd enum (compiler bug in IBM's xlc)"

# Same thing with struct and union.
gdb_test "ptype t_struct3" "type = struct (t_struct3 |)\{.*
 *double v_double_member;.*
 *int v_int_member;.*\}" "printing typedef'd struct"

gdb_test "ptype t_union3" "type = union (t_union3 |)\{.*
 *double v_double_member;.*
 *int v_int_member;.*\}" "printing typedef'd union"

gdb_test "ptype enum bvals" "type = enum bvals \{my_false, my_true\}.*" "ptype named typedef'd enumf'd enum"

#
# test ptype command with out-of-order enum values
#
gdb_test "ptype enum misordered" "type = enum misordered \{two = 2, one = 1, zero = 0, three = 3\}.*" "ptype misordered enumeration" 

#
# test ptype command with a named enum's value
#
gdb_test "ptype three" "type = enum misordered \{two = 2, one = 1, zero = 0, three = 3\}.*" "ptype named enumeration member" 

gdb_test "ptype red" "type = enum \{red, green, blue\}.*" "ptype unnamed enumeration member #2" 

#
# test ptype command with basic C types
#
# I've commented most of this out because it duplicates tests in whatis.exp.
# I've just left in a token test or 2 which is designed to test that ptype 
# acts like whatis for basic types.  If it is thought to be necessary to
# test both whatis and ptype for all the types, the tests should be
# merged into whatis.exp, or else maintenance will be a royal pain -kingdon
#setup_xfail "mips-idt-*" "mips-sgi-*"
#send "ptype v_char\n"
#gdb_expect {
#    -re "type = char.*$gdb_prompt $"	{ pass "ptype char" }
#    -re ".*$gdb_prompt $"	{ fail "ptype char" }
#    timeout		{ fail "(timeout) ptype char" }
#}
#
#
#setup_xfail "mips-*-*"
#send "ptype v_signed_char\n"
#gdb_expect {
#    -re "type = signed char.*$gdb_prompt $"	{ pass "ptype signed char" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed char" }
#    timeout		{ fail "(timeout) ptype signed char" }
#}
#
#
#send "ptype v_unsigned_char\n"
#gdb_expect {
#    -re "type = unsigned char.*$gdb_prompt $"	{ pass "ptype unsigned char" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned char" }
#    timeout		{ fail "(timeout) ptype unsigned char" }
#}

gdb_test "ptype v_short" "type = short(| int).*" "ptype short" 

#send "ptype v_signed_short\n"
#gdb_expect {
#    -re "type = short.*$gdb_prompt $"	{ pass "ptype signed short" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed short" }
#    timeout		{ fail "(timeout) ptype signed short" }
#}
#
#
#send "ptype v_unsigned_short\n"
#gdb_expect {
#    -re "type = unsigned short.*$gdb_prompt $"	{ pass "ptype unsigned short" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned short" }
#    timeout		{ fail "(timeout) ptype unsigned short" }
#}


gdb_test "ptype v_int" "type = int.*" "ptype int" 

#send "ptype v_signed_int\n"
#gdb_expect {
#    -re "type = int.*$gdb_prompt $"	{ pass "ptype signed int" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed int" }
#    timeout		{ fail "(timeout) ptype signed int" }
#}
#
#
#send "ptype v_unsigned_int\n"
#gdb_expect {
#    -re "type = unsigned int.*$gdb_prompt $"	{ pass "ptype unsigned int" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned int" }
#    timeout		{ fail "(timeout) ptype unsigned int" }
#}
#
#
#send "ptype v_long\n"
#gdb_expect {
#    -re "type = long.*$gdb_prompt $"	{ pass "ptype long" }
#    -re ".*$gdb_prompt $"	{ fail "ptype long" }
#    timeout		{ fail "(timeout) ptype long" }
#}
#
#
#send "ptype v_signed_long\n"
#gdb_expect {
#    -re "type = long.*$gdb_prompt $"	{ pass "ptype signed long" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed long" }
#    timeout		{ fail "(timeout) ptype signed long" }
#}
#
#
#send "ptype v_unsigned_long\n"
#gdb_expect {
#    -re "type = unsigned long.*$gdb_prompt $"	{ pass "ptype unsigned long" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned long" }
#    timeout		{ fail "(timeout) ptype unsigned long" }
#}
#
#
#send "ptype v_float\n"
#gdb_expect {
#    -re "type = float.*$gdb_prompt $"	{ pass "ptype float" }
#    -re ".*$gdb_prompt $"	{ fail "ptype float" }
#    timeout		{ fail "(timeout) ptype float" }
#}
#
#
#send "ptype v_double\n"
#gdb_expect {
#    -re "type = double.*$gdb_prompt $"	{ pass "ptype double" }
#    -re ".*$gdb_prompt $"	{ fail "ptype double" }
#    timeout		{ fail "(timeout) ptype double" }
#}


#
# test ptype command with arrays
#
#setup_xfail "mips-idt-*" "mips-sgi-*"
#send "ptype v_char_array\n"
#gdb_expect {
#    -re "type = char .2..*$gdb_prompt $"	{ pass "ptype char array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype char array" }
#    timeout		{ fail "(timeout) ptype char array" }
#}
#
#
#setup_xfail "mips-*-*"
#send "ptype v_signed_char_array\n"
#gdb_expect {
#    -re "type = (|signed )char .2..*$gdb_prompt $"	{ pass "ptype signed char array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed char array" }
#    timeout		{ fail "(timeout) ptype signed char array" }
#}
#
#
#send "ptype v_unsigned_char_array\n"
#gdb_expect {
#    -re "type = unsigned char .2..*$gdb_prompt $"	{ pass "ptype unsigned char array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned char array" }
#    timeout		{ fail "(timeout) ptype unsigned char array" }
#}
#
#
#
#send "ptype v_int_array\n"
#gdb_expect {
#    -re "type = int .2..*$gdb_prompt $"	{ pass "ptype int array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype int array" }
#    timeout		{ fail "(timeout) ptype int array" }
#}
#
#
#send "ptype v_signed_int_array\n"
#gdb_expect {
#    -re "type = int .2..*$gdb_prompt $"	{ pass "ptype signed int array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed int array" }
#    timeout		{ fail "(timeout) ptype signed int array" }
#}
#
#
#send "ptype v_unsigned_int_array\n"
#gdb_expect {
#    -re "type = unsigned int .2..*$gdb_prompt $"	{ pass "ptype unsigned int array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned int array" }
#    timeout		{ fail "(timeout) ptype unsigned int array" }
#}
#
#
#send "ptype v_long_array\n"
#gdb_expect {
#    -re "type = (long|int|long int) .2..*$gdb_prompt $"	{ 
#	pass "ptype long array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype long array" }
#    timeout		{ fail "(timeout) ptype long array" }
#}
#
#
#send "ptype v_signed_long_array\n"
#gdb_expect {
#    -re "type = (long|int|long int) .2..*$gdb_prompt $"	{ 
#	pass "ptype signed long array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed long array" }
#    timeout		{ fail "(timeout) ptype signed long array" }
#}
#
#
#send "ptype v_unsigned_long_array\n"
#gdb_expect {
#    -re "type = unsigned long .2..*$gdb_prompt $"	{ pass "ptype unsigned long array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned long array" }
#    timeout		{ fail "(timeout) ptype unsigned long array" }
#}
#
#
#send "ptype v_float_array\n"
#gdb_expect {
#    -re "type = float .2..*$gdb_prompt $"	{ pass "ptype float array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype float array" }
#    timeout		{ fail "(timeout) ptype float array" }
#}
#
#
#send "ptype v_double_array\n"
#gdb_expect {
#    -re "type = double .2..*$gdb_prompt $"	{ pass "ptype double array" }
#    -re ".*$gdb_prompt $"	{ fail "ptype double array" }
#    timeout		{ fail "(timeout) ptype double array" }
#}
#

if {!$gcc_compiled} then { setup_xfail "rs6000-*-*" "i*86-*-sysv4*" }
if {$hp_aCC_compiler} {setup_xfail "hppa*-*-*"}
gdb_test "ptype t_char_array" "type = (|unsigned )char \\\[0?\\\]"

#
##
## test ptype command with pointers
##
#setup_xfail "mips-idt-*" "mips-sgi-*"
#send "ptype v_char_pointer\n"
#gdb_expect {
#    -re "type = char \*.*$gdb_prompt $"	{ pass "ptype char pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype char pointer" }
#    timeout		{ fail "(timeout) ptype char pointer" }
#}
#
#
#setup_xfail "mips-*-*"
#send "ptype v_signed_char_pointer\n"
#gdb_expect {
#    -re "type = (|signed )char \*.*$gdb_prompt $"
#	{ pass "ptype signed char pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed char pointer" }
#    timeout		{ fail "(timeout) ptype signed char pointer" }
#}
#
#
#send "ptype v_unsigned_char_pointer\n"
#gdb_expect {
#    -re "type = unsigned char \*.*$gdb_prompt $"	{ pass "ptype unsigned char pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned char pointer" }
#    timeout		{ fail "(timeout) ptype unsigned char pointer" }
#}
#
#
#send "ptype v_short_pointer\n"
#gdb_expect {
#    -re "type = (short|short int) \*.*$gdb_prompt $"	{ pass "ptype short pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype short pointer" }
#    timeout		{ fail "(timeout) ptype short pointer" }
#}
#
#
#send "ptype v_signed_short_pointer\n"
#gdb_expect {
#    -re "type = short \*.*$gdb_prompt $"	{ pass "ptype signed short pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed short pointer" }
#    timeout		{ fail "(timeout) ptype signed short pointer" }
#}
#
#
#send "ptype v_unsigned_short_pointer\n"
#gdb_expect {
#    -re "type = unsigned short \*.*$gdb_prompt $"	{ pass "ptype unsigned short pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned short pointer" }
#    timeout		{ fail "(timeout) ptype unsigned short pointer" }
#}
#
#
#send "ptype v_int_pointer\n"
#gdb_expect {
#    -re "type = int \*.*$gdb_prompt $"	{ pass "ptype int pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype int pointer" }
#    timeout		{ fail "(timeout) ptype int pointer" }
#}
#
#
#send "ptype v_signed_int_pointer\n"
#gdb_expect {
#    -re "type = int \*.*$gdb_prompt $"	{ pass "ptype signed int pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed int pointer" }
#    timeout		{ fail "(timeout) ptype signed int pointer" }
#}
#
#
#send "ptype v_unsigned_int_pointer\n"
#gdb_expect {
#    -re "type = unsigned int \*.*$gdb_prompt $"	{ pass "ptype unsigned int pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned int pointer" }
#    timeout		{ fail "(timeout) ptype unsigned int pointer" }
#}
#
#
#send "ptype v_long_pointer\n"
#gdb_expect {
#    -re "type = long \*.*$gdb_prompt $"	{ pass "ptype long pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype long pointer" }
#    timeout		{ fail "(timeout) ptype long pointer" }
#}
#
#
#send "ptype v_signed_long_pointer\n"
#gdb_expect {
#    -re "type = long \*.*$gdb_prompt $"	{ pass "ptype signed long pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype signed long pointer" }
#    timeout		{ fail "(timeout) ptype signed long pointer" }
#}
#
#
#send "ptype v_unsigned_long_pointer\n"
#gdb_expect {
#    -re "type = unsigned long \*.*$gdb_prompt $"	{ pass "ptype unsigned long pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype unsigned long pointer" }
#    timeout		{ fail "(timeout) ptype unsigned long pointer" }
#}
#
#
#send "ptype v_float_pointer\n"
#gdb_expect {
#    -re "type = float \*.*$gdb_prompt $"	{ pass "ptype float pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype float pointer" }
#    timeout		{ fail "(timeout) ptype float pointer" }
#}
#
#
#send "ptype v_double_pointer\n"
#gdb_expect {
#    -re "type = double \*.*$gdb_prompt $"	{ pass "ptype double pointer" }
#    -re ".*$gdb_prompt $"	{ fail "ptype double pointer" }
#    timeout		{ fail "(timeout) ptype double pointer" }
#}

#
# test ptype command with nested structure and union
#
if {$hp_aCC_compiler} {
    set outer "outer_struct::"
    set struct ""
    set union ""
} else {
    set outer ""
    set struct "struct"
    set union "union"
}
gdb_test "ptype struct outer_struct" "type = struct outer_struct \{.*\[\r\n\]+\
.*int outer_int;.*\[\r\n\]+\
.*(struct|) ${outer}inner_struct inner_struct_instance;.*\[\r\n\]+\
.*(union|) ${outer}inner_union inner_union_instance;.*\[\r\n\]+\
.*(long|long int|int) outer_long;.*\[\r\n\]\}.*" "ptype outer structure" 

gdb_test "ptype ${struct} ${outer}inner_struct" "type = struct ${outer}inner_struct \{.*\[\r\n\]    int inner_int;.*\[\r\n\]    (long|long int|int) inner_long;.*\[\r\n\]\}.*" "ptype inner structure" 

gdb_test "ptype ${union} ${outer}inner_union" "type = union ${outer}inner_union \{.*\[\r\n\]    int inner_union_int;.*\[\r\n\]    (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype inner union" 

gdb_test "ptype nested_su" "type = struct outer_struct \{.*\[\r\n\]    int outer_int;.*\[\r\n\]    (struct |)${outer}inner_struct inner_struct_instance;.*\[\r\n\]    (union |)${outer}inner_union inner_union_instance;.*\[\r\n\]    (long|long int|int) outer_long;.*\[\r\n\]\}.*" "ptype nested structure" 

gdb_test "ptype nested_su.outer_int" "type = int.*" "ptype outer int" 

gdb_test "ptype nested_su.inner_struct_instance" "type = struct ${outer}inner_struct \{.*\[\r\n\]    int inner_int;.*\[\r\n\]    (long|long int|int) inner_long;.*\[\r\n\]\}.*" "ptype nested structure #2" 

gdb_test "ptype nested_su.inner_struct_instance.inner_int" "type = int.*" "ptype inner int" 

gdb_test "ptype nested_su.inner_union_instance" "type = union ${outer}inner_union \{.*\[\r\n\]    int inner_union_int;.*\[\r\n\]    (long|long int|int) inner_union_long;.*\[\r\n\]\}.*" "ptype nested union" 

# Print the type description of variable the_highest, and verify that
# the type description for the fields whose type is anonymous are
# correctly printed (at nesting level 1 and 2).

gdb_test "ptype the_highest" \
         "type = struct highest \{.*\[\r\n\] *int a;.*\[\r\n\] *struct \{.*\[\r\n\] *int b;.*\[\r\n\] *struct \{\.\.\.\} anonymous_level_2;.*\[\r\n\] *\} anonymous_level_1;.*\[\r\n\]}.*" \
         "ptype the_highest" 

# Print the type descrption for one of the fields of variable the_highest.
# The purpose is to verify that the type of a field that was printed above
# as "struct {...}" is now printed in a more descriptive way (because the
# nesting level is now one level less).

gdb_test "ptype the_highest.anonymous_level_1" \
         "type = struct \{.*\[\r\n\] *int b;.*\[\r\n\] *struct \{.*\[\r\n\] *int c;.*\[\r\n\] *\} anonymous_level_2;.*\[\r\n\]}.*" \
         "ptype the_highest" 

get_debug_format

# Print the type of the identifier ID, and check the response:
# - Expect to see PROTOTYPED as the type.  PROTOTYPED is not a regular
#   expression; it's a literal string.
# - If we instead see the unprototyped type PLAIN, and we're using STABS
#   generated by GCC, that's an xfail; as of 9 Feb 2002, GCC never emits
#   prototyped function types in STABS.  Like PROTOTYPED, PLAIN is a
#   literal string, not a regular expression.
# - Otherwise, it's a failure.
proc ptype_maybe_prototyped { id prototyped plain } {
    global gdb_prompt
    global gcc_compiled

    # Turn `prototyped' and `plain', which are literal strings, into
    # regular expressions by quoting any special characters they contain.
    regsub -all "\[\]\[*()\]" $prototyped "\\\\&" prototyped
    regsub -all "\[\]\[*()\]" $plain "\\\\&" plain

    send_gdb "ptype $id\n"
    gdb_expect {
        -re "type = $prototyped\[\r\n\]+$gdb_prompt $" {
            pass "ptype $id"
        }
        -re "type = $plain\[\r\n\]+$gdb_prompt $" {
            if {$gcc_compiled} { setup_xfail_format "stabs" }
            fail "ptype $id (compiler doesn't emit prototyped types)"
        }
        -re "$gdb_prompt $" {
            fail "ptype $id"
        }
        timeout {
            fail "ptype $id (timeout)"
        }
    }
}

ptype_maybe_prototyped "func_type" "int (*)(int (*)(int, float), float)" \
                                   "int (*)()"
ptype_maybe_prototyped "old_fptr" "double (*)()" "double (*)()"
ptype_maybe_prototyped "new_fptr" "double (*)(void)" "double (*)()"
ptype_maybe_prototyped "fptr" "int (*)(int, float)" "int (*)()"
ptype_maybe_prototyped "fptr2" "int *(*)(int (*)(int, float), float)" \
                               "int *(*)()"
ptype_maybe_prototyped "xptr" "int (*)(int (*)(), int (*)(void), int)" \
                              "int (*)()"
ptype_maybe_prototyped "ffptr" "int (*(*)(char))(short int)" \
                               "int (*(*)())()"
ptype_maybe_prototyped "fffptr" "int (*(*(*)(char))(short int))(long int)" \
                                "int (*(*(*)())())()"

# Test printing type of typedefs in different scopes, with same name
# but different type.

gdb_test "list intfoo" ""
gdb_test "ptype foo" "type = int" "ptype foo typedef after first list of intfoo"
gdb_test "list charfoo" ""
gdb_test "ptype foo" "type = char" "ptype foo typedef after first list of charfoo"
gdb_test "list intfoo" ""
gdb_test "ptype foo" "type = int" "ptype foo typedef after second list of intfoo"
gdb_test "list charfoo" ""
gdb_test "ptype foo" "type = char" "ptype foo typedef after second list of charfoo"

# Test printing type of string constants and array constants, but
# requires a running process.  These call malloc, and can take a long
# time to execute over a slow serial link, so increase the timeout.

# UDI can't do this (PR 2416).  XFAIL is not suitable, because attempting
# the operation causes a slow painful death rather than a nice simple failure.

if [runto_main] then {

  if [target_info exists gdb,cannot_call_functions] {
    setup_xfail "*-*-*" 2416
    fail "This target can not call functions"
    continue
  }

  # We need to up this because this can be really slow on some boards.
  # (malloc() is called as part of the test).
  set prev_timeout $timeout
  set timeout 60

  gdb_test "ptype \"abc\""	"type = char \\\[4\\\]"
  gdb_test "ptype {'a','b','c'}"	"type = char \\\[3\\\]"
  gdb_test "ptype {0,1,2}"		"type = int \\\[3\\\]"
  gdb_test "ptype {(long)0,(long)1,(long)2}"	  "type = long \\\[3\\\]"
  gdb_test "ptype {(float)0,(float)1,(float)2}" "type = float \\\[3\\\]"
  gdb_test "ptype {{0,1,2},{3,4,5}}"	"type = int \\\[2\\\]\\\[3\\\]"
  gdb_test "ptype {4,5,6}\[2\]"	"type = int"
  gdb_test "ptype *&{4,5,6}\[1\]"	"Attempt to take address of value not located in memory."

  set timeout $prev_timeout

  # Test ptype of user register
  gdb_test "ptype \$pc" "void \\(\\*\\)\\(\\)" "ptype \$pc"
}
