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 <[EMAIL PROTECTED]>
* 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);