stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From far...@apache.org
Subject svn commit: r634731 - in /stdcxx/trunk/etc/config/src: NEW_OFLOW_SAFE.cpp NEW_THROWS.cpp
Date Fri, 07 Mar 2008 16:22:16 GMT
Author: faridz
Date: Fri Mar  7 08:22:15 2008
New Revision: 634731

URL: http://svn.apache.org/viewvc?rev=634731&view=rev
Log:
2008-03-07  Farid Zaripov  <farid_zaripov@epam.com>

	* etc/config/src/NEW_THROWS.cpp: Split test to two independent
	tests: NEW_THROWS and NEW_OFLOW_SAFE to prevent _RWSTD_NO_NEW_THROWS
	#defined when operator new() throws exception, but check for overflow
	is failed with Access Violation (as on the Borland Turbo C++).
	* etc/config/src/NEW_OFLOW_SAFE.cpp: New config test to check if
	operator new() checks the argument for overflow.

Added:
    stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp   (with props)
Modified:
    stdcxx/trunk/etc/config/src/NEW_THROWS.cpp

Added: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp?rev=634731&view=auto
==============================================================================
--- stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp (added)
+++ stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp Fri Mar  7 08:22:15 2008
@@ -0,0 +1,54 @@
+// checking if operator new() checks the argument for overflow
+
+/***************************************************************************
+ *
+ * Licensed to the Apache Software  Foundation (ASF) under one or more
+ * contributor  license agreements.  See  the NOTICE  file distributed
+ * with  this  work  for  additional information  regarding  copyright
+ * ownership.   The ASF  licenses this  file to  you under  the Apache
+ * License, Version  2.0 (the  License); you may  not use  this file
+ * except in  compliance with the License.   You may obtain  a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the  License is distributed on an  "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
+ * implied.   See  the License  for  the  specific language  governing
+ * permissions and limitations under the License.
+ *
+ * Copyright 1999-2007 Rogue Wave Software, Inc.
+ * 
+ **************************************************************************/
+
+#include "config.h"
+#include "nodbg.h"
+
+#if 2 == __GNUG__
+#  ifndef _RWSTD_NO_HONOR_STD
+#    ifdef _RWSTD_NO_STD_TERMINATE
+#      include "terminate.h"
+#    endif   // _RWSTD_NO_STD_TERMINATE
+#  endif   // _RWSTD_NO_HONOR_STD
+#endif   // gcc 2.x
+
+
+// 18.4.1.1
+// -3- Required behavior: Return a non-null pointer ... or else throw 
+// a bad_alloc exception.
+
+int main ()
+{
+    nodbg ();
+
+    try {
+        void* p = ::operator new (size_t (-1));
+    }
+    catch (...) {
+        // exit successfully if new threw
+        return 0;
+    }
+
+    return 1;
+}

Propchange: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: stdcxx/trunk/etc/config/src/NEW_OFLOW_SAFE.cpp
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: stdcxx/trunk/etc/config/src/NEW_THROWS.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/etc/config/src/NEW_THROWS.cpp?rev=634731&r1=634730&r2=634731&view=diff
==============================================================================
--- stdcxx/trunk/etc/config/src/NEW_THROWS.cpp (original)
+++ stdcxx/trunk/etc/config/src/NEW_THROWS.cpp Fri Mar  7 08:22:15 2008
@@ -23,8 +23,7 @@
  **************************************************************************/
 
 #include "config.h"
-
-#include <stdio.h>
+#include "nodbg.h"
 
 #ifndef _RWSTD_NO_SETRLIMIT
 // test for setrlimit() presence before compiling current file
@@ -41,25 +40,9 @@
 #  endif   // _RWSTD_NO_HONOR_STD
 #endif   // gcc 2.x
 
-
-#if (defined (_WIN32) || defined (_WIN64)) && !defined (__CYGWIN__)
-
-#  include <crtdbg.h>  // for _CrtSetReportMode()
-
-void nodbg ()
-{
-    // prevent the Microsoft C library from popping up GUI windows
-    // on various failures and direct error messages to the console
-    // instead
-    _CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_DEBUG);
-    _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_DEBUG);
-    _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
-}
-#else
-
-void nodbg () { }
-
-#endif   // _WIN32 || _WIN64 && !__CYGWIN__
+#ifndef _RWSTD_NO_NEW_OFLOW_SAFE
+// test if operator new() checks the argument for overflow
+#endif   // _RWSTD_NO_NEW_OFLOW_SAFE
 
 
 // 18.4.1.1
@@ -70,31 +53,11 @@
 {
     nodbg ();
 
-    void *p = 0;
-
-    try {
-        p = ::operator new (size_t (-1));
-    }
-    catch (...) {
-        // exit successfully if new threw
-
-        // this may give a false positive if operaor new()
-        // fails to throw for arguments other than -1 as
-        // happens to be the case with gcc 2.x
-        printf ("// #define _RWSTD_NO_NEW_OFLOW_SAFE\n");
-        return 0;
-    }
-
-    // otherwise note that operator new() may have not checked
-    // its argument for overflow and try to coerce it to throw
-    // by passing it a smaller argument
-    printf ("#define _RWSTD_NO_NEW_OFLOW_SAFE\n");
-
     // decrease resource limit to a minimum to induce a failure
     // without unreasonably stressing the system
     limit_memory (0);
 
-    p = (void*)1;
+    void *p = (void*)1;
 
     try {
         const size_t size = (size_t)1 << (sizeof (size_t) * 8 - 1);



Mime
View raw message