# Copyright 1988, 1990-1992, 1994-1997, 1999-2000, 2002-2003, 2007-2012
# 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
#

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] {
    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).

gdb_test_multiple "ptype red1" "ptype unnamed enumeration member" {
    -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"
    }
}

#
# 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-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-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-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.
# - If we see OVERPROTOTYPED, it's an xfail for RealView; RealView
#   does not distinguish prototyped and unprototyped functions, and
#   GDB defaults to prototyped.
# - Otherwise, it's a failure.
proc ptype_maybe_prototyped { id prototyped plain { overprototyped "NO-MATCH" } } {
    global gdb_prompt
    global gcc_compiled

    # Turn the arguments, which are literal strings, into
    # regular expressions by quoting any special characters they contain.
    foreach var { prototyped plain overprototyped } {
	eval "set val \$$var"
	regsub -all "\[\]\[*()\]" $val "\\\\&" val
	regsub -all "short int" $val "short( int)?" val
	regsub -all "long int" $val "long( int)?" val
	eval "set $var \$val"
    }

    gdb_test_multiple "ptype $id" "ptype $id" {
        -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 "type = $overprototyped\[\r\n\]+$gdb_prompt $" {
            if { [test_compiler_info "armcc-*"] } {
		setup_xfail "*-*-*"
	    }
            fail "ptype $id (compiler doesn't emit unprototyped types)"
        }
    }
}

ptype_maybe_prototyped "func_type" "int (*)(int (*)(int, float), float)" \
                                   "int (*)()"
ptype_maybe_prototyped "old_fptr" "double (*)()" "double (*)()" \
                                  "double (*)(void)"
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 (*)()" \
                              "int (*)(int (*)(void), int (*)(void), 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"
}
