This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[pushed] Fix gdb.linespec/cpls-ops.exp on 32-bit (Re: [pushed] Re: [PATCH 36/40] Add comprehensive C++ operator linespec/location/completion tests)
- From: Pedro Alves <palves at redhat dot com>
- To: Yao Qi <qiyaoltc at gmail dot com>
- Cc: Keith Seitz <keiths at redhat dot com>, GDB Patches <gdb-patches at sourceware dot org>
- Date: Thu, 30 Nov 2017 16:35:47 +0000
- Subject: [pushed] Fix gdb.linespec/cpls-ops.exp on 32-bit (Re: [pushed] Re: [PATCH 36/40] Add comprehensive C++ operator linespec/location/completion tests)
- Authentication-results: sourceware.org; auth=none
- References: <1496406158-12663-1-git-send-email-palves@redhat.com> <1496406158-12663-37-git-send-email-palves@redhat.com> <e0cf8325-c24f-033d-f06a-6c5c37b97fde@redhat.com> <238ba190-4005-8fc9-b75c-0b4857db4df4@redhat.com> <CAH=s-PPRo-q-M0GGMnjWN1vrNn-eqnOu-ix_fNu8amztkJWNyg@mail.gmail.com> <62723028-4930-2b1e-97df-b1f491540750@redhat.com>
On 11/30/2017 04:05 PM, Pedro Alves wrote:
> Looks like I considered the possibility of different size_t typedefs
> at some point but didn't really address it fully:
>
> proc test_operator_new {class_name brackets} {
> # The type size_t is typedef-ed to.
> set size_t "unsigned long"
>
> I'll fix this when I have a chance.
I went ahead and pushed this in.
>From e3919f3e898aa5ab9a98dcaf9e242a9ebacc0757 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Thu, 30 Nov 2017 16:32:10 +0000
Subject: [PATCH] Fix gdb.linespec/cpls-ops.exp on 32-bit
gdb.linespec/cpls-ops.exp is currently failing on x86-64 -m32 and other
32-bit ports:
b test_op_new::operator new(unsigned int) FAIL: gdb.linespec/cpls-ops.exp: operator-new: tab complete "b test_op_new::operator" (timeout)
^CQuit
(gdb) complete b test_op_new::operator
b test_op_new::operator new(unsigned int)
(gdb) FAIL: gdb.linespec/cpls-ops.exp: operator-new: cmd complete "b test_op_new::operator"
The problem is simply that the testcase incorrectly assumes that
size_t is "unsigned long".
Fix this by extracting the right type with the "ptype" command.
gdb/testsuite/ChangeLog:
2017-11-30 Pedro Alves <palves@redhat.com>
* gdb.linespec/cpls-ops.exp
(check_explicit_skips_function_argument): Extract the underlying
type of size_t instead of hardcoding it.
---
gdb/testsuite/ChangeLog | 6 ++++++
gdb/testsuite/gdb.linespec/cpls-ops.exp | 13 +++++++++++--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index d19eca2..5b8151d 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2017-11-30 Pedro Alves <palves@redhat.com>
+
+ * gdb.linespec/cpls-ops.exp
+ (check_explicit_skips_function_argument): Extract the underlying
+ type of size_t instead of hardcoding it.
+
2017-11-29 Pedro Alves <palves@redhat.com>
PR c++/19436
diff --git a/gdb/testsuite/gdb.linespec/cpls-ops.exp b/gdb/testsuite/gdb.linespec/cpls-ops.exp
index c1b6c33..d58a6de 100644
--- a/gdb/testsuite/gdb.linespec/cpls-ops.exp
+++ b/gdb/testsuite/gdb.linespec/cpls-ops.exp
@@ -43,8 +43,17 @@ proc check_explicit_skips_function_argument {function} {
# testing operator new.
proc test_operator_new {class_name brackets} {
- # The type size_t is typedef-ed to.
- set size_t "unsigned long"
+ global gdb_prompt
+
+ # Extract the type size_t is typedef-ed to.
+ set size_t ""
+ set test "get size_t underlying type"
+ gdb_test_multiple "ptype size_t" $test {
+ -re " = (\[ a-z\]*)\r\n$gdb_prompt $" {
+ set size_t $expect_out(1,string)
+ pass "$test"
+ }
+ }
# Complete all prefixes between "operato" and the full prototype.
foreach cmd_prefix {"b" "b -function"} {
--
2.5.5