Page MenuHomeFreeBSD

D47238.diff
No OneTemporary

D47238.diff

diff --git a/contrib/libcxxrt/atomic.h b/contrib/libcxxrt/atomic.h
--- a/contrib/libcxxrt/atomic.h
+++ b/contrib/libcxxrt/atomic.h
@@ -56,7 +56,7 @@
/**
* Constructor, takes a value.
*/
- atomic(T init) : val(init) {}
+ constexpr atomic(T init) : val(init) {}
/**
* Atomically load with the specified memory order.
diff --git a/contrib/libcxxrt/cxxabi.h b/contrib/libcxxrt/cxxabi.h
--- a/contrib/libcxxrt/cxxabi.h
+++ b/contrib/libcxxrt/cxxabi.h
@@ -41,8 +41,15 @@
*/
#ifdef __cplusplus
+#if __cplusplus < 201103L
+#define _LIBCXXRT_NOEXCEPT throw()
+#else
+#define _LIBCXXRT_NOEXCEPT noexcept
+#endif
namespace __cxxabiv1 {
extern "C" {
+#else
+#define _LIBCXXRT_NOEXCEPT
#endif
/**
* Function type to call when an unexpected exception is encountered.
@@ -76,7 +83,7 @@
*/
struct __cxa_exception
{
-#if __LP64__
+#ifdef __LP64__
/**
* Now _Unwind_Exception is marked with __attribute__((aligned)), which
* implies __cxa_exception is also aligned. Insert padding in the
@@ -154,7 +161,7 @@
* need to adjust the thrown pointer to make it all work correctly.
*/
void *adjustedPtr;
-#if !__LP64__
+#ifndef __LP64__
/**
* Reference count. Used to support the C++11 exception_ptr class. This
* is prepended to the structure in 64-bit mode and squeezed in to the
@@ -204,12 +211,12 @@
std::type_info * __cxa_current_exception_type();
-void *__cxa_allocate_exception(size_t thrown_size) throw();
+void *__cxa_allocate_exception(size_t thrown_size) _LIBCXXRT_NOEXCEPT;
-void __cxa_free_exception(void* thrown_exception) throw();
+void __cxa_free_exception(void* thrown_exception) _LIBCXXRT_NOEXCEPT;
__cxa_exception *__cxa_init_primary_exception(
- void *object, std::type_info* tinfo, void (*dest)(void *)) throw();
+ void *object, std::type_info* tinfo, void (*dest)(void *)) _LIBCXXRT_NOEXCEPT;
/**
* Throws an exception returned by __cxa_current_primary_exception(). This
diff --git a/contrib/libcxxrt/exception.cc b/contrib/libcxxrt/exception.cc
--- a/contrib/libcxxrt/exception.cc
+++ b/contrib/libcxxrt/exception.cc
@@ -121,7 +121,7 @@
}
-extern "C" void __cxa_free_exception(void *thrown_exception) throw();
+extern "C" void __cxa_free_exception(void *thrown_exception) _LIBCXXRT_NOEXCEPT;
extern "C" void __cxa_free_dependent_exception(void *thrown_exception);
extern "C" void* __dynamic_cast(const void *sub,
const __class_type_info *src,
@@ -198,7 +198,7 @@
*/
struct __cxa_dependent_exception
{
-#if __LP64__
+#ifdef __LP64__
void *reserve;
void *primaryException;
#endif
@@ -217,7 +217,7 @@
const char *languageSpecificData;
void *catchTemp;
void *adjustedPtr;
-#if !__LP64__
+#ifndef __LP64__
void *primaryException;
#endif
_Unwind_Exception unwindHeader;
@@ -241,8 +241,8 @@
class exception
{
public:
- virtual ~exception() throw();
- virtual const char* what() const throw();
+ virtual ~exception() _LIBCXXRT_NOEXCEPT;
+ virtual const char* what() const _LIBCXXRT_NOEXCEPT;
};
}
@@ -296,15 +296,80 @@
{
// Forward declaration of standard library terminate() function used to
// abort execution.
- void terminate(void);
+ [[noreturn]] void terminate(void) _LIBCXXRT_NOEXCEPT;
}
using namespace ABI_NAMESPACE;
+#ifdef LIBCXXRT_NO_DEFAULT_TERMINATE_DIAGNOSTICS
+/** The global termination handler. */
+static atomic<terminate_handler> terminateHandler = abort;
+#else
+/**
+ * Callback function used with _Unwind_Backtrace().
+ *
+ * Prints a stack trace. Used only for debugging help.
+ *
+ * Note: As of FreeBSD 8.1, dladdr() still doesn't work properly, so this only
+ * correctly prints function names from public, relocatable, symbols.
+ */
+static _Unwind_Reason_Code trace(struct _Unwind_Context *context, void *c)
+{
+ Dl_info myinfo;
+ int mylookup =
+ dladdr(reinterpret_cast<void *>(__cxa_current_exception_type), &myinfo);
+ void *ip = reinterpret_cast<void*>(_Unwind_GetIP(context));
+ Dl_info info;
+ if (dladdr(ip, &info) != 0)
+ {
+ if (mylookup == 0 || strcmp(info.dli_fname, myinfo.dli_fname) != 0)
+ {
+ printf("%p:%s() in %s\n", ip, info.dli_sname, info.dli_fname);
+ }
+ }
+ return _URC_CONTINUE_UNWIND;
+}
+
+static void terminate_with_diagnostics() {
+ __cxa_eh_globals *globals = __cxa_get_globals();
+ __cxa_exception *ex = globals->caughtExceptions;
+
+ if (ex != nullptr) {
+ fprintf(stderr, "Terminating due to uncaught exception %p", static_cast<void*>(ex));
+ ex = realExceptionFromException(ex);
+ static const __class_type_info *e_ti =
+ static_cast<const __class_type_info*>(&typeid(std::exception));
+ const __class_type_info *throw_ti =
+ dynamic_cast<const __class_type_info*>(ex->exceptionType);
+ if (throw_ti)
+ {
+ std::exception *e =
+ static_cast<std::exception*>(e_ti->cast_to(static_cast<void*>(ex+1), throw_ti));
+ if (e)
+ {
+ fprintf(stderr, " '%s'", e->what());
+ }
+ }
+
+ size_t bufferSize = 128;
+ char *demangled = static_cast<char*>(malloc(bufferSize));
+ const char *mangled = ex->exceptionType->name();
+ int status;
+ demangled = __cxa_demangle(mangled, demangled, &bufferSize, &status);
+ fprintf(stderr, " of type %s\n",
+ status == 0 ? demangled : mangled);
+ if (status == 0) { free(demangled); }
+
+ _Unwind_Backtrace(trace, 0);
+ }
+ abort();
+}
/** The global termination handler. */
-static atomic<terminate_handler> terminateHandler = abort;
+static atomic<terminate_handler> terminateHandler = terminate_with_diagnostics;
+#endif
+
/** The global unexpected exception handler. */
static atomic<unexpected_handler> unexpectedHandler = std::terminate;
@@ -611,7 +676,7 @@
* emergency buffer if malloc() fails, and may block if there are no such
* buffers available.
*/
-extern "C" void *__cxa_allocate_exception(size_t thrown_size) throw()
+extern "C" void *__cxa_allocate_exception(size_t thrown_size) _LIBCXXRT_NOEXCEPT
{
size_t size = thrown_size + sizeof(__cxa_exception);
char *buffer = alloc_or_die(size);
@@ -633,7 +698,7 @@
* In this implementation, it is also called by __cxa_end_catch() and during
* thread cleanup.
*/
-extern "C" void __cxa_free_exception(void *thrown_exception) throw()
+extern "C" void __cxa_free_exception(void *thrown_exception) _LIBCXXRT_NOEXCEPT
{
__cxa_exception *ex = reinterpret_cast<__cxa_exception*>(thrown_exception) - 1;
// Free the object that was thrown, calling its destructor
@@ -680,39 +745,15 @@
free_exception(reinterpret_cast<char*>(ex));
}
-/**
- * Callback function used with _Unwind_Backtrace().
- *
- * Prints a stack trace. Used only for debugging help.
- *
- * Note: As of FreeBSD 8.1, dladd() still doesn't work properly, so this only
- * correctly prints function names from public, relocatable, symbols.
- */
-static _Unwind_Reason_Code trace(struct _Unwind_Context *context, void *c)
-{
- Dl_info myinfo;
- int mylookup =
- dladdr(reinterpret_cast<void *>(__cxa_current_exception_type), &myinfo);
- void *ip = reinterpret_cast<void*>(_Unwind_GetIP(context));
- Dl_info info;
- if (dladdr(ip, &info) != 0)
- {
- if (mylookup == 0 || strcmp(info.dli_fname, myinfo.dli_fname) != 0)
- {
- printf("%p:%s() in %s\n", ip, info.dli_sname, info.dli_fname);
- }
- }
- return _URC_CONTINUE_UNWIND;
-}
-
/**
* Report a failure that occurred when attempting to throw an exception.
*
* If the failure happened by falling off the end of the stack without finding
- * a handler, prints a back trace before aborting.
+ * a handler, catch the exception before calling terminate. The default
+ * terminate handler will print a backtrace before aborting.
*/
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
-extern "C" void *__cxa_begin_catch(void *e) throw();
+extern "C" void *__cxa_begin_catch(void *e) _LIBCXXRT_NOEXCEPT;
#else
extern "C" void *__cxa_begin_catch(void *e);
#endif
@@ -731,41 +772,6 @@
#endif
case _URC_END_OF_STACK:
__cxa_begin_catch (&(thrown_exception->unwindHeader));
- std::terminate();
- fprintf(stderr, "Terminating due to uncaught exception %p",
- static_cast<void*>(thrown_exception));
- thrown_exception = realExceptionFromException(thrown_exception);
- static const __class_type_info *e_ti =
- static_cast<const __class_type_info*>(&typeid(std::exception));
- const __class_type_info *throw_ti =
- dynamic_cast<const __class_type_info*>(thrown_exception->exceptionType);
- if (throw_ti)
- {
- std::exception *e =
- static_cast<std::exception*>(e_ti->cast_to(static_cast<void*>(thrown_exception+1),
- throw_ti));
- if (e)
- {
- fprintf(stderr, " '%s'", e->what());
- }
- }
-
- size_t bufferSize = 128;
- char *demangled = static_cast<char*>(malloc(bufferSize));
- const char *mangled = thrown_exception->exceptionType->name();
- int status;
- demangled = __cxa_demangle(mangled, demangled, &bufferSize, &status);
- fprintf(stderr, " of type %s\n",
- status == 0 ? demangled : mangled);
- if (status == 0) { free(demangled); }
- // Print a back trace if no handler is found.
- // TODO: Make this optional
-#ifndef __arm__
- _Unwind_Backtrace(trace, 0);
-#endif
-
- // Just abort. No need to call std::terminate for the second time
- abort();
break;
}
std::terminate();
@@ -794,7 +800,7 @@
}
extern "C" __cxa_exception *__cxa_init_primary_exception(
- void *object, std::type_info* tinfo, void (*dest)(void *)) throw() {
+ void *object, std::type_info* tinfo, void (*dest)(void *)) _LIBCXXRT_NOEXCEPT {
__cxa_exception *ex = reinterpret_cast<__cxa_exception*>(object) - 1;
ex->referenceCount = 0;
@@ -1245,7 +1251,7 @@
* C++ exceptions) of the unadjusted pointer (for foreign exceptions).
*/
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
-extern "C" void *__cxa_begin_catch(void *e) throw()
+extern "C" void *__cxa_begin_catch(void *e) _LIBCXXRT_NOEXCEPT
#else
extern "C" void *__cxa_begin_catch(void *e)
#endif
@@ -1439,7 +1445,7 @@
*
* This function does not return.
*/
-extern "C" void __cxa_call_terminate(void *exception) throw()
+extern "C" void __cxa_call_terminate(void*exception) _LIBCXXRT_NOEXCEPT
{
std::terminate();
// Should not be reached.
@@ -1467,14 +1473,14 @@
/**
* Sets whether unexpected and terminate handlers should be thread-local.
*/
- void set_use_thread_local_handlers(bool flag) throw()
+ void set_use_thread_local_handlers(bool flag) _LIBCXXRT_NOEXCEPT
{
thread_local_handlers = flag;
}
/**
* Sets a thread-local unexpected handler.
*/
- unexpected_handler set_unexpected(unexpected_handler f) throw()
+ unexpected_handler set_unexpected(unexpected_handler f) _LIBCXXRT_NOEXCEPT
{
static __cxa_thread_info *info = thread_info();
unexpected_handler old = info->unexpectedHandler;
@@ -1484,7 +1490,7 @@
/**
* Sets a thread-local terminate handler.
*/
- terminate_handler set_terminate(terminate_handler f) throw()
+ terminate_handler set_terminate(terminate_handler f) _LIBCXXRT_NOEXCEPT
{
static __cxa_thread_info *info = thread_info();
terminate_handler old = info->terminateHandler;
@@ -1499,7 +1505,7 @@
* Sets the function that will be called when an exception specification is
* violated.
*/
- unexpected_handler set_unexpected(unexpected_handler f) throw()
+ unexpected_handler set_unexpected(unexpected_handler f) _LIBCXXRT_NOEXCEPT
{
if (thread_local_handlers) { return pathscale::set_unexpected(f); }
@@ -1508,7 +1514,7 @@
/**
* Sets the function that is called to terminate the program.
*/
- terminate_handler set_terminate(terminate_handler f) throw()
+ terminate_handler set_terminate(terminate_handler f) _LIBCXXRT_NOEXCEPT
{
if (thread_local_handlers) { return pathscale::set_terminate(f); }
@@ -1518,7 +1524,7 @@
* Terminates the program, calling a custom terminate implementation if
* required.
*/
- void terminate()
+ [[noreturn]] void terminate() _LIBCXXRT_NOEXCEPT
{
static __cxa_thread_info *info = thread_info();
if (0 != info && 0 != info->terminateHandler)
@@ -1551,7 +1557,7 @@
* Returns whether there are any exceptions currently being thrown that
* have not been caught. This can occur inside a nested catch statement.
*/
- bool uncaught_exception() throw()
+ bool uncaught_exception() _LIBCXXRT_NOEXCEPT
{
__cxa_thread_info *info = thread_info();
return info->globals.uncaughtExceptions != 0;
@@ -1560,7 +1566,7 @@
* Returns the number of exceptions currently being thrown that have not
* been caught. This can occur inside a nested catch statement.
*/
- int uncaught_exceptions() throw()
+ int uncaught_exceptions() _LIBCXXRT_NOEXCEPT
{
__cxa_thread_info *info = thread_info();
return info->globals.uncaughtExceptions;
@@ -1568,7 +1574,7 @@
/**
* Returns the current unexpected handler.
*/
- unexpected_handler get_unexpected() throw()
+ unexpected_handler get_unexpected() _LIBCXXRT_NOEXCEPT
{
__cxa_thread_info *info = thread_info();
if (info->unexpectedHandler)
@@ -1580,7 +1586,7 @@
/**
* Returns the current terminate handler.
*/
- terminate_handler get_terminate() throw()
+ terminate_handler get_terminate() _LIBCXXRT_NOEXCEPT
{
__cxa_thread_info *info = thread_info();
if (info->terminateHandler)
diff --git a/contrib/libcxxrt/libelftc_dem_gnu3.c b/contrib/libcxxrt/libelftc_dem_gnu3.c
--- a/contrib/libcxxrt/libelftc_dem_gnu3.c
+++ b/contrib/libcxxrt/libelftc_dem_gnu3.c
@@ -200,9 +200,9 @@
static char *
vector_str_get_flat(const struct vector_str *v, size_t *l)
{
- ssize_t elem_pos, elem_size, rtn_size;
size_t i;
- char *rtn;
+ char *rtn, *p;
+ ssize_t rtn_size;
if (v == NULL || v->size == 0)
return (NULL);
@@ -213,16 +213,9 @@
if ((rtn = malloc(sizeof(char) * (rtn_size + 1))) == NULL)
return (NULL);
- elem_pos = 0;
- for (i = 0; i < v->size; ++i) {
- elem_size = strlen(v->container[i]);
-
- memcpy(rtn + elem_pos, v->container[i], elem_size);
-
- elem_pos += elem_size;
- }
-
- rtn[rtn_size] = '\0';
+ p = rtn;
+ for (i = 0; i < v->size; ++i)
+ p = stpcpy(p, v->container[i]);
if (l != NULL)
*l = rtn_size;
@@ -305,6 +298,21 @@
return (true);
}
+/**
+ * @brief Implements strlcpy() without result.
+ */
+static void
+copy_string(char *dst, const char *src, size_t dsize)
+{
+ size_t remain;
+ if ((remain = dsize))
+ while (--remain)
+ if (!(*dst++ = *src++))
+ break;
+ if (!remain && dsize)
+ *dst = 0;
+}
+
/**
* @brief Push back string to vector.
* @return false at failed, true at success.
@@ -322,7 +330,7 @@
if ((v->container[v->size] = malloc(sizeof(char) * (len + 1))) == NULL)
return (false);
- snprintf(v->container[v->size], len + 1, "%s", str);
+ copy_string(v->container[v->size], str, len + 1);
++v->size;
@@ -420,8 +428,8 @@
vector_str_substr(const struct vector_str *v, size_t begin, size_t end,
size_t *r_len)
{
- size_t cur, i, len;
- char *rtn;
+ char *rtn, *p;
+ size_t i, len;
if (v == NULL || begin > end)
return (NULL);
@@ -436,13 +444,9 @@
if (r_len != NULL)
*r_len = len;
- cur = 0;
- for (i = begin; i < end + 1; ++i) {
- len = strlen(v->container[i]);
- memcpy(rtn + cur, v->container[i], len);
- cur += len;
- }
- rtn[cur] = '\0';
+ p = rtn;
+ for (i = begin; i < end + 1; ++i)
+ p = stpcpy(p, v->container[i]);
return (rtn);
}
@@ -2510,61 +2514,56 @@
return (1);
case SIMPLE_HASH('S', 'd'):
- /* std::basic_iostream<char, std::char_traits<char> > */
+ /* std::basic_iostream<char, std::char_traits<char>> */
if (!DEM_PUSH_STR(ddata, "std::basic_iostream<char, "
- "std::char_traits<char> >"))
+ "std::char_traits<char>>"))
return (0);
ddata->last_sname = "basic_iostream";
ddata->cur += 2;
if (*ddata->cur == 'I')
return (cpp_demangle_read_subst_stdtmpl(ddata,
"std::basic_iostream<char, std::char_traits"
- "<char> >"));
+ "<char>>"));
return (1);
case SIMPLE_HASH('S', 'i'):
- /* std::basic_istream<char, std::char_traits<char> > */
+ /* std::basic_istream<char, std::char_traits<char>> */
if (!DEM_PUSH_STR(ddata, "std::basic_istream<char, "
- "std::char_traits<char> >"))
+ "std::char_traits<char>>"))
return (0);
ddata->last_sname = "basic_istream";
ddata->cur += 2;
if (*ddata->cur == 'I')
return (cpp_demangle_read_subst_stdtmpl(ddata,
"std::basic_istream<char, std::char_traits"
- "<char> >"));
+ "<char>>"));
return (1);
case SIMPLE_HASH('S', 'o'):
- /* std::basic_ostream<char, std::char_traits<char> > */
+ /* std::basic_ostream<char, std::char_traits<char>> */
if (!DEM_PUSH_STR(ddata, "std::basic_ostream<char, "
- "std::char_traits<char> >"))
+ "std::char_traits<char>>"))
return (0);
ddata->last_sname = "basic_ostream";
ddata->cur += 2;
if (*ddata->cur == 'I')
return (cpp_demangle_read_subst_stdtmpl(ddata,
"std::basic_ostream<char, std::char_traits"
- "<char> >"));
+ "<char>>"));
return (1);
case SIMPLE_HASH('S', 's'):
/*
- * std::basic_string<char, std::char_traits<char>,
- * std::allocator<char> >
- *
- * a.k.a std::string
+ * std::string for consistency with libcxxabi
*/
- if (!DEM_PUSH_STR(ddata, "std::basic_string<char, "
- "std::char_traits<char>, std::allocator<char> >"))
- return (0);
+ if (!DEM_PUSH_STR(ddata, "std::string"))
+ return 0;
ddata->last_sname = "string";
ddata->cur += 2;
if (*ddata->cur == 'I')
- return (cpp_demangle_read_subst_stdtmpl(ddata,
- "std::basic_string<char, std::char_traits<char>,"
- " std::allocator<char> >"));
- return (1);
+ return cpp_demangle_read_subst_stdtmpl(ddata,
+ "std::string");
+ return 1;
case SIMPLE_HASH('S', 't'):
/* std:: */
@@ -2740,7 +2739,7 @@
cpp_demangle_read_tmpl_args(struct cpp_demangle_data *ddata)
{
struct vector_str *v;
- size_t arg_len, idx, limit, size;
+ size_t arg_len, idx, limit;
char *arg;
if (ddata == NULL || *ddata->cur == '\0')
@@ -2773,12 +2772,7 @@
if (*ddata->cur == 'E') {
++ddata->cur;
- size = v->size;
- assert(size > 0);
- if (!strncmp(v->container[size - 1], ">", 1)) {
- if (!DEM_PUSH_STR(ddata, " >"))
- return (0);
- } else if (!DEM_PUSH_STR(ddata, ">"))
+ if (!DEM_PUSH_STR(ddata, ">"))
return (0);
ddata->is_tmpl = true;
break;
diff --git a/contrib/libcxxrt/memory.cc b/contrib/libcxxrt/memory.cc
--- a/contrib/libcxxrt/memory.cc
+++ b/contrib/libcxxrt/memory.cc
@@ -73,10 +73,8 @@
#if __cplusplus < 201103L
-#define NOEXCEPT throw()
#define BADALLOC throw(std::bad_alloc)
#else
-#define NOEXCEPT noexcept
#define BADALLOC
#endif
@@ -138,14 +136,14 @@
__attribute__((weak))
-void* operator new(size_t size, const std::nothrow_t &) NOEXCEPT
+void* operator new(size_t size, const std::nothrow_t &) _LIBCXXRT_NOEXCEPT
{
return noexcept_new<(::operator new)>(size);
}
__attribute__((weak))
-void operator delete(void * ptr) NOEXCEPT
+void operator delete(void * ptr) _LIBCXXRT_NOEXCEPT
{
free(ptr);
}
@@ -159,14 +157,14 @@
__attribute__((weak))
-void * operator new[](size_t size, const std::nothrow_t &) NOEXCEPT
+void * operator new[](size_t size, const std::nothrow_t &) _LIBCXXRT_NOEXCEPT
{
return noexcept_new<(::operator new[])>(size);
}
__attribute__((weak))
-void operator delete[](void * ptr) NOEXCEPT
+void operator delete[](void * ptr) _LIBCXXRT_NOEXCEPT
{
::operator delete(ptr);
}
@@ -176,14 +174,14 @@
#if __cplusplus >= 201402L
__attribute__((weak))
-void operator delete(void * ptr, size_t) NOEXCEPT
+void operator delete(void * ptr, size_t) _LIBCXXRT_NOEXCEPT
{
::operator delete(ptr);
}
__attribute__((weak))
-void operator delete[](void * ptr, size_t) NOEXCEPT
+void operator delete[](void * ptr, size_t) _LIBCXXRT_NOEXCEPT
{
::operator delete(ptr);
}
diff --git a/contrib/libcxxrt/noexception.cc b/contrib/libcxxrt/noexception.cc
--- a/contrib/libcxxrt/noexception.cc
+++ b/contrib/libcxxrt/noexception.cc
@@ -30,7 +30,7 @@
* Returns whether there are any exceptions currently being thrown that
* have not been caught. Without exception support this is always false.
*/
- bool uncaught_exception() throw()
+ bool uncaught_exception() _LIBCXXRT_NOEXCEPT
{
return false;
}
@@ -38,7 +38,7 @@
* Returns the number of exceptions currently being thrown that have not
* been caught. Without exception support this is always 0.
*/
- int uncaught_exceptions() throw()
+ int uncaught_exceptions() _LIBCXXRT_NOEXCEPT
{
return 0;
}
diff --git a/contrib/libcxxrt/stdexcept.h b/contrib/libcxxrt/stdexcept.h
--- a/contrib/libcxxrt/stdexcept.h
+++ b/contrib/libcxxrt/stdexcept.h
@@ -29,17 +29,19 @@
* of the exceptions for the runtime to use.
*/
+#include "cxxabi.h"
+
namespace std
{
class exception
{
public:
- exception() throw();
- exception(const exception&) throw();
- exception& operator=(const exception&) throw();
+ exception() _LIBCXXRT_NOEXCEPT;
+ exception(const exception&) _LIBCXXRT_NOEXCEPT;
+ exception& operator=(const exception&) _LIBCXXRT_NOEXCEPT;
virtual ~exception();
- virtual const char* what() const throw();
+ virtual const char* what() const _LIBCXXRT_NOEXCEPT;
};
@@ -49,11 +51,11 @@
class bad_alloc: public exception
{
public:
- bad_alloc() throw();
- bad_alloc(const bad_alloc&) throw();
- bad_alloc& operator=(const bad_alloc&) throw();
+ bad_alloc() _LIBCXXRT_NOEXCEPT;
+ bad_alloc(const bad_alloc&) _LIBCXXRT_NOEXCEPT;
+ bad_alloc& operator=(const bad_alloc&) _LIBCXXRT_NOEXCEPT;
~bad_alloc();
- virtual const char* what() const throw();
+ virtual const char* what() const _LIBCXXRT_NOEXCEPT;
};
/**
@@ -61,11 +63,11 @@
*/
class bad_cast: public exception {
public:
- bad_cast() throw();
- bad_cast(const bad_cast&) throw();
- bad_cast& operator=(const bad_cast&) throw();
+ bad_cast() _LIBCXXRT_NOEXCEPT;
+ bad_cast(const bad_cast&) _LIBCXXRT_NOEXCEPT;
+ bad_cast& operator=(const bad_cast&) _LIBCXXRT_NOEXCEPT;
virtual ~bad_cast();
- virtual const char* what() const throw();
+ virtual const char* what() const _LIBCXXRT_NOEXCEPT;
};
/**
@@ -74,21 +76,21 @@
class bad_typeid: public exception
{
public:
- bad_typeid() throw();
- bad_typeid(const bad_typeid &__rhs) throw();
+ bad_typeid() _LIBCXXRT_NOEXCEPT;
+ bad_typeid(const bad_typeid &__rhs) _LIBCXXRT_NOEXCEPT;
virtual ~bad_typeid();
- bad_typeid& operator=(const bad_typeid &__rhs) throw();
- virtual const char* what() const throw();
+ bad_typeid& operator=(const bad_typeid &__rhs) _LIBCXXRT_NOEXCEPT;
+ virtual const char* what() const _LIBCXXRT_NOEXCEPT;
};
class bad_array_new_length: public bad_alloc
{
public:
- bad_array_new_length() throw();
- bad_array_new_length(const bad_array_new_length&) throw();
- bad_array_new_length& operator=(const bad_array_new_length&) throw();
+ bad_array_new_length() _LIBCXXRT_NOEXCEPT;
+ bad_array_new_length(const bad_array_new_length&) _LIBCXXRT_NOEXCEPT;
+ bad_array_new_length& operator=(const bad_array_new_length&) _LIBCXXRT_NOEXCEPT;
virtual ~bad_array_new_length();
- virtual const char *what() const throw();
+ virtual const char *what() const _LIBCXXRT_NOEXCEPT;
};
diff --git a/contrib/libcxxrt/stdexcept.cc b/contrib/libcxxrt/stdexcept.cc
--- a/contrib/libcxxrt/stdexcept.cc
+++ b/contrib/libcxxrt/stdexcept.cc
@@ -31,66 +31,66 @@
namespace std {
-exception::exception() throw() {}
+exception::exception() _LIBCXXRT_NOEXCEPT {}
exception::~exception() {}
-exception::exception(const exception&) throw() {}
-exception& exception::operator=(const exception&) throw()
+exception::exception(const exception&) _LIBCXXRT_NOEXCEPT {}
+exception& exception::operator=(const exception&) _LIBCXXRT_NOEXCEPT
{
return *this;
}
-const char* exception::what() const throw()
+const char* exception::what() const _LIBCXXRT_NOEXCEPT
{
return "std::exception";
}
-bad_alloc::bad_alloc() throw() {}
+bad_alloc::bad_alloc() _LIBCXXRT_NOEXCEPT {}
bad_alloc::~bad_alloc() {}
-bad_alloc::bad_alloc(const bad_alloc&) throw() {}
-bad_alloc& bad_alloc::operator=(const bad_alloc&) throw()
+bad_alloc::bad_alloc(const bad_alloc&) _LIBCXXRT_NOEXCEPT {}
+bad_alloc& bad_alloc::operator=(const bad_alloc&) _LIBCXXRT_NOEXCEPT
{
return *this;
}
-const char* bad_alloc::what() const throw()
+const char* bad_alloc::what() const _LIBCXXRT_NOEXCEPT
{
return "cxxrt::bad_alloc";
}
-bad_cast::bad_cast() throw() {}
+bad_cast::bad_cast() _LIBCXXRT_NOEXCEPT {}
bad_cast::~bad_cast() {}
-bad_cast::bad_cast(const bad_cast&) throw() {}
-bad_cast& bad_cast::operator=(const bad_cast&) throw()
+bad_cast::bad_cast(const bad_cast&) _LIBCXXRT_NOEXCEPT {}
+bad_cast& bad_cast::operator=(const bad_cast&) _LIBCXXRT_NOEXCEPT
{
return *this;
}
-const char* bad_cast::what() const throw()
+const char* bad_cast::what() const _LIBCXXRT_NOEXCEPT
{
return "std::bad_cast";
}
-bad_typeid::bad_typeid() throw() {}
+bad_typeid::bad_typeid() _LIBCXXRT_NOEXCEPT {}
bad_typeid::~bad_typeid() {}
-bad_typeid::bad_typeid(const bad_typeid &__rhs) throw() {}
-bad_typeid& bad_typeid::operator=(const bad_typeid &__rhs) throw()
+bad_typeid::bad_typeid(const bad_typeid &__rhs) _LIBCXXRT_NOEXCEPT {}
+bad_typeid& bad_typeid::operator=(const bad_typeid &__rhs) _LIBCXXRT_NOEXCEPT
{
return *this;
}
-const char* bad_typeid::what() const throw()
+const char* bad_typeid::what() const _LIBCXXRT_NOEXCEPT
{
return "std::bad_typeid";
}
-bad_array_new_length::bad_array_new_length() throw() {}
+bad_array_new_length::bad_array_new_length() _LIBCXXRT_NOEXCEPT {}
bad_array_new_length::~bad_array_new_length() {}
-bad_array_new_length::bad_array_new_length(const bad_array_new_length&) throw() {}
-bad_array_new_length& bad_array_new_length::operator=(const bad_array_new_length&) throw()
+bad_array_new_length::bad_array_new_length(const bad_array_new_length&) _LIBCXXRT_NOEXCEPT {}
+bad_array_new_length& bad_array_new_length::operator=(const bad_array_new_length&) _LIBCXXRT_NOEXCEPT
{
return *this;
}
-const char* bad_array_new_length::what() const throw()
+const char* bad_array_new_length::what() const _LIBCXXRT_NOEXCEPT
{
return "std::bad_array_new_length";
}

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 7, 11:40 PM (20 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14507678
Default Alt Text
D47238.diff (25 KB)

Event Timeline