From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2843 invoked by alias); 18 Apr 2002 10:06:37 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 2705 invoked by uid 71); 18 Apr 2002 10:06:34 -0000 Date: Thu, 18 Apr 2002 03:06:00 -0000 Message-ID: <20020418100633.2672.qmail@sources.redhat.com> To: jason@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Jason Merrill Subject: Re: libstdc++/4150: catastrophic performance decrease in C++ code Reply-To: Jason Merrill X-SW-Source: 2002-04/txt/msg00919.txt.bz2 List-Id: The following reply was made to PR libstdc++/4150; it has been noted by GNATS. From: Jason Merrill To: bkoz@redhat.com Cc: libstdc++@gcc.gnu.org, gcc-gnats@gcc.gnu.org Subject: Re: libstdc++/4150: catastrophic performance decrease in C++ code Date: Thu, 18 Apr 2002 11:01:54 +0100 --=-=-= >>>>> "Benjamin" == Benjamin Kosnik writes: >> A problem with the current implementation of this is that if we do a >> read on an input/output filebuf, we end up writing the contents of the >> buffer back out to the file, even if we've never requested a write. >> Oops. > Hmmm. > Please write a testcase that demonstrates this, and add it to > 27_io/filebuf_members.cc I'm not sure how to check for this without strace...thoughts? >> I feel like I know my way around streambufs a lot better now. > Great. So, how do you like debugging C++ with the current tools? > Painful, huh? Does it make you feel psychic when you fix things? > Please let me know if you have any special kung-fu to pass on. 1) When I started adding -static to my links, the random gdb crashes went away. 2) Sometimes 'step' fails to step into a function, but 'stepi' always seems to work; once I'm into the function, I can start using 'step' again. 3) The patch below fixes inspection of class contents. >> Tested i686-pc-linux-gnu, no regressions. Any objections? > Mainline and branch have diverged a bit right now. Did you test with > branch or mainline? trunk. I'll test on the branch, too. > I need to get solaris back in shape on mainline: bsd's, hpux, aix, > cygwin are all back in shape now, but solaris is still kind of dicy. I'm > going to ask you to hold off, at least on the branch, till I have the > libstdc++/4164 patch integrated. Also, you'll need to do the testsuite > entry before you can check in. Okay? I can hold off a bit; let me know. > Does this mean that the FSEEK hacks in config/os/*/bits/os_defines.h can > be removed, since this define is no longer used? Yep. Jason --=-=-= Content-Type: text/x-patch Content-Disposition: inline *** gnu-v3-abi.c.~1~ Sun Mar 17 17:10:01 2002 --- gnu-v3-abi.c Sun Apr 14 22:59:39 2002 *************** gnuv3_rtti_type (struct value *value, *** 241,262 **** vtable_symbol_name = SYMBOL_DEMANGLED_NAME (vtable_symbol); if (vtable_symbol_name == NULL || strncmp (vtable_symbol_name, "vtable for ", 11)) ! error ("can't find linker symbol for virtual table for `%s' value", ! TYPE_NAME (value_type)); class_name = vtable_symbol_name + 11; /* Try to look up the class name as a type name. */ class_symbol = lookup_symbol (class_name, 0, STRUCT_NAMESPACE, 0, 0); if (! class_symbol) ! error ("can't find class named `%s', as given by C++ RTTI", class_name); /* Make sure the type symbol is sane. (An earlier version of this code would find constructor functions, who have the same name as the class.) */ if (SYMBOL_CLASS (class_symbol) != LOC_TYPEDEF || TYPE_CODE (SYMBOL_TYPE (class_symbol)) != TYPE_CODE_CLASS) ! error ("C++ RTTI gives a class name of `%s', but that isn't a type name", ! class_name); /* This is the object's run-time type! */ run_time_type = SYMBOL_TYPE (class_symbol); --- 241,273 ---- vtable_symbol_name = SYMBOL_DEMANGLED_NAME (vtable_symbol); if (vtable_symbol_name == NULL || strncmp (vtable_symbol_name, "vtable for ", 11)) ! { ! warning ("can't find linker symbol for virtual table for `%s' value", ! TYPE_NAME (value_type)); ! if (vtable_symbol_name) ! warning (" found `%s' instead", vtable_symbol_name); ! return NULL; ! } class_name = vtable_symbol_name + 11; /* Try to look up the class name as a type name. */ class_symbol = lookup_symbol (class_name, 0, STRUCT_NAMESPACE, 0, 0); if (! class_symbol) ! { ! warning ("can't find class named `%s', as given by C++ RTTI", class_name); ! return NULL; ! } /* Make sure the type symbol is sane. (An earlier version of this code would find constructor functions, who have the same name as the class.) */ if (SYMBOL_CLASS (class_symbol) != LOC_TYPEDEF || TYPE_CODE (SYMBOL_TYPE (class_symbol)) != TYPE_CODE_CLASS) ! { ! warning ("C++ RTTI gives a class name of `%s', but that isn't a type name", ! class_name); ! return NULL; ! } /* This is the object's run-time type! */ run_time_type = SYMBOL_TYPE (class_symbol); --=-=-=--