From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16292 invoked by alias); 18 Feb 2011 19:11:29 -0000 Received: (qmail 16241 invoked by uid 22791); 18 Feb 2011 19:11:27 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 18 Feb 2011 19:11:21 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p1IJBJxP025046 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 18 Feb 2011 14:11:19 -0500 Received: from host1.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p1IJBHhP001298 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 18 Feb 2011 14:11:19 -0500 Received: from host1.dyn.jankratochvil.net (localhost [127.0.0.1]) by host1.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id p1IJBHAZ022008; Fri, 18 Feb 2011 20:11:17 +0100 Received: (from jkratoch@localhost) by host1.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id p1IJBGXY022007; Fri, 18 Feb 2011 20:11:16 +0100 Date: Fri, 18 Feb 2011 19:44:00 -0000 From: Jan Kratochvil To: Tom Tromey Cc: gdb-patches@sourceware.org Subject: Re: [patch] C++ operators do not resolve through typedefs Message-ID: <20110218191116.GA20362@host1.dyn.jankratochvil.net> References: <20110218155751.GA3139@host1.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes 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: 2011-02/txt/msg00493.txt.bz2 On Fri, 18 Feb 2011 19:17:10 +0100, Tom Tromey wrote: > type1 = check_typedef (type1); > if (TYPE_CODE (type1) == TYPE_CODE_REF) > type1 = check_typedef (TYPE_TARGET_TYPE (type1)); > [...] > return (TYPE_CODE (type1) == TYPE_CODE_STRUCT [...] As there is never a reference to reference, OK, nice. Checked in. No regressions on {x86_64,x86_64-m32,i686}-fedora15-linux-gnu. Thanks, Jan http://sourceware.org/ml/gdb-cvs/2011-02/msg00133.html --- src/gdb/ChangeLog 2011/02/18 16:43:50 1.12607 +++ src/gdb/ChangeLog 2011/02/18 19:10:44 1.12608 @@ -1,3 +1,10 @@ +2011-02-18 Jan Kratochvil + Tom Tromey + + * cp-support.c (make_symbol_overload_list_namespace): Do not call + make_symbol_overload_list_block with NULL BLOCK. + * valarith.c (unop_user_defined_p): Resolve also TYPE_CODE_TYPEDEF. + 2011-02-18 Pedro Alves * breakpoint.c (get_number_trailer): No longer accept a NULL PP. --- src/gdb/cp-support.c 2011/01/05 22:22:47 1.47 +++ src/gdb/cp-support.c 2011/02/18 19:10:46 1.48 @@ -778,11 +778,13 @@ /* Look in the static block. */ block = block_static_block (get_selected_block (0)); - make_symbol_overload_list_block (name, block); + if (block) + make_symbol_overload_list_block (name, block); /* Look in the global block. */ block = block_global_block (block); - make_symbol_overload_list_block (name, block); + if (block) + make_symbol_overload_list_block (name, block); } --- src/gdb/valarith.c 2011/02/14 11:30:37 1.98 +++ src/gdb/valarith.c 2011/02/18 19:10:46 1.99 @@ -315,15 +315,9 @@ if (op == UNOP_ADDR) return 0; type1 = check_typedef (value_type (arg1)); - for (;;) - { - if (TYPE_CODE (type1) == TYPE_CODE_STRUCT) - return 1; - else if (TYPE_CODE (type1) == TYPE_CODE_REF) - type1 = TYPE_TARGET_TYPE (type1); - else - return 0; - } + if (TYPE_CODE (type1) == TYPE_CODE_REF) + type1 = check_typedef (TYPE_TARGET_TYPE (type1)); + return TYPE_CODE (type1) == TYPE_CODE_STRUCT; } /* Try to find an operator named OPERATOR which takes NARGS arguments --- src/gdb/testsuite/ChangeLog 2011/02/17 22:08:12 1.2594 +++ src/gdb/testsuite/ChangeLog 2011/02/18 19:10:46 1.2595 @@ -1,3 +1,8 @@ +2011-02-18 Jan Kratochvil + + * gdb.cp/typedef-operator.exp: New file. + * gdb.cp/typedef-operator.cc: New file. + 2011-02-17 Michael Snyder * gdb.threads/thread-find.exp: Fix regular expressions. --- src/gdb/testsuite/gdb.cp/typedef-operator.cc +++ src/gdb/testsuite/gdb.cp/typedef-operator.cc 2011-02-18 19:11:01.266772000 +0000 @@ -0,0 +1,31 @@ +/* This test case is part of GDB, the GNU debugger. + + Copyright 2011 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 . */ + +class C +{ +public: + int operator* () { return 42; } +}; +typedef C D; + +D u; +D &v = u; + +int main () +{ + return *v; +} --- src/gdb/testsuite/gdb.cp/typedef-operator.exp +++ src/gdb/testsuite/gdb.cp/typedef-operator.exp 2011-02-18 19:11:01.559204000 +0000 @@ -0,0 +1,33 @@ +# Copyright 2011 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. + +if {[skip_cplus_tests]} { continue } + +set testfile "typedef-operator" +if [prepare_for_testing $testfile $testfile $testfile.cc {c++ debug}] { + return -1 +} + +gdb_test_no_output "set language c++" + +gdb_test "p *u" {You can't do that without a process to debug.} "test crash" + +if ![runto_main] { + return -1 +} + +gdb_test "p *v" " = 42" "test typedef"