-# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2002,
-# 2003, 2007, 2008 Free Software Foundation, Inc.
+# Copyright 1988-2016 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
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# 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 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}
+standard_testfile .c ptype1.c
-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
+if {[prepare_for_testing ${testfile}.exp ${testfile} \
+ [list $srcfile $srcfile2] {debug nowarnings}]} {
+ 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;
+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).
-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" }
+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"
+ }
}
#
# 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} {
+if {!$gcc_compiled} {
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" ""
+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)"
# 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-*"
+#setup_xfail "mips-sgi-*"
#send "ptype v_char\n"
#gdb_expect {
# -re "type = char.*$gdb_prompt $" { pass "ptype char" }
#
# test ptype command with arrays
#
-#setup_xfail "mips-idt-*" "mips-sgi-*"
+#setup_xfail "mips-sgi-*"
#send "ptype v_char_array\n"
#gdb_expect {
# -re "type = char .2..*$gdb_prompt $" { pass "ptype char 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?\\\]"
+gdb_test "ptype pv_char_array" "type = (|unsigned )char \\(\\*\\)\\\[0?\\\]"
+
#
##
## test ptype command with pointers
##
-#setup_xfail "mips-idt-*" "mips-sgi-*"
+#setup_xfail "mips-sgi-*"
#send "ptype v_char_pointer\n"
#gdb_expect {
# -re "type = char \*.*$gdb_prompt $" { pass "ptype char 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"
+.*(struct|) inner_struct inner_struct_instance;.*\[\r\n\]+\
+.*(union|) 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 struct inner_struct" "type = struct 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 union inner_union" "type = union 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" "type = struct outer_struct \{.*\[\r\n\] int outer_int;.*\[\r\n\] (struct |)inner_struct inner_struct_instance;.*\[\r\n\] (union |)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.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" "type = struct 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_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"
+gdb_test "ptype nested_su.inner_union_instance" "type = union 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
# 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 } {
+proc ptype_maybe_prototyped { id prototyped plain { overprototyped "NO-MATCH" } } {
global gdb_prompt
global gcc_compiled
- # Turn `prototyped' and `plain', which are literal strings, into
+ # Turn the arguments, which are literal strings, into
# regular expressions by quoting any special characters they contain.
- regsub -all "\[\]\[*()\]" $prototyped "\\\\&" prototyped
- regsub -all "\[\]\[*()\]" $plain "\\\\&" plain
+ 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"
+ }
- send_gdb "ptype $id\n"
- gdb_expect {
+ gdb_test_multiple "ptype $id" "ptype $id" {
-re "type = $prototyped\[\r\n\]+$gdb_prompt $" {
pass "ptype $id"
}
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)"
+ -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 (*)()"
+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 (*)(int (*)(void), int (*)(void), int)"
ptype_maybe_prototyped "ffptr" "int (*(*)(char))(short int)" \
"int (*(*)())()"
ptype_maybe_prototyped "fffptr" "int (*(*(*)(char))(short int))(long int)" \
# Test printing type of typedefs in different scopes, with same name
# but different type.
-gdb_test "list intfoo" ""
+gdb_test "list intfoo" ".*"
gdb_test "ptype foo" "type = int" "ptype foo typedef after first list of intfoo"
-gdb_test "list charfoo" ""
+gdb_test "list charfoo" ".*"
gdb_test "ptype foo" "type = char" "ptype foo typedef after first list of charfoo"
-gdb_test "list intfoo" ""
+gdb_test "list intfoo" ".*"
gdb_test "ptype foo" "type = int" "ptype foo typedef after second list of intfoo"
-gdb_test "list charfoo" ""
+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"
+ unsupported "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 timeout 60;
+ 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 {(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\]" "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"