Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102049285
D47238.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
25 KB
Referenced Files
None
Subscribers
None
D47238.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D47238: update libcxxrt to 698997bfde1fc81b0bc0bfd1a1e5e3ad6f33b634
Attached
Detach File
Event Timeline
Log In to Comment