From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5833 invoked by alias); 10 Jan 2002 13:18:25 -0000 Mailing-List: contact gdb-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 5563 invoked from network); 10 Jan 2002 13:18:14 -0000 Received: from unknown (HELO prospero.cambridge.redhat.com) (62.30.164.150) by sources.redhat.com with SMTP; 10 Jan 2002 13:18:14 -0000 Received: (from jason@localhost) by prospero.cambridge.redhat.com (8.11.6/8.11.6) id g0ADHuK09374; Thu, 10 Jan 2002 13:17:56 GMT X-Authentication-Warning: localhost.localdomain: jason set sender to jason@redhat.com using -f To: gdb@sources.redhat.com Cc: Jason Merrill Subject: gdb.c++ failures From: Jason Merrill Date: Thu, 10 Jan 2002 05:18:00 -0000 Message-ID: User-Agent: Gnus/5.090004 (Oort Gnus v0.04) Emacs/21.1 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-01/txt/msg00083.txt.bz2 I've been looking at the various C++ debugging failures on i686-pc-linux-gnu using dwarf2. Here's my analysis: anon-union.exp: The C++ compiler is emitting an extra lexical block, so the breakpoint on the closing brace is treated as being outside the scope of the variable. There are two issues here: The compiler output is wrong, and the testcase is relying on corner-case behavior that only works for the outermost block of a function. Of course, I don't know how we could test for the compiler bug without doing this, so I suppose we might as well leave the testcase alone. classes.exp: dwarf2 doesn't provide mangled names for abstract constructors, and there is a difference of opinion between the demangler and c-typeprint.c as to whether the type should be written "A const &" or "const A &". The demangler always puts the cv-qualifier after the type it affects, whereas gdb puts it in front whenever that would have the correct meaning. Either one could be changed to match the other, or the testcase could be modified to accept either form. Thoughts? Also, gdb is including artificial arguments in the printed representation of the constructors for vB-vD. The dwarf2 output indicates that they are artificial; gdb should not print them. There doesn't seem to be a simple way to handle this in the current gdb data structures. cplusfuncs.exp: cp-demangle bug. The code to handle demangling pointers-to-functions isn't complex enough. local.exp: The test tries to examine InnerLocal outside of its scope, which fails. Doing a ptype while InnerLocal is in scope works fine. Meanwhile, ptype Local works outside of Local's scope; apparently being inside an additional block makes a difference. This definitely seems like a gdb issue. method.exp: The 'print this' tests are failing because gdb is printing the types as, say, (A * const), and the test just wants (A *). The former is correct, since 'this' is readonly. Any objection to changing the test (and others affected) to allow the const? namespace.exp: gdb prints '\0', the testcase expects '\000'. An obvious fix, which I will apply. templates.exp: the artificial args problem breaks destructor recognition. Also, when asked to set a breakpoint on a constructor, gdb offers a menu of the different clones, which the testcase doesn't like; it seems correct to me. Also, the cv-qual placement issue breaks 'print Foo::foo'; it needs to be 'print "Foo::foo"' to match the demangler output. I take it the aCC demangler makes different choices? I don't see any way to get around the dependence of template naming on the canonical format chosen by the demangler unless gdb learns to mangle names itself; perhaps the syntax of the test should vary with the compiler. Jason