This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures
- From: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>
- To: gdr at integrable-solutions dot net
- Cc: gcc-patches at gcc dot gnu dot org, gcc at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Thu, 26 Dec 2002 12:08:58 -0500 (EST)
- Subject: Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures
- References: <200212261347.IAA14641@caip.rutgers.edu> <m3adiszvb6.fsf@uniton.integrable-solutions.net>
> From: Gabriel Dos Reis <gdr@integrable-solutions.net>
>
> "Kaveh R. Ghazi" <ghazi@caip.rutgers.edu> writes:
>
> [...]
>
> | Patch to follow after some testing. Any suggestions for the name of
> | the new split out file? Using istream_extractor_arith2 didn't seem
> | very descriptive.
>
> Well, I'm not sure we will come up with a naming scheme that is
> a) sensical, i.e. descriptive;
> b) matches standard description. i.e. the paragraph in the Standard;
> specificationp;
> c) scalable;
> d) easy to use.
>
> I suspect that, somehow, we will end up with numbers. Therefore I
> would suggest the testcases be named after the title of the
> paragraphes that describe them in the C++ definition text. I know
> Benjamin is skeptical about numbering, so I would appreciate to have
> his input on this suggestion.
> -- Gaby
Sure, whatever you guys agree on is fine with me.
Here's the patch. I tested it via make check against 3.2.x
libstdc++-v3 on sparc-solaris2.7. Unexpected failures are gone.
Ok to install everywhere? (Modulo any filename changes of course.)
Thanks,
--Kaveh
2002-12-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* testsuite/27_io/istream_extractor_arith.cc (test12): Move to ...
* testsuite/27_io/istream_extractor_arith2.cc: ... here, new file.
diff -rup orig/egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc
--- orig/egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc 2002-06-21 16:23:51.000000000 -0400
+++ egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc 2002-12-25 20:54:13.300925000 -0500
@@ -513,45 +513,6 @@ bool test11()
return test;
}
-// libstdc++/3720
-// excess input should not cause a core dump
-template<typename T>
-bool test12_aux(bool integer_type)
-{
- bool test = true;
-
- int digits_overflow;
- if (integer_type)
- // This many digits will overflow integer types in base 10.
- digits_overflow = std::numeric_limits<T>::digits10 + 2;
- else
- // This might do it, unsure.
- digits_overflow = std::numeric_limits<T>::max_exponent10 + 1;
-
- std::string st;
- std::string part = "1234567890123456789012345678901234567890";
- for (int i = 0; i < digits_overflow / part.size() + 1; ++i)
- st += part;
- std::stringbuf sb(st);
- std::istream is(&sb);
- T t;
- is >> t;
- VERIFY(is.fail());
- return test;
-}
-
-bool test12()
-{
- bool test = true;
- VERIFY(test12_aux<short>(true));
- VERIFY(test12_aux<int>(true));
- VERIFY(test12_aux<long>(true));
- VERIFY(test12_aux<float>(false));
- VERIFY(test12_aux<double>(false));
- VERIFY(test12_aux<long double>(false));
- return test;
-}
-
// libstdc++/3720 part two
void test13()
{
@@ -603,7 +564,6 @@ int main()
test10();
test11();
- test12();
test13();
return 0;
}
diff -rup orig/egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith2.cc egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith2.cc
--- orig/egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith2.cc 2002-12-25 21:11:35.330796000 -0500
+++ egcc-CVS20021224/libstdc++-v3/testsuite/27_io/istream_extractor_arith2.cc 2002-12-25 21:03:10.979095000 -0500
@@ -0,0 +1,74 @@
+// 1999-04-12 bkoz
+
+// Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library 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, or (at your option)
+// any later version.
+
+// This library 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 library; see the file COPYING. If not, write to the Free
+// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// USA.
+
+// 27.6.1.2.2 arithmetic extractors
+
+// XXX This test fails on sparc-solaris2 because of a bug in libc
+// XXX sscanf for very long input. See:
+// XXX http://gcc.gnu.org/ml/gcc/2002-12/msg01422.html
+// { dg-do run { xfail sparc*-*-solaris2* } }
+
+#include <sstream>
+#include <testsuite_hooks.h>
+
+// libstdc++/3720
+// excess input should not cause a core dump
+template<typename T>
+bool test12_aux(bool integer_type)
+{
+ bool test = true;
+
+ int digits_overflow;
+ if (integer_type)
+ // This many digits will overflow integer types in base 10.
+ digits_overflow = std::numeric_limits<T>::digits10 + 2;
+ else
+ // This might do it, unsure.
+ digits_overflow = std::numeric_limits<T>::max_exponent10 + 1;
+
+ std::string st;
+ std::string part = "1234567890123456789012345678901234567890";
+ for (int i = 0; i < digits_overflow / part.size() + 1; ++i)
+ st += part;
+ std::stringbuf sb(st);
+ std::istream is(&sb);
+ T t;
+ is >> t;
+ VERIFY(is.fail());
+ return test;
+}
+
+bool test12()
+{
+ bool test = true;
+ VERIFY(test12_aux<short>(true));
+ VERIFY(test12_aux<int>(true));
+ VERIFY(test12_aux<long>(true));
+ VERIFY(test12_aux<float>(false));
+ VERIFY(test12_aux<double>(false));
+ VERIFY(test12_aux<long double>(false));
+ return test;
+}
+
+int main()
+{
+ test12();
+ return 0;
+}