This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Analysis of solaris2 27_io/istream_extractor_arith.cc failures


 > 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;
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]