[RFA] Further work on constvars.exp

Michael Snyder
2001-09-27T13:56:00Z

Building on the start that Corinna Vinschen made --
2001-09-27 Michael Snyder <msnyder@redhat.com>

* lib/gdb.exp (test_debug_format): New proc.
(setup_xfail_format): Use new proc test_debug_format.
* gdb.base/constvars.exp (local_compiler_xfail_check): New
proc; use new service proc test_debug_format.
Replace all other "gcc_compiled" tests with this test.

Index: lib/gdb.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/lib/gdb.exp,v
retrieving revision 1.12
diff -c -3 -p -r1.12 gdb.exp
*** gdb.exp 2001/08/30 16:34:04 1.12
--- gdb.exp 2001/09/27 20:54:44
*************** proc get_debug_format { } {
*** 1424,1438 ****
# expected to fail, 0 otherwise (or if it is unknown). Must have
# previously called get_debug_format.

! proc setup_xfail_format { format } {
global debug_format

if [string match $debug_format $format] then {
- setup_xfail "*-*-*"
return 1;
}
return 0
! }

proc gdb_step_for_stub { } {
global gdb_prompt;
--- 1424,1446 ----
# expected to fail, 0 otherwise (or if it is unknown). Must have
# previously called get_debug_format.

! proc test_debug_format { format } {
global debug_format

if [string match $debug_format $format] then {
return 1;
}
return 0
! }
!
! proc setup_xfail_format { format } {
! set ret [test_debug_format format];
!
! if [expr $ret != 0] then {
! setup_xfail "*-*-*"
! }
! return $ret;
! }

proc gdb_step_for_stub { } {
global gdb_prompt;
Index: gdb.base/constvars.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/constvars.exp,v
retrieving revision 1.5
diff -c -3 -p -r1.5 constvars.exp
*** constvars.exp 2001/09/26 16:06:28 1.5
--- constvars.exp 2001/09/27 20:54:44
*************** if ![runto_main] then {
*** 72,77 ****
--- 72,90 ----
continue
}

+ get_debug_format
+
+ proc local_compiler_xfail_check { } {
+ global gcc_compiled;
+
+ if {$gcc_compiled} then {
+ if { ![test_debug_format "HP"] \
+ && ![test_debug_format "DWARF 2"] } then {
+ setup_xfail "*-*-*"
+ }
+ }
+ }
+
send_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"

send_gdb "cont\n"
*************** send_gdb "break marker1\n" ; gdb_expect
*** 107,113 ****

# test function parameters

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
send_gdb "ptype qux1\n"
gdb_expect {
-re "type = int \\(const char, const char, const char \\*, char \\* const\\).*$gdb_prompt $" {
--- 120,126 ----

# test function parameters

! local_compiler_xfail_check
send_gdb "ptype qux1\n"
gdb_expect {
-re "type = int \\(const char, const char, const char \\*, char \\* const\\).*$gdb_prompt $" {
*************** gdb_expect {
*** 120,127 ****
# test vars and pointers

proc do_constvar_tests {} {
- global gcc_compiled
-
gdb_test "print lave" " = 66 'B'"
gdb_test "ptype lave" "type = char"
gdb_test "print lavish" " = 10 '\\\\n'"
--- 133,138 ----
*************** proc do_constvar_tests {} {
*** 129,264 ****
gdb_test "print lax" " = 20"
gdb_test "ptype lax" "type = short.*"
gdb_test "print lecherous" " = 30"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lecherous" "type = (unsigned short|short unsigned)( int)?"
gdb_test "print lechery" " = 40"
gdb_test "ptype lechery" "type = long.*"
gdb_test "print lectern" " = 50"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lectern" "type = (unsigned long|long unsigned)( int)?"
gdb_test "print leeway" " = 60"
gdb_test "ptype leeway" "type = float"
gdb_test "print legacy" " = 70"
gdb_test "ptype legacy" "type = double"
gdb_test "print laconic" " = 65 'A'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype laconic" "type = const char"
gdb_test "print laggard" " = 1 '.001'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype laggard" "type = const unsigned char"
gdb_test "print lagoon" " = 2"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lagoon" "type = const short( int)?"
gdb_test "print laity" " = 3"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype laity" "type = const (unsigned short|short unsigned)( int)?"
gdb_test "print lambent" " = 4"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lambent" "type = const long( int)?"
gdb_test "print laminated" " = 5"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype laminated" "type = const (unsigned long|long unsigned)( int)?"
gdb_test "print lampoon" " = 6"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lampoon" "type = const float"
gdb_test "print languid" " = 7"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype languid" "type = const double"
gdb_test "print *legend" " = 66 'B'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype legend" "type = const char \\*"
gdb_test "print *legerdemain" " = 10 '\\\\n'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype legerdemain" "type = const unsigned char \\*"
gdb_test "print *leniency" " = 20"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype leniency" "type = const short( int)? \\*"
gdb_test "print *leonine" " = 30"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype leonine" "type = const (unsigned short|short unsigned)( int)? \\*"
gdb_test "print *lesion" " = 40"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lesion" "type = const long( int)? \\*"
gdb_test "print *lethal" " = 50"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lethal" "type = const (unsigned long|long unsigned)( int)? \\*"
gdb_test "print *lethargic" " = 60"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lethargic" "type = const float \\*"
gdb_test "print *levity" " = 70"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype levity" "type = const double \\*"
gdb_test "print *lewd" " = 65 'A'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lewd" "type = const char \\* const"
gdb_test "print *lexicographer" " = 1 '.001'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lexicographer" "type = const unsigned char \\* const"
gdb_test "print *lexicon" " = 2"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lexicon" "type = const short( int)? \\* const"
gdb_test "print *liaison" " = 3"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype liaison" "type = const (unsigned short|short unsigned)( int)? \\* const"
gdb_test "print *libation" " = 4"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype libation" "type = const long( int)? \\* const"
gdb_test "print *libelous" " = 5"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype libelous" "type = const (unsigned long|long unsigned)( int)? \\* const"
gdb_test "print *libertine" " = 6"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype libertine" "type = const float \\* const"
gdb_test "print *libidinous" " = 7"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype libidinous" "type = const double \\* const"
gdb_test "print *languish" " = 65 'A'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype languish" "type = const char \\*"
gdb_test "print *languor" " = 1 '.001'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype languor" "type = const unsigned char \\*"
gdb_test "print *lank" " = 2"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lank" "type = const short( int)? \\*"
gdb_test "print *lapidary" " = 3"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lapidary" "type = const (unsigned short|short unsigned)( int)? \\*"
gdb_test "print *larceny" " = 4"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype larceny" "type = const long( int)? \\*"
gdb_test "print *largess" " = 5"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype largess" "type = const (unsigned long|long unsigned)( int)? \\*"
gdb_test "print *lascivious" " = 6"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lascivious" "type = const float \\*"
gdb_test "print *lassitude" " = 7"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lassitude" "type = const double \\*"
gdb_test "print *lamprey" " = 66 'B'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lamprey" "type = char \\* const"
gdb_test "print *lariat" " = 10 '\\\\n'"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lariat" "type = unsigned char \\* const"
gdb_test "print *laudanum" " = 20"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype laudanum" "type = short( int)? \\* const"
gdb_test "print *lecithin" " = 30"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lecithin" "type = (unsigned short|short unsigned)( int)? \\* const"
gdb_test "print *leviathan" " = 40"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype leviathan" "type = long( int)? \\* const"
gdb_test "print *libretto" " = 50"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype libretto" "type = (unsigned long|long unsigned)( int)? \\* const"
gdb_test "print *lissome" " = 60"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype lissome" "type = float \\* const"
gdb_test "print *locust" " = 70"
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype locust" "type = double \\* const"
}

--- 140,276 ----
gdb_test "print lax" " = 20"
gdb_test "ptype lax" "type = short.*"
gdb_test "print lecherous" " = 30"
! local_compiler_xfail_check
gdb_test "ptype lecherous" "type = (unsigned short|short unsigned)( int)?"
gdb_test "print lechery" " = 40"
gdb_test "ptype lechery" "type = long.*"
gdb_test "print lectern" " = 50"
! local_compiler_xfail_check
gdb_test "ptype lectern" "type = (unsigned long|long unsigned)( int)?"
gdb_test "print leeway" " = 60"
gdb_test "ptype leeway" "type = float"
gdb_test "print legacy" " = 70"
gdb_test "ptype legacy" "type = double"
gdb_test "print laconic" " = 65 'A'"
! local_compiler_xfail_check
gdb_test "ptype laconic" "type = const char"
gdb_test "print laggard" " = 1 '.001'"
! local_compiler_xfail_check
gdb_test "ptype laggard" "type = const unsigned char"
gdb_test "print lagoon" " = 2"
! local_compiler_xfail_check
gdb_test "ptype lagoon" "type = const short( int)?"
gdb_test "print laity" " = 3"
! local_compiler_xfail_check
gdb_test "ptype laity" "type = const (unsigned short|short unsigned)( int)?"
gdb_test "print lambent" " = 4"
! local_compiler_xfail_check
gdb_test "ptype lambent" "type = const long( int)?"
gdb_test "print laminated" " = 5"
! local_compiler_xfail_check
gdb_test "ptype laminated" "type = const (unsigned long|long unsigned)( int)?"
gdb_test "print lampoon" " = 6"
! local_compiler_xfail_check
gdb_test "ptype lampoon" "type = const float"
gdb_test "print languid" " = 7"
! local_compiler_xfail_check
gdb_test "ptype languid" "type = const double"
gdb_test "print *legend" " = 66 'B'"
! local_compiler_xfail_check
gdb_test "ptype legend" "type = const char \\*"
gdb_test "print *legerdemain" " = 10 '\\\\n'"
! local_compiler_xfail_check
gdb_test "ptype legerdemain" "type = const unsigned char \\*"
gdb_test "print *leniency" " = 20"
! local_compiler_xfail_check
gdb_test "ptype leniency" "type = const short( int)? \\*"
gdb_test "print *leonine" " = 30"
! local_compiler_xfail_check
gdb_test "ptype leonine" "type = const (unsigned short|short unsigned)( int)? \\*"
gdb_test "print *lesion" " = 40"
! local_compiler_xfail_check
gdb_test "ptype lesion" "type = const long( int)? \\*"
gdb_test "print *lethal" " = 50"
! local_compiler_xfail_check
gdb_test "ptype lethal" "type = const (unsigned long|long unsigned)( int)? \\*"
gdb_test "print *lethargic" " = 60"
! local_compiler_xfail_check
gdb_test "ptype lethargic" "type = const float \\*"
gdb_test "print *levity" " = 70"
! local_compiler_xfail_check
gdb_test "ptype levity" "type = const double \\*"
gdb_test "print *lewd" " = 65 'A'"
! local_compiler_xfail_check
gdb_test "ptype lewd" "type = const char \\* const"
gdb_test "print *lexicographer" " = 1 '.001'"
! local_compiler_xfail_check
gdb_test "ptype lexicographer" "type = const unsigned char \\* const"
gdb_test "print *lexicon" " = 2"
! local_compiler_xfail_check
gdb_test "ptype lexicon" "type = const short( int)? \\* const"
gdb_test "print *liaison" " = 3"
! local_compiler_xfail_check
gdb_test "ptype liaison" "type = const (unsigned short|short unsigned)( int)? \\* const"
gdb_test "print *libation" " = 4"
! local_compiler_xfail_check
gdb_test "ptype libation" "type = const long( int)? \\* const"
gdb_test "print *libelous" " = 5"
! local_compiler_xfail_check
gdb_test "ptype libelous" "type = const (unsigned long|long unsigned)( int)? \\* const"
gdb_test "print *libertine" " = 6"
! local_compiler_xfail_check
gdb_test "ptype libertine" "type = const float \\* const"
gdb_test "print *libidinous" " = 7"
! local_compiler_xfail_check
gdb_test "ptype libidinous" "type = const double \\* const"
gdb_test "print *languish" " = 65 'A'"
! local_compiler_xfail_check
gdb_test "ptype languish" "type = const char \\*"
gdb_test "print *languor" " = 1 '.001'"
! local_compiler_xfail_check
gdb_test "ptype languor" "type = const unsigned char \\*"
gdb_test "print *lank" " = 2"
! local_compiler_xfail_check
gdb_test "ptype lank" "type = const short( int)? \\*"
gdb_test "print *lapidary" " = 3"
! local_compiler_xfail_check
gdb_test "ptype lapidary" "type = const (unsigned short|short unsigned)( int)? \\*"
gdb_test "print *larceny" " = 4"
! local_compiler_xfail_check
gdb_test "ptype larceny" "type = const long( int)? \\*"
gdb_test "print *largess" " = 5"
! local_compiler_xfail_check
gdb_test "ptype largess" "type = const (unsigned long|long unsigned)( int)? \\*"
gdb_test "print *lascivious" " = 6"
! local_compiler_xfail_check
!
gdb_test "ptype lascivious" "type = const float \\*"
gdb_test "print *lassitude" " = 7"
! local_compiler_xfail_check
gdb_test "ptype lassitude" "type = const double \\*"
gdb_test "print *lamprey" " = 66 'B'"
! local_compiler_xfail_check
gdb_test "ptype lamprey" "type = char \\* const"
gdb_test "print *lariat" " = 10 '\\\\n'"
! local_compiler_xfail_check
gdb_test "ptype lariat" "type = unsigned char \\* const"
gdb_test "print *laudanum" " = 20"
! local_compiler_xfail_check
gdb_test "ptype laudanum" "type = short( int)? \\* const"
gdb_test "print *lecithin" " = 30"
! local_compiler_xfail_check
gdb_test "ptype lecithin" "type = (unsigned short|short unsigned)( int)? \\* const"
gdb_test "print *leviathan" " = 40"
! local_compiler_xfail_check
gdb_test "ptype leviathan" "type = long( int)? \\* const"
gdb_test "print *libretto" " = 50"
! local_compiler_xfail_check
gdb_test "ptype libretto" "type = (unsigned long|long unsigned)( int)? \\* const"
gdb_test "print *lissome" " = 60"
! local_compiler_xfail_check
gdb_test "ptype lissome" "type = float \\* const"
gdb_test "print *locust" " = 70"
! local_compiler_xfail_check
gdb_test "ptype locust" "type = double \\* const"
}

From msnyder@cygnus.com Thu Sep 27 14:10:00 2001
From: Michael Snyder <msnyder@cygnus.com>
To: gdb-patches@sources.redhat.com
Cc: fnasser@cygnus.com, vinschen@redhat.com
Subject: [RFA] volatile.exp fix-ups
Date: Thu, 27 Sep 2001 14:10:00 -0000
Message-id: <3BB395AC.6CC343C5@cygnus.com>
X-SW-Source: 2001-09/msg00398.html
Content-length: 11793

This extends the work that Corinna and I did on constvars.exp
into volatile.exp (allowing the test to proceed if compiled
with gcc and dwarf-2).

Tested on Linux native with both stabs (xfail) and dwarf-2 (pass)
2001-09-27 Michael Snyder <msnyder@redhat.com>

* gdb.base/volatile.exp (local_compiler_xfail_check): New
proc; use new service proc test_debug_format.
Replace all other "gcc_compiled" tests with this test.

Index: gdb.base/volatile.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/volatile.exp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 volatile.exp
*** volatile.exp 2001/03/06 08:21:51 1.2
--- volatile.exp 2001/09/27 21:07:48
*************** if ![runto_main] then {
*** 79,84 ****
--- 79,97 ----
continue
}

+ get_debug_format
+
+ proc local_compiler_xfail_check { } {
+ global gcc_compiled;
+
+ if {$gcc_compiled} then {
+ if { ![test_debug_format "HP"] \
+ && ![test_debug_format "DWARF 2"] } then {
+ setup_xfail "*-*-*"
+ }
+ }
+ }
+
send_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"

send_gdb "cont\n"
*************** send_gdb "break marker1\n" ; gdb_expect
*** 105,244 ****
# As of Feb 1999, GCC does not issue info about volatility of vars, so
# these tests are all expected to fail if GCC is the compiler. -sts

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vox" "type = volatile char.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype victuals" "type = volatile unsigned char.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vixen" "type = volatile short.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype vitriol" "type = volatile unsigned short.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vellum" "type = volatile long.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype valve" "type = volatile unsigned long.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vacuity" "type = volatile float.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vertigo" "type = volatile double.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vampire" "type = volatile char \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype viper" "type = volatile unsigned char \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype vigour" "type = volatile short \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype vapour" "type = volatile unsigned short \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype ventricle" "type = volatile long \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype vigintillion" "type = volatile unsigned long \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vocation" "type = volatile float \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype veracity" "type = volatile double \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vapidity" "type = volatile char \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype velocity" "type = volatile unsigned char \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype veneer" "type = volatile short \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype video" "type = volatile unsigned short \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype vacuum" "type = volatile long \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
! gdb_test "ptype veniality" "type = volatile unsigned long \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vitality" "type = volatile float \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype voracity" "type = volatile double \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype victor" "type = const volatile char.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vicar" "type = const volatile unsigned char.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype victory" "type = const volatile char \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vicarage" "type = const volatile unsigned char \\*.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vein" "type = volatile char \\* const.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vogue" "type = volatile unsigned char \\* const.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype cavern" "type = const volatile char \\* const.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype coverlet" "type = const volatile unsigned char \\* const.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype caveat" "type = const char \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype covenant" "type = const unsigned char \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vizier" "type = const volatile char \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vanadium" "type = const volatile unsigned char \\* volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vane" "type = char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype veldt" "type = unsigned char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype cove" "type = const char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype cavity" "type = const unsigned char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vagus" "type = volatile char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vagrancy" "type = volatile unsigned char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vagary" "type = const volatile char \\* const volatile.*"

! if {$gcc_compiled} then { setup_xfail "*-*-*" }
gdb_test "ptype vendor" "type = const volatile unsigned char \\* const volatile.*"

# test function parameters
! if {$gcc_compiled} then { setup_xfail "*-*-*" }
send_gdb "ptype qux2\n"
gdb_expect {
-re "type = int \\(volatile unsigned char, const volatile int, volatile short, volatile long \\*, float \\* volatile, const volatile signed char \\* const volatile\\).*$gdb_prompt $" {
--- 118,257 ----
# As of Feb 1999, GCC does not issue info about volatility of vars, so
# these tests are all expected to fail if GCC is the compiler. -sts

! local_compiler_xfail_check
gdb_test "ptype vox" "type = volatile char.*"

! local_compiler_xfail_check
gdb_test "ptype victuals" "type = volatile unsigned char.*"

! local_compiler_xfail_check
gdb_test "ptype vixen" "type = volatile short.*"

! local_compiler_xfail_check
! gdb_test "ptype vitriol" "type = volatile (unsigned short|short unsigned)( int)?.*"

! local_compiler_xfail_check
gdb_test "ptype vellum" "type = volatile long.*"

! local_compiler_xfail_check
! gdb_test "ptype valve" "type = volatile (unsigned long|long unsigned)( int)?.*"

! local_compiler_xfail_check
gdb_test "ptype vacuity" "type = volatile float.*"

! local_compiler_xfail_check
gdb_test "ptype vertigo" "type = volatile double.*"

! local_compiler_xfail_check
gdb_test "ptype vampire" "type = volatile char \\*.*"

! local_compiler_xfail_check
gdb_test "ptype viper" "type = volatile unsigned char \\*.*"

! local_compiler_xfail_check
! gdb_test "ptype vigour" "type = volatile short( int)? \\*.*"

! local_compiler_xfail_check
! gdb_test "ptype vapour" "type = volatile (unsigned short|short unsigned)( int)? \\*.*"

! local_compiler_xfail_check
! gdb_test "ptype ventricle" "type = volatile long( int)? \\*.*"

! local_compiler_xfail_check
! gdb_test "ptype vigintillion" "type = volatile (unsigned long|long unsigned)( int)? \\*.*"

! local_compiler_xfail_check
gdb_test "ptype vocation" "type = volatile float \\*.*"

! local_compiler_xfail_check
gdb_test "ptype veracity" "type = volatile double \\*.*"

! local_compiler_xfail_check
gdb_test "ptype vapidity" "type = volatile char \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype velocity" "type = volatile unsigned char \\* volatile.*"

! local_compiler_xfail_check
! gdb_test "ptype veneer" "type = volatile short( int)? \\* volatile.*"

! local_compiler_xfail_check
! gdb_test "ptype video" "type = volatile (unsigned short|short unsigned)( int) \\* volatile.*"

! local_compiler_xfail_check
! gdb_test "ptype vacuum" "type = volatile long( int)? \\* volatile.*"

! local_compiler_xfail_check
! gdb_test "ptype veniality" "type = volatile (unsigned long|long unsigned)( int)? \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vitality" "type = volatile float \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype voracity" "type = volatile double \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype victor" "type = const volatile char.*"

! local_compiler_xfail_check
gdb_test "ptype vicar" "type = const volatile unsigned char.*"

! local_compiler_xfail_check
gdb_test "ptype victory" "type = const volatile char \\*.*"

! local_compiler_xfail_check
gdb_test "ptype vicarage" "type = const volatile unsigned char \\*.*"

! local_compiler_xfail_check
gdb_test "ptype vein" "type = volatile char \\* const.*"

! local_compiler_xfail_check
gdb_test "ptype vogue" "type = volatile unsigned char \\* const.*"

! local_compiler_xfail_check
gdb_test "ptype cavern" "type = const volatile char \\* const.*"

! local_compiler_xfail_check
gdb_test "ptype coverlet" "type = const volatile unsigned char \\* const.*"

! local_compiler_xfail_check
gdb_test "ptype caveat" "type = const char \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype covenant" "type = const unsigned char \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vizier" "type = const volatile char \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vanadium" "type = const volatile unsigned char \\* volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vane" "type = char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype veldt" "type = unsigned char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype cove" "type = const char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype cavity" "type = const unsigned char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vagus" "type = volatile char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vagrancy" "type = volatile unsigned char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vagary" "type = const volatile char \\* const volatile.*"

! local_compiler_xfail_check
gdb_test "ptype vendor" "type = const volatile unsigned char \\* const volatile.*"

# test function parameters
! local_compiler_xfail_check
send_gdb "ptype qux2\n"
gdb_expect {
-re "type = int \\(volatile unsigned char, const volatile int, volatile short, volatile long \\*, float \\* volatile, const volatile signed char \\* const volatile\\).*$gdb_prompt $" {
From msnyder@cygnus.com Thu Sep 27 14:11:00 2001
From: Michael Snyder <msnyder@cygnus.com>
To: gdb-patches@sources.redhat.com, dberlin@cgsoftware.com, jimb@redhat.com, taylor@candd.org
Subject: Re: [RFA] Better parsing of const/volatile types
Date: Thu, 27 Sep 2001 14:11:00 -0000
Message-id: <3BB395E7.345794D@cygnus.com>
References: <3BAA9E22.EDF05C48@cygnus.com>
X-SW-Source: 2001-09/msg00399.html
Content-length: 7386

Michael Snyder wrote:
>
> These changes greatly increase GDB's ability to parse type expressions
> containg 'const' and/or 'volatile'. For instance, we can now parse the
> expression (const int * volatile * const *) foo.

Having heard no objections, I will now check this in.

>
> I'm working on a new test script, which I'll submit separately.
>
> Michael
>
> ----------------------------------------------------------------------------------------------------
> Index: parse.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/parse.c,v
> retrieving revision 1.15
> diff -c -3 -p -r1.15 parse.c
> *** parse.c 2001/08/01 18:39:23 1.15
> --- parse.c 2001/09/21 01:41:31
> *************** struct type *
> *** 1255,1260 ****
> --- 1256,1263 ----
> follow_types (struct type *follow_type)
> {
> int done = 0;
> + int make_const = 0;
> + int make_volatile = 0;
> int array_size;
> struct type *range_type;
>
> *************** follow_types (struct type *follow_type)
> *** 1263,1274 ****
> --- 1266,1305 ----
> {
> case tp_end:
> done = 1;
> + if (make_const)
> + follow_type = make_cv_type (make_const,
> + TYPE_VOLATILE (follow_type),
> + follow_type, 0);
> + if (make_volatile)
> + follow_type = make_cv_type (TYPE_CONST (follow_type),
> + make_volatile,
> + follow_type, 0);
> break;
> + case tp_const:
> + make_const = 1;
> + break;
> + case tp_volatile:
> + make_volatile = 1;
> + break;
> case tp_pointer:
> follow_type = lookup_pointer_type (follow_type);
> + if (make_const)
> + follow_type = make_cv_type (make_const,
> + TYPE_VOLATILE (follow_type),
> + follow_type, 0);
> + if (make_volatile)
> + follow_type = make_cv_type (TYPE_CONST (follow_type),
> + make_volatile,
> + follow_type, 0);
> + make_const = make_volatile = 0;
> break;
> case tp_reference:
> follow_type = lookup_reference_type (follow_type);
> + if (make_const)
> + follow_type = make_cv_type (make_const, TYPE_VOLATILE (follow_type), follow_type, 0);
> + if (make_volatile)
> + follow_type = make_cv_type (TYPE_CONST (follow_type), make_volatile, follow_type, 0);
> + make_const = make_volatile = 0;
> break;
> case tp_array:
> array_size = pop_type_int ();
> 2001-09-20 Michael Snyder <msnyder@redhat.com>
> Changes by Daniel Berlin <dan@cgsoftware.com>, to support
> better parsing of const and volatile type expressions.
> * c-exp.y (const_and_volatile, const_or_volatile_noopt,
> const_or_volatile): New non-terminals.
> (ptype): Use new rule for const_or_volatile.
> (typebase): Use new rule for const_or_volatile_noopt.
> * parser-defs.h (enum type_pieces): New values tp_const, tp_volatile.
> * parse.c (follow_types): Handle tp_const and tp_volatile on the
> type stack: call make_cv_type to create new const/volatile type.
>
> Index: parser-defs.h
> ===================================================================
> RCS file: /cvs/src/src/gdb/parser-defs.h,v
> retrieving revision 1.4
> diff -c -3 -p -r1.4 parser-defs.h
> *** parser-defs.h 2001/08/01 18:39:23 1.4
> --- parser-defs.h 2001/09/21 01:41:31
> *************** struct symtoken
> *** 84,90 ****
> An array should be preceded in the list by the size of the array. */
> enum type_pieces
> {
> ! tp_end = -1, tp_pointer, tp_reference, tp_array, tp_function
> };
> /* The stack can contain either an enum type_pieces or an int. */
> union type_stack_elt
> --- 84,96 ----
> An array should be preceded in the list by the size of the array. */
> enum type_pieces
> {
> ! tp_end = -1,
> ! tp_pointer,
> ! tp_reference,
> ! tp_array,
> ! tp_function,
> ! tp_const,
> ! tp_volatile
> };
> /* The stack can contain either an enum type_pieces or an int. */
> union type_stack_elt
> Index: c-exp.y
> ===================================================================
> RCS file: /cvs/src/src/gdb/c-exp.y,v
> retrieving revision 1.4
> diff -c -3 -p -r1.4 c-exp.y
> *** c-exp.y 2001/03/06 08:21:06 1.4
> --- c-exp.y 2001/09/21 01:41:31
> *************** variable: name_not_typename
> *** 720,740 ****
>
>
> ptype : typebase
> ! /* "const" and "volatile" are curently ignored. A type qualifier
> ! before the type is currently handled in the typebase rule.
> ! The reason for recognizing these here (shift/reduce conflicts)
> ! might be obsolete now that some pointer to member rules have
> ! been deleted. */
> ! | typebase CONST_KEYWORD
> ! | typebase VOLATILE_KEYWORD
> ! | typebase abs_decl
> { $$ = follow_types ($1); }
> - | typebase CONST_KEYWORD abs_decl
> - { $$ = follow_types ($1); }
> - | typebase VOLATILE_KEYWORD abs_decl
> - { $$ = follow_types ($1); }
> ;
> !
> abs_decl: '*'
> { push_type (tp_pointer); $$ = 0; }
> | '*' abs_decl
> --- 720,741 ----
>
>
> ptype : typebase
> ! | ptype const_or_volatile abs_decl const_or_volatile
> { $$ = follow_types ($1); }
> ;
> ! const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD
> ! | VOLATILE_KEYWORD CONST_KEYWORD
> ! ;
> ! const_or_volatile_noopt: const_and_volatile
> ! { push_type (tp_const); push_type (tp_volatile);}
> ! | CONST_KEYWORD
> ! { push_type (tp_const);}
> ! | VOLATILE_KEYWORD
> ! { push_type (tp_volatile); }
> ! ;
> ! const_or_volatile: const_or_volatile_noopt
> ! |
> ! ;
> abs_decl: '*'
> { push_type (tp_pointer); $$ = 0; }
> | '*' abs_decl
> *************** typebase /* Implements (approximately):
> *** 847,857 ****
> { $$ = lookup_template_type(copy_name($2), $4,
> expression_context_block);
> }
> ! /* "const" and "volatile" are curently ignored. A type qualifier
> ! after the type is handled in the ptype rule. I think these could
> ! be too. */
> ! | CONST_KEYWORD typebase { $$ = $2; }
> ! | VOLATILE_KEYWORD typebase { $$ = $2; }
> ;
>
> typename: TYPENAME
> --- 848,855 ----
> { $$ = lookup_template_type(copy_name($2), $4,
> expression_context_block);
> }
> ! | const_or_volatile_noopt typebase { $$ = follow_types ($2); }
> ! | typebase const_or_volatile_noopt { $$ = follow_types ($1); }
> ;
>
> typename: TYPENAME