From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8155 invoked by alias); 14 Mar 2012 01:43:02 -0000 Received: (qmail 8147 invoked by uid 22791); 14 Mar 2012 01:43:01 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 14 Mar 2012 01:42:48 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 946FB1C681C; Tue, 13 Mar 2012 21:42:47 -0400 (EDT) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id WN2XHsAhQu-v; Tue, 13 Mar 2012 21:42:47 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 4D5361C6A9B; Tue, 13 Mar 2012 21:42:47 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id E6D84145615; Tue, 13 Mar 2012 18:42:39 -0700 (PDT) Date: Wed, 14 Mar 2012 01:43:00 -0000 From: Joel Brobecker To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [RFA] ax-gdb: Do not treat enums and bools as integers. Message-ID: <20120314014239.GZ2853@adacore.com> References: <1331240440-13559-1-git-send-email-brobecker@adacore.com> <874ntxlng9.fsf@fleche.redhat.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="5p8PegU4iirBW1oA" Content-Disposition: inline In-Reply-To: <874ntxlng9.fsf@fleche.redhat.com> User-Agent: Mutt/1.5.20 (2009-06-14) Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-03/txt/msg00463.txt.bz2 --5p8PegU4iirBW1oA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 559 > FWIW you can see the bug from C, if you make an enum type and then > compile with -fshort-enums (which IIRC is the default for some targets). Genius! I did not know this switch for C... Attached is the testcase I created for it. Tested on x86_64-linux, with and without gdbserver. In the gdbserver case, I verified that it fails without the fix. > Joel> * ax-gdb.c (gen_usual_unary): Remove special handling of > Joel> enum and bool types. > > I think it is correct. Thanks for review. Patch and testcase now both checked in. -- Joel --5p8PegU4iirBW1oA Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-Testcase-for-ax-gdb-Do-not-treat-enums-and-bools-as-.patch" Content-length: 4228 >From 48e165d8e2f9f86ff8fc9271a4150793a6a17eae Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Tue, 13 Mar 2012 18:28:22 -0700 Subject: [PATCH] Testcase for: "ax-gdb: Do not treat enums and bools as integers". gdb/testsuite/ChangeLog: * gdb.base/enum_cond.c, gdb.base/enum_cond.exp: New testcase. --- gdb/testsuite/ChangeLog | 4 +++ gdb/testsuite/gdb.base/enum_cond.c | 48 ++++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/enum_cond.exp | 44 +++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 0 deletions(-) create mode 100644 gdb/testsuite/gdb.base/enum_cond.c create mode 100644 gdb/testsuite/gdb.base/enum_cond.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c05bcf4..f83a8ba 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2012-03-13 Joel Brobecker + * gdb.base/enum_cond.c, gdb.base/enum_cond.exp: New testcase. + +2012-03-13 Joel Brobecker + * gdb.ada/bp_range_type: New testcase. 2012-03-13 Doug Evans diff --git a/gdb/testsuite/gdb.base/enum_cond.c b/gdb/testsuite/gdb.base/enum_cond.c new file mode 100644 index 0000000..5c152a4 --- /dev/null +++ b/gdb/testsuite/gdb.base/enum_cond.c @@ -0,0 +1,48 @@ +/* This testcase is part of GDB, the GNU debugger. + Copyright 2012 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 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, see . */ + +enum EE +{ + VALUE = 1 +}; + +struct x +{ + unsigned char before; + enum EE e; + unsigned char after; +}; + + +int +call_me (struct x param) +{ + return param.e; +} + +int +main (void) +{ + struct x val; + + val.before = 0xff; + val.e = VALUE; + val.after = 0xff; + + call_me (val); + return 0; +} + diff --git a/gdb/testsuite/gdb.base/enum_cond.exp b/gdb/testsuite/gdb.base/enum_cond.exp new file mode 100644 index 0000000..5c041d9 --- /dev/null +++ b/gdb/testsuite/gdb.base/enum_cond.exp @@ -0,0 +1,44 @@ +# Copyright 2012 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 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, see . + +# This file is part of the gdb testsuite. It is intended to test that +# gdb can correctly print arrays with indexes for each element of the +# array. + +set testfile "enum_cond" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} + +set opts [list debug additional_flags=-fshort-enums] +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $opts] != "" } { + untested "Could not compile ${srcfile}" + return -1 +} + +clean_restart $testfile + +if ![runto_main] then { + perror "could not run to main" + continue +} + +gdb_test "break call_me if param.e == 1" \ + "Breakpoint $decimal at $hex: file .*$srcfile, line $decimal\\." + +# Continue. We should hit our breakpoint... +gdb_test "continue" \ + "Breakpoint $decimal, call_me \\(param=\\.\\.\\.\\) at .*" \ + "continue to conditional breakpoint in call_me" + -- 1.7.1 --5p8PegU4iirBW1oA--