Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Re: [rfc/testsuite/c++] c2.exp, new script for class lookup
@ 2003-11-24 21:02 Michael Elizabeth Chastain
  2003-11-24 21:04 ` Daniel Jacobowitz
  2003-11-25  1:26 ` David Carlton
  0 siblings, 2 replies; 7+ messages in thread
From: Michael Elizabeth Chastain @ 2003-11-24 21:02 UTC (permalink / raw)
  To: carlton; +Cc: gdb-patches

mec> I'm not completely happy with the name "c2" ("class 2").

dc> I would prefer either 'class2' or naming it after the PR
dc> to just calling it 'c2'.

gdb1465.exp would be bad because I'm planning to add more stuff to it
after gdb/1465 is fixed.  (I can't add it yet because there are too many
FAILs and it's a pain to analyze each one and figure out if it's really
a manifestation of 1465).

class2.exp is okay with me if nothing else turns up.

Michael C


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rfc/testsuite/c++] c2.exp, new script for class lookup
  2003-11-24 21:02 [rfc/testsuite/c++] c2.exp, new script for class lookup Michael Elizabeth Chastain
@ 2003-11-24 21:04 ` Daniel Jacobowitz
  2003-11-25  1:26 ` David Carlton
  1 sibling, 0 replies; 7+ messages in thread
From: Daniel Jacobowitz @ 2003-11-24 21:04 UTC (permalink / raw)
  To: gdb-patches

On Mon, Nov 24, 2003 at 04:02:57PM -0500, Michael Chastain wrote:
> mec> I'm not completely happy with the name "c2" ("class 2").
> 
> dc> I would prefer either 'class2' or naming it after the PR
> dc> to just calling it 'c2'.
> 
> gdb1465.exp would be bad because I'm planning to add more stuff to it
> after gdb/1465 is fixed.  (I can't add it yet because there are too many
> FAILs and it's a pain to analyze each one and figure out if it's really
> a manifestation of 1465).
> 
> class2.exp is okay with me if nothing else turns up.

That sounds good to me too.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rfc/testsuite/c++] c2.exp, new script for class lookup
  2003-11-24 21:02 [rfc/testsuite/c++] c2.exp, new script for class lookup Michael Elizabeth Chastain
  2003-11-24 21:04 ` Daniel Jacobowitz
@ 2003-11-25  1:26 ` David Carlton
  1 sibling, 0 replies; 7+ messages in thread
From: David Carlton @ 2003-11-25  1:26 UTC (permalink / raw)
  To: Michael Elizabeth Chastain; +Cc: gdb-patches

On Mon, 24 Nov 2003 16:02:57 -0500 (EST), mec.gnu@mindspring.com (Michael Elizabeth Chastain) said:

mec> I'm not completely happy with the name "c2" ("class 2").

dc> I would prefer either 'class2' or naming it after the PR
dc> to just calling it 'c2'.

> gdb1465.exp would be bad because I'm planning to add more stuff to it
> after gdb/1465 is fixed.

Ah, that's a good reason.

What else are you going to add?  How about cast-classes or subclasses
or something like that?

David Carlton
carlton@kealia.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rfc/testsuite/c++] c2.exp, new script for class lookup
@ 2003-11-25 15:03 Michael Elizabeth Chastain
  0 siblings, 0 replies; 7+ messages in thread
From: Michael Elizabeth Chastain @ 2003-11-25 15:03 UTC (permalink / raw)
  To: carlton, gdb-patches

I committed this patch, with the name "class2" instead of "c2".

Michael C

===

2003-11-24  Michael Chastain  <mec@gnu.mindspring.com>

	* gdb/class2.exp: New file.
	* gdb/class2.cc: New file.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rfc/testsuite/c++] c2.exp, new script for class lookup
@ 2003-11-25  4:22 Michael Elizabeth Chastain
  0 siblings, 0 replies; 7+ messages in thread
From: Michael Elizabeth Chastain @ 2003-11-25  4:22 UTC (permalink / raw)
  To: carlton, mec.gnu; +Cc: gdb-patches

dc> What else are you going to add?  How about cast-classes or subclasses
dc> or something like that?

Well, I started out by picking up PR gdb/186, because it was in my
big directory of incomplete gdb stuff that I'm working on.

The issue with gdb/186 is:

  . program has base class "A", derived class "B"
  . program has an object of type "B"
  . program has "A *" and "B *" pointers to the "B" object
  . user puts breakpoint on closing "}" of function
    . this is after the destructors are called!
  . "print *b_p" does bad things after the destructor happens
     . because, as we figured out, B::~B changes the vptr

This PR is several years old so it's not something you broke.  :)

So I reproduced the PR and I was writing a test case, gdb186.exp.
I figured that I should put in some simple tests before the
destructor happens to show that gdb is working fine in that instance.

And, well, the simple tests revealed a simpler problem,
without any of the destructor-changes-vptr issues.

So once the immediate problem gets fixed, I can get back to worrying
about "print *b_p" after B::~B is called.

Also virtfunc.exp has another regression since 6.0 (PR gdb/1405, virtual
baseclass botch).  I wish it was related, but the dates don't match up
-- it manifested on 2003-10-02.  When I crack open gdb/1405 I might find
that class2.exp is a good place for an explicit test.

And I'll probably throw in any other class-related stuff that I come
across because it's easier to work with gdb_test_multiple, kfail,
test_compiler_info, and all that good stuff.

Michael C


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [rfc/testsuite/c++] c2.exp, new script for class lookup
  2003-11-24 20:31 Michael Elizabeth Chastain
@ 2003-11-24 20:42 ` David Carlton
  0 siblings, 0 replies; 7+ messages in thread
From: David Carlton @ 2003-11-24 20:42 UTC (permalink / raw)
  To: Michael Elizabeth Chastain; +Cc: gdb-patches

On Mon, 24 Nov 2003 15:31:22 -0500 (EST), mec.gnu@mindspring.com (Michael Elizabeth Chastain) said:

> I'm not completely happy with the name "c2" ("class 2").

I haven't looked over the test much - I'll do that once I've installed
GCC 2.95.3 - but the name is pretty bad.  I would prefer either
'class2' or naming it after the PR to just calling it 'c2'.  (I'll see
if I can think of a more descriptive name, though.)

David Carlton
carlton@kealia.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [rfc/testsuite/c++] c2.exp, new script for class lookup
@ 2003-11-24 20:31 Michael Elizabeth Chastain
  2003-11-24 20:42 ` David Carlton
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Elizabeth Chastain @ 2003-11-24 20:31 UTC (permalink / raw)
  To: carlton, gdb-patches

This is my next try for a new test script to test class lookup.

This is just the first part of my previous script, the simple part
before any destructors get called.  It should just work but it exposes a
bug in type lookup, PR gdb/1465.

Testing:

  gcc 2.95.3 -gdwarf-2    6 PASS, 1 KFAIL
  gcc 2.95.3 -gstabs+     7 PASS
  gcc 3.3.2  -gdwarf-2    7 PASS
  gcc 3.3.2  -gstabs+     7 PASS

I'm not completely happy with the name "c2" ("class 2").

I will give this a day or two for comment and then commit it.

Michael C

===

2003-11-24  Michael Chastain  <mec@gnu.mindspring.com>

	* gdb/c2.exp: New file.
	* gdb/c2.cc: New file.

=== c2.cc

/* This testcase is part of GDB, the GNU debugger.

   Copyright 2003 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 2 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, write to the Free Software
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

   Please email any bugs, comments, and/or additions to this file to:
   bug-gdb@prep.ai.mit.edu  */

struct A
{
  virtual ~A ();
  int a1;
};

A::~A()
{
  a1 = 800;
}

struct B : public A
{
  virtual ~B ();
  int b1;
  int b2;
};

B::~B()
{
  a1 = 900;
  b1 = 901;
  b2 = 902;
}

// Stop the compiler from optimizing away data.
void refer (A *)
{
  ;
}

int main (void)
{
  A alpha, *aap, *abp;
  B beta, *bbp;

  alpha.a1 = 100;
  beta.a1 = 200; beta.b1 = 201; beta.b2 = 202;

  aap = &alpha; refer (aap);
  abp = &beta;  refer (abp);
  bbp = &beta;  refer (bbp);

  return 0;  // marker return 0
} // marker close brace

=== c2.exp

# Copyright 2003 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

if $tracelevel then {
    strace $tracelevel
    }

if { [skip_cplus_tests] } { continue }

set prms_id 0
set bug_id 0

set testfile "c2"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info ${binfile} "c++"] {
    return -1
}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# Start with "set print object off".

gdb_test "set print object off" ""

if ![runto_main] then {
    perror "couldn't run to main"
    continue
}

get_debug_format

gdb_test "break [gdb_get_line_number "marker return 0"]" \
    "Breakpoint.*at.* file .*" ""

gdb_test "continue" "Breakpoint .* at .*" ""

# Access the "A" object.

gdb_test "print alpha" \
    "= {.*a1 = 100.*}" \
    "print alpha at marker return 0"

# Access the "B" object.

gdb_test "print beta" \
    "= {.*a1 = 200.*b1 = 201.*b2 = 202}" \
    "print beta at marker return 0"

# Access the "A" object through an "A *" pointer.

gdb_test_multiple "print * aap" "print * aap at marker return 0" {
    -re "= {.*a1 = 100.*}\r\n$gdb_prompt $" {
	# gcc 2.95.3 -gstabs+
	# gcc 3.3.2 -gdwarf-2
	# gcc 3.3.2 -gstabs+
	pass "print * aap at marker return 0"
    }
    -re "= {.*a1 = .*}\r\n$gdb_prompt $" {
	if { [test_compiler_info gcc-2-*] && [test_debug_format "DWARF 2"] } {
	    # gcc 2.95.3 -gdwarf-2
	    setup_kfail "gdb/1465" "*-*-*"
	}
	fail "print * aap at marker return 0"
    }
}

# Access the "B" object through a "B *" pointer.

gdb_test "print * bbp" \
    "= {.*a1 = 200.*b1 = 201.*b2 = 202}" \
    "print * bbp at marker return 0"

# Access the "B" object through an "A *" pointer.
# This should print using the "A" type.

gdb_test_multiple "print * abp" "print * abp at marker return 0, s-p-o off" {
    -re "= {.*a1 = 200.*b1 = .*b2 = .*}\r\n$gdb_prompt $" {
	# This would violate the documentation for "set print object off".
	fail "print * abp at marker return 0, s-p-o off"
    }
    -re "= {.*a1 = 200.*}\r\n$gdb_prompt $" {
	pass "print * abp at marker return 0, s-p-o off"
    }
}

# Access the "B" object through a "B *" pointer expression.
# This should print using the "B" type.

gdb_test "print * (B *) abp" \
    "= {.*a1 = 200.*b1 = 201.*b2 = 202}" \
    "print * (B *) abp at marker return 0"


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2003-11-25 15:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-11-24 21:02 [rfc/testsuite/c++] c2.exp, new script for class lookup Michael Elizabeth Chastain
2003-11-24 21:04 ` Daniel Jacobowitz
2003-11-25  1:26 ` David Carlton
  -- strict thread matches above, loose matches on Subject: below --
2003-11-25 15:03 Michael Elizabeth Chastain
2003-11-25  4:22 Michael Elizabeth Chastain
2003-11-24 20:31 Michael Elizabeth Chastain
2003-11-24 20:42 ` David Carlton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox