Author: sebor Date: Sat Aug 16 12:48:12 2008 New Revision: 686554 URL: http://svn.apache.org/viewvc?rev=686554&view=rev Log: 2008-08-16 Martin Sebor <[EMAIL PROTECTED]>
STDCXX-1006 * include/rw/_config-acc.h (_RWSTD_NORETURN): New macro to decorate functions that do no return. Replaces _RWSTD_ATTRIBUTE_NORETURN to make it possible to use Visual C++ __declspec(noreturn). (_RWSTD_ATTRIBUTE_NORETURN): Renamed to _RWSTD_NORETURN. * include/rw/_config-gcc.h (_RWSTD_NORETURN, _RWSTD_ATTRIBUTE_NORETURN): Same as above. * include/rw/_config-msvc.h (_RWSTD_NORETURN): New. * include/rw/_defs.h (_RWSTD_ATTRIBUTE_NORETURN): Renamed to _RWSTD_NORETURN. (__rw_assert_fail): Used _RWSTD_NORETURN in a way to make the declaration well-formed for both acc/gcc and Visual C++. Modified: stdcxx/branches/4.2.x/include/rw/_config-acc.h stdcxx/branches/4.2.x/include/rw/_config-gcc.h stdcxx/branches/4.2.x/include/rw/_config-msvc.h stdcxx/branches/4.2.x/include/rw/_defs.h Modified: stdcxx/branches/4.2.x/include/rw/_config-acc.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/include/rw/_config-acc.h?rev=686554&r1=686553&r2=686554&view=diff ============================================================================== --- stdcxx/branches/4.2.x/include/rw/_config-acc.h (original) +++ stdcxx/branches/4.2.x/include/rw/_config-acc.h Sat Aug 16 12:48:12 2008 @@ -99,8 +99,7 @@ #endif // __HPACC_NOEH #if 6 <= _RWSTD_HP_aCC_MAJOR - // aCC 6 attribute((noreturn)) to indicate that a function + // aCC 6 attribute((noreturn)) indicates that a function // doesn't return (it may exit by throwing an exception) -# define _RWSTD_ATTRIBUTE_NORETURN __attribute__ ((noreturn)) +# define _RWSTD_NORETURN __attribute__ ((noreturn)) #endif // aCC >= 6 - Modified: stdcxx/branches/4.2.x/include/rw/_config-gcc.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/include/rw/_config-gcc.h?rev=686554&r1=686553&r2=686554&view=diff ============================================================================== --- stdcxx/branches/4.2.x/include/rw/_config-gcc.h (original) +++ stdcxx/branches/4.2.x/include/rw/_config-gcc.h Sat Aug 16 12:48:12 2008 @@ -84,9 +84,9 @@ #define _RWSTD_GNUC_ATTRIBUTE(attr) __attribute__ (attr) -// gcc attribute((noreturn)) to indicate that a function doesn't return +// gcc attribute((noreturn)) indicates that a function doesn't return // (it may still exit by throwing an exception or by calling longjmp) -#define _RWSTD_ATTRIBUTE_NORETURN _RWSTD_GNUC_ATTRIBUTE ((noreturn)) +#define _RWSTD_NORETURN __attribute__ ((noreturn)) #if __GNUG__ > 3 || __GNUG__ == 3 && __GNUC_MINOR__ >= 3 // gcc attribute((nothrow)) to indicate that a function doesn't throw Modified: stdcxx/branches/4.2.x/include/rw/_config-msvc.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/include/rw/_config-msvc.h?rev=686554&r1=686553&r2=686554&view=diff ============================================================================== --- stdcxx/branches/4.2.x/include/rw/_config-msvc.h (original) +++ stdcxx/branches/4.2.x/include/rw/_config-msvc.h Sat Aug 16 12:48:12 2008 @@ -25,7 +25,7 @@ * implied. See the License for the specific language governing * permissions and limitations under the License. * - * Copyright 1994-2006 Rogue Wave Software. + * Copyright 1994-2006 Rogue Wave Software, Inc. * **************************************************************************/ @@ -86,3 +86,7 @@ // disable "'function': was declared deprecated" #pragma warning (disable: 4996) + +// MSVC __declspec(noreturn) indicates that a function doesn't return +// see: http://msdn.microsoft.com/en-us/library/aa235362(VS.60).aspx +#define _RWSTD_NORETURN __declspec (noreturn) Modified: stdcxx/branches/4.2.x/include/rw/_defs.h URL: http://svn.apache.org/viewvc/stdcxx/branches/4.2.x/include/rw/_defs.h?rev=686554&r1=686553&r2=686554&view=diff ============================================================================== --- stdcxx/branches/4.2.x/include/rw/_defs.h (original) +++ stdcxx/branches/4.2.x/include/rw/_defs.h Sat Aug 16 12:48:12 2008 @@ -1177,10 +1177,13 @@ #endif // _RWSTD_NO_EXCEPTION_SPECIFICATION_ON_NEW -#ifndef _RWSTD_ATTRIBUTE_NORETURN - // gcc (and others) __attribute__ ((noreturn)) -# define _RWSTD_ATTRIBUTE_NORETURN /* empty */ -#endif // _RWSTD_ATTR_NORETURN +#ifndef _RWSTD_NORETURN + // gcc (and some other) compilers provide __attribute__ ((noreturn)), + // MSVC has __declspec (noreturn); other compilers (e.g., Sun C++) + // may have a #pragma for the same thing, oothers still may not + // have an equivalent +# define _RWSTD_NORETURN /* empty */ +#endif // _RWSTD_NORETURN #ifdef _RWSTD_ATTRIBUTE_NOTHROW @@ -1195,7 +1198,7 @@ // be specified for both declarations and definitions # define _RWSTD_DECLARE_NOTHROW _THROWS(()) # define _RWSTD_DEFINE_NOTHROW _THROWS(()) -#endif // _RWSTD_ATTR_NORETURN +#endif // _RWSTD_ATTRIBUTE_NOTHROW // compile-time assertion - asserts constant expressions during @@ -1216,10 +1219,10 @@ #define _RWSTD_COMPILE_ASSERT(const_expr) \ ((void)_RW::__rw_compile_assert<(const_expr)>::_C_ok) -// called for failed assertions -void _RWSTD_EXPORT +// called for failed assertions; does not return or throw +void _RWSTD_EXPORT _RWSTD_NORETURN __rw_assert_fail (const char*, const char*, int, const char*) - _RWSTD_DECLARE_NOTHROW _RWSTD_ATTRIBUTE_NORETURN; + _RWSTD_DECLARE_NOTHROW;