public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: "basic_string" problem in libstdc++
       [not found] <199710091746.NAA26054.cygnus.egcs@bluebell.bbn.com>
@ 1997-10-10  9:22 ` Jason Merrill
  1997-10-10 10:51   ` Mumit Khan
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Merrill @ 1997-10-10  9:22 UTC (permalink / raw)
  To: frichard, egcs, egcs-bugs

Here's a fix:

Thu Oct  9 23:24:36 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* stdexcepti.cc (__out_of_range): New fn.
	(__length_error): New fn.

	* std/bastring.h (OUTOFRANGE): Fix logic.  Use throwing functions.
	(LENGTHERROR): Likewise.
	Revert Oct 2 changes.
	* string: Revert Oct 2 changes.

Index: stdexcepti.cc
===================================================================
RCS file: /cvs/cvsfiles/devo/libstdc++/stdexcepti.cc,v
retrieving revision 1.2
retrieving revision 1.3
diff -c -r1.2 -r1.3
*** stdexcepti.cc	1996/09/25 01:02:19	1.2
--- stdexcepti.cc	1997/10/10 06:57:31	1.3
***************
*** 6,8 ****
--- 6,21 ----
  #endif
  
  #include <stdexcept>
+ 
+ // Entry points for string.
+ 
+ void
+ __out_of_range (const char *s)
+ {
+   throw out_of_range (s);
+ }
+ 
+ void __length_error (const char *s)
+ {
+   throw length_error (s);
+ }
Index: string
===================================================================
RCS file: /cvs/cvsfiles/devo/libstdc++/string,v
rcsdiff: /cvs/cvsfiles/devo/libstdc++/string,v: warning: Unknown phrases like `dead ...;' are present.
retrieving revision 1.6
retrieving revision 1.7
diff -c -r1.6 -r1.7
*** string	1997/10/02 17:26:27	1.6
--- string	1997/10/10 06:57:32	1.7
***************
*** 5,8 ****
--- 5,13 ----
  
  #include <std/bastring.h>
  
+ extern "C++" {
+ typedef basic_string <char> string;
+ // typedef basic_string <wchar_t> wstring;
+ } // extern "C++"
+ 
  #endif
Index: std/bastring.h
===================================================================
RCS file: /cvs/cvsfiles/devo/libstdc++/std/bastring.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -c -r1.32 -r1.33
*** std/bastring.h	1997/10/02 17:26:30	1.32
--- bastring.h	1997/10/10 06:57:33	1.33
***************
*** 40,45 ****
--- 40,63 ----
  
  #include <iterator>
  
+ #ifdef __STL_USE_EXCEPTIONS
+ 
+ extern void __out_of_range (const char *);
+ extern void __length_error (const char *);
+ 
+ #define OUTOFRANGE(cond) \
+   do { if (cond) __out_of_range (#cond); } while (0)
+ #define LENGTHERROR(cond) \
+   do { if (cond) __length_error (#cond); } while (0)
+ 
+ #else
+ 
+ #include <cassert>
+ #define OUTOFRANGE(cond) assert (!(cond))
+ #define LENGTHERROR(cond) assert (!(cond))
+ 
+ #endif
+ 
  template <class charT, class traits = string_char_traits<charT> >
  class basic_string
  {
***************
*** 262,269 ****
    reference operator[] (size_type pos)
      { unique (); return (*rep ())[pos]; }
  
!   inline reference at (size_type pos);
!   inline const_reference at (size_type pos) const;
  
  private:
    void terminate () const
--- 280,295 ----
    reference operator[] (size_type pos)
      { unique (); return (*rep ())[pos]; }
  
!   reference at (size_type pos)
!     {
!       OUTOFRANGE (pos >= length ());
!       return (*this)[pos];
!     }
!   const_reference at (size_type pos) const
!     {
!       OUTOFRANGE (pos >= length ());
!       return data ()[pos];
!     }
  
  private:
    void terminate () const
***************
*** 358,398 ****
    static Rep nilRep;
    charT *dat;
  };
- 
- typedef basic_string <char> string;
- // typedef basic_string <wchar_t> wstring;
- 
- #ifdef __STL_USE_EXCEPTIONS
- 
- #include <stdexcept>
- #define OUTOFRANGE(cond) \
-   do { if (!(cond)) throw out_of_range (#cond); } while (0)
- #define LENGTHERROR(cond) \
-   do { if (!(cond)) throw length_error (#cond); } while (0)
- 
- #else
- 
- #include <cassert>
- #define OUTOFRANGE(cond) assert (!(cond))
- #define LENGTHERROR(cond) assert (!(cond))
- 
- #endif
- 
- template <class charT, class traits>
- inline basic_string <charT, traits>::reference
- basic_string <charT, traits>::at (size_type pos)
- {
-   OUTOFRANGE (pos >= length ());
-   return (*this)[pos];
- }
- 
- template <class charT, class traits>
- inline basic_string <charT, traits>::const_reference
- basic_string <charT, traits>::at (size_type pos) const
- {
-   OUTOFRANGE (pos >= length ());
-   return data ()[pos];
- }
  
  #ifdef __STL_MEMBER_TEMPLATES
  template <class charT, class traits> template <class InputIterator>
--- 384,389 ----

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

* Re: "basic_string" problem in libstdc++
  1997-10-10  9:22 ` "basic_string" problem in libstdc++ Jason Merrill
@ 1997-10-10 10:51   ` Mumit Khan
  0 siblings, 0 replies; 5+ messages in thread
From: Mumit Khan @ 1997-10-10 10:51 UTC (permalink / raw)
  To: Jason Merrill; +Cc: egcs, egcs-bugs

Jason Merrill <jason@cygnus.com> writes:
> Here's a fix:
> 

Thanks. It seems to have fixed the basic_string problems. libstdc++
checks now pass on a i386-linux-gnulibc1.

Mumit

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

* Re: "basic_string" problem in libstdc++
@ 1997-10-10  7:00 Max Lawson
  0 siblings, 0 replies; 5+ messages in thread
From: Max Lawson @ 1997-10-10  7:00 UTC (permalink / raw)
  To: egcs

	Hi !

Did someone succeed in using 971008-basic_string-stuff on a ix86 box?

If so, can you send me your config (libc-version, bootstrap-options ...)?

Thanx in advance. Max

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

* Re: "basic_string" problem in libstdc++
  1997-10-09 15:14 Fred Richardson
@ 1997-10-09 16:40 ` H.J. Lu
  0 siblings, 0 replies; 5+ messages in thread
From: H.J. Lu @ 1997-10-09 16:40 UTC (permalink / raw)
  To: frichard; +Cc: egcs, egcs-bugs

> 
> 
> It looks like basic_string is broken:
> 

Have you been able to pass "make check" on tstring?
I couldn't. And the 970929's patch on tstring.cc,
which is enclosed here, looks pretty much bogus to me.
I cannot find a matching basic_string constructor
for

  string is (ar, ar+sizeof(ar)/sizeof(ar[0]));

nor a matching replace memeber function for

  x.replace (find (x.begin (), x.end (), 'l'),
	     find (x.rbegin (), x.rend (), 'l').base (),
	     ar, ar+sizeof(ar)/sizeof(ar[0]));

Am I missing something?

Thanks.


H.J.
--
Index: tstring.cc
===================================================================
RCS file: /home/work/cvs/gnu/egcs/libstdc++/tests/tstring.cc,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.2
diff -u -r1.1.1.1 -r1.1.1.2
--- tstring.cc	1997/08/26 00:21:29	1.1.1.1
+++ tstring.cc	1997/10/01 19:56:05	1.1.1.2
@@ -14,8 +14,9 @@
 // You should have received a copy of the GNU General Public License
 // along with this library; see the file COPYING.  If not, write to the Free
 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- 
+
 #include <string>
+#include <algorithm>
 #include <iostream.h>
 #include <stdlib.h>
 #include <assert.h>
@@ -65,6 +66,10 @@
   assert(i == 20);
   assert(f == 20);
 
+  int ar[] = { 'H', 'e', 'l', 'l', 'o' };
+  string is (ar, ar+sizeof(ar)/sizeof(ar[0]));
+  cout << "is = " << is << endl;
+  assert (is == "Hello");
 }
 
 void cattest()
@@ -142,6 +147,13 @@
   x.replace (0, 1, 'j');
   cout << "x.replace (0, 1, 'j'); x = " << x << "\n";
   assert(x == "jello");
+
+  int ar[] = { 'H', 'e', 'l', 'l', 'o' };
+  x.replace (find (x.begin (), x.end (), 'l'),
+	     find (x.rbegin (), x.rend (), 'l').base (),
+	     ar, ar+sizeof(ar)/sizeof(ar[0]));
+  cout << "x = " << x << endl;
+  assert (x == "jeHelloo");
 }
 
 void iotest()

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

* "basic_string" problem in libstdc++
@ 1997-10-09 15:14 Fred Richardson
  1997-10-09 16:40 ` H.J. Lu
  0 siblings, 1 reply; 5+ messages in thread
From: Fred Richardson @ 1997-10-09 15:14 UTC (permalink / raw)
  To: egcs, egcs-bugs

It looks like basic_string is broken:

    %> cat foo.cc
    // #define NO_STRING

    #include <stdlib.h>
    #include <std.h>


    #include <stdlib.h>
    #include <iostream.h>
    #include <fstream.h>
    #include <string>

    //==================================================================
    //  main()
    //
    //  Program's main routine.
    //==================================================================
    int     main(int argc, char *argv[])
    {
        for (int i = 0; i < argc; i++)
        {
    #ifndef NO_STRING
            string      astr;
            const char* str = argv[i];
    #else
            const char* str = argv[i];
    #endif
            cout << "ARG " << i << ": " << str << endl;
    #ifndef NO_STRING
            astr = str;
    #endif
        }
        return 0;
    }    

    %> g++ -v -o foo -Wall -g foo.cc
    Reading specs from /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/specs
    gcc version egcs-2.90.12 971008 (gcc2-970802 experimental)
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90 -Dsun -Dsparc -Dunix -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun__ -D__sparc__ -D__unix__ -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun -D__sparc -D__unix -Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) -D__EXCEPTIONS -g -Wall foo.cc /var/tmp/cca006Ms.ii
    GNU CPP version egcs-2.90.12 971008 (gcc2-970802 experimental) (sparc)
    #include "..." search starts here:
    #include <...> search starts here:
     /d4mutl/contrib/egcs/include/g++
     /usr/local/include
     /d4mutl/contrib/egcs/sparc-sun-solaris2.5.1/include
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/include
     /usr/include
    End of search list.
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/cc1plus /var/tmp/cca006Ms.ii -quiet -dumpbase foo.cc -g -Wall -version -o /var/tmp/cca006Ms.s
    GNU C++ version egcs-2.90.12 971008 (gcc2-970802 experimental) (sparc-sun-solaris2.5.1) compiled by GNU C version egcs-2.90.12 971008 (gcc2-970802 experimental).
     /d4mutl/contrib/egcs/sparc-sun-solaris2.5.1/bin/as -V -Qy -s -o /var/tmp/cca006Ms1.o /var/tmp/cca006Ms.s
    GNU assembler version 2.8 (sparc-sun-solaris2.5.1), using BFD version 2.8
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/ld -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o foo /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crt1.o /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crti.o /usr/ccs/lib/values-Xa.o /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crtbegin.o -L/d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12 -L/d4mutl/contrib/egcs/sparc-sun-solaris2.5.1/lib -L/usr/ccs/bin -L/usr/ccs/lib -L/d4mutl/contrib/egcs/lib /var/tmp/cca006Ms1.o -lstdc++ -lm -lgcc -lc -lgcc /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crtend.o /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crtn.o
    GNU ld version 2.8 (with BFD 2.8)
      Supported emulations:
       elf32_sparc
    %> foo
    ARG 0: foo
    Segmentation fault
    %> g++ -DNO_STRING -v -o foo -Wall -g foo.cc
    Reading specs from /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/specs
    gcc version egcs-2.90.12 971008 (gcc2-970802 experimental)
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90 -Dsun -Dsparc -Dunix -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun__ -D__sparc__ -D__unix__ -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun -D__sparc -D__unix -Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) -D__EXCEPTIONS -g -Wall -DNO_STRING foo.cc /var/tmp/cca006Mz.ii
    GNU CPP version egcs-2.90.12 971008 (gcc2-970802 experimental) (sparc)
    #include "..." search starts here:
    #include <...> search starts here:
     /d4mutl/contrib/egcs/include/g++
     /usr/local/include
     /d4mutl/contrib/egcs/sparc-sun-solaris2.5.1/include
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/include
     /usr/include
    End of search list.
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/cc1plus /var/tmp/cca006Mz.ii -quiet -dumpbase foo.cc -g -Wall -version -o /var/tmp/cca006Mz.s
    GNU C++ version egcs-2.90.12 971008 (gcc2-970802 experimental) (sparc-sun-solaris2.5.1) compiled by GNU C version egcs-2.90.12 971008 (gcc2-970802 experimental).
     /d4mutl/contrib/egcs/sparc-sun-solaris2.5.1/bin/as -V -Qy -s -o /var/tmp/cca006Mz1.o /var/tmp/cca006Mz.s
    GNU assembler version 2.8 (sparc-sun-solaris2.5.1), using BFD version 2.8
     /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/ld -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o foo /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crt1.o /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crti.o /usr/ccs/lib/values-Xa.o /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crtbegin.o -L/d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12 -L/d4mutl/contrib/egcs/sparc-sun-solaris2.5.1/lib -L/usr/ccs/bin -L/usr/ccs/lib -L/d4mutl/contrib/egcs/lib /var/tmp/cca006Mz1.o -lstdc++ -lm -lgcc -lc -lgcc /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crtend.o /d4mutl/contrib/egcs/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.12/crtn.o
    GNU ld version 2.8 (with BFD 2.8)
      Supported emulations:
       elf32_sparc
    %> foo
    ARG 0: foo
    %> 

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

end of thread, other threads:[~1997-10-10 10:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <199710091746.NAA26054.cygnus.egcs@bluebell.bbn.com>
1997-10-10  9:22 ` "basic_string" problem in libstdc++ Jason Merrill
1997-10-10 10:51   ` Mumit Khan
1997-10-10  7:00 Max Lawson
  -- strict thread matches above, loose matches on Subject: below --
1997-10-09 15:14 Fred Richardson
1997-10-09 16:40 ` H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).