This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] gcc-gdb-test.exp: Handle old GDB "short int" and "long int" types.
- From: Mark Wielaard <mjw at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: jakub at redhat dot com, tom at tromey dot com, Mark Wielaard <mjw at redhat dot com>
- Date: Sat, 20 Sep 2014 23:21:25 +0200
- Subject: [PATCH] gcc-gdb-test.exp: Handle old GDB "short int" and "long int" types.
- Authentication-results: sourceware.org; auth=none
Old GDB might show short and long as short int and long int. This made
gcc.dg/guality/const-volatile.c ans restrict.c fail on older GDBs.
According to the patch that changed this in newer versions of GDB
this was a bug: https://sourceware.org/ml/gdb-patches/2012-09/msg00455.html
The patch transforms the types "short int" and "long int" coming from
GDB to plain "short" and "long". And a variant has been added to the
const-volatile.c testcase to make sure short and long long are handled
correctly now with older GDB.
Tested against GDB 7.7.1 and 7.4.50.
gcc/testsuite/ChangeLog
* lib/gcc-gdb-test.exp (gdb-test): Transform gdb types "short int"
and "long int" to plain "short" and "long".
* gcc.dg/guality/const-volatile.c (struct bar): New struct
containing short and long long fields.
(bar): New variable to test the type.
---
gcc/testsuite/gcc.dg/guality/const-volatile.c | 11 +++++++++++
gcc/testsuite/lib/gcc-gdb-test.exp | 4 ++++
2 files changed, 15 insertions(+)
diff --git a/gcc/testsuite/gcc.dg/guality/const-volatile.c b/gcc/testsuite/gcc.dg/guality/const-volatile.c
index 86460e4..eb45ae5 100644
--- a/gcc/testsuite/gcc.dg/guality/const-volatile.c
+++ b/gcc/testsuite/gcc.dg/guality/const-volatile.c
@@ -28,6 +28,16 @@ struct foo
const signed char csc;
};
+struct bar
+{
+ short s;
+ const short cs;
+ volatile short vs;
+ const volatile short cvs;
+ volatile long long vll;
+};
+
+struct bar bar __attribute__((used));
struct foo foo;
const struct foo cfoo;
volatile struct foo vfoo;
@@ -72,6 +82,7 @@ main (int argc, char **argv)
/* { dg-final { gdb-test 50 "type:cvip" "int * const volatile" } } */
+/* { dg-final { gdb-test 50 "type:bar" "struct bar { short s; const short cs; volatile short vs; const volatile short cvs; volatile long long vll; }" } } */
/* { dg-final { gdb-test 50 "type:foo" "struct foo { const long cli; const signed char csc; }" } } */
/* { dg-final { gdb-test 50 "type:cfoo" "const struct foo { const long cli; const signed char csc; }" } } */
/* { dg-final { gdb-test 50 "type:vfoo" "volatile struct foo { const long cli; const signed char csc; }" } } */
diff --git a/gcc/testsuite/lib/gcc-gdb-test.exp b/gcc/testsuite/lib/gcc-gdb-test.exp
index c729793..f43263d 100644
--- a/gcc/testsuite/lib/gcc-gdb-test.exp
+++ b/gcc/testsuite/lib/gcc-gdb-test.exp
@@ -111,6 +111,10 @@ proc gdb-test { args } {
# Squash all extra whitespace/newlines that gdb might use for
# "pretty printing" into one so result is just one line.
regsub -all {[\n\r\t ]+} $type " " type
+ # Old gdb might output "long int" instead of just "long"
+ # and "short int" instead of just "short". Canonicalize.
+ regsub -all {\mlong int\M} $type "long" type
+ regsub -all {\mshort int\M} $type "short" type
set expected [lindex $args 2]
if { $type == $expected } {
pass "$testname"
--
1.9.3