X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftestsuite%2Fgdb.base%2Fwhatis.exp;h=99719685d7979d48750e946907013911a9381134;hb=84c93cd5f1ff869eb8c04314738eaa2cddb3c29e;hp=79c48e4da7001ec2cc444340d5869fd4a15faba7;hpb=2ee563b53258d390d7446e90a67f465d504ae44c;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/testsuite/gdb.base/whatis.exp b/gdb/testsuite/gdb.base/whatis.exp index 79c48e4da7..99719685d7 100644 --- a/gdb/testsuite/gdb.base/whatis.exp +++ b/gdb/testsuite/gdb.base/whatis.exp @@ -1,65 +1,57 @@ -# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1999, 2002 -# 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 -# the Free Software Foundation; either version 2 of the License, or +# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Please email any bugs, comments, and/or additions to this file to: -# bug-gdb@prep.ai.mit.edu +# along with this program. If not, see . # 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 - -set testfile whatis -set srcfile ${testfile}.c -set binfile ${objdir}/${subdir}/${testfile} -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { - gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail." + +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 ${binfile}] { - return -1; +if [get_compiler_info] { + return -1 } # Start with a fresh gdb. -gdb_exit -gdb_start -gdb_reinitialize_dir $srcdir/$subdir -gdb_load $binfile +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/Ultrix cc have this problem. +# 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*" "*-*-ultrix*" "i*86-sequent-bsd*" + setup_xfail "*-sun-sunos4*" "i*86-sequent-bsd*" } } @@ -75,19 +67,8 @@ gdb_test "whatis v_char" \ "type = (unsigned char|char)" \ "whatis char" -# If we did not use the signed keyword when compiling the file, don't -# expect GDB to know that char is signed. -if { $hp_cc_compiler || $hp_aCC_compiler } { - set signed_keyword_not_used 1 -} -if $signed_keyword_not_used then { - set signed_char "char" -} else { - set signed_char "signed char" -} -if {!$gcc_compiled} then { setup_xfail "mips-sgi-irix*" } gdb_test "whatis v_signed_char" \ - "type = $signed_char" \ + "type = (signed char|char)" \ "whatis signed char" gdb_test "whatis v_unsigned_char" \ @@ -137,6 +118,13 @@ 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" @@ -201,6 +189,12 @@ 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" @@ -264,6 +258,20 @@ 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" @@ -273,43 +281,120 @@ gdb_test "whatis v_double_pointer" \ "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\}" \ + "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 \{$ununion\}" \ + "type = union \{\.\.\.\}" \ "whatis unnamed union" +gdb_test "whatis &v_union" \ + "type = union t_union \\*" -if { [istarget "hppa*-hp-hpux*"] && $hp_aCC_compiler } { - # 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 - set void "(void|)" -} else { - set void "" -} +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" \ @@ -360,6 +445,20 @@ 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" \ @@ -386,6 +485,10 @@ 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" \ @@ -396,14 +499,8 @@ 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" \ + "type = struct inner_struct" \ "whatis inner structure" gdb_test "whatis nested_su.inner_struct_instance.inner_int" \ @@ -411,9 +508,61 @@ gdb_test "whatis nested_su.inner_struct_instance.inner_int" \ "whatis inner structure member" gdb_test "whatis nested_su.inner_union_instance" \ - "type = union ${outer}inner_union" \ + "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"