summaryrefslogtreecommitdiff
path: root/src/auxhelper.cc
diff options
context:
space:
mode:
authorRyan Pavlik <rpavlik@iastate.edu>2011-10-05 17:08:53 -0500
committerRyan Pavlik <rpavlik@iastate.edu>2011-10-05 17:10:18 -0500
commit16b463fd357b600888eb90cdb407f3e87023a412 (patch)
tree98dec94561ef77fa08f42debf8eb0d6cf8efc2d8 /src/auxhelper.cc
parent8518868b24c9acdb15bf46adadc44758066fa7c4 (diff)
downloadlibcxxrt-16b463fd357b600888eb90cdb407f3e87023a412.tar.gz
libcxxrt-16b463fd357b600888eb90cdb407f3e87023a412.tar.bz2
libcxxrt-16b463fd357b600888eb90cdb407f3e87023a412.tar.xz
Files named aux.anything break Windows.
Diffstat (limited to 'src/auxhelper.cc')
-rw-r--r--src/auxhelper.cc41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/auxhelper.cc b/src/auxhelper.cc
new file mode 100644
index 0000000..e8ce6e7
--- /dev/null
+++ b/src/auxhelper.cc
@@ -0,0 +1,41 @@
+/**
+ * aux.cc - Compiler helper functions.
+ *
+ * The functions declared in this file are intended to be called only by code
+ * that is automatically generated by C++ compilers for some common cases.
+ */
+
+#include <stdlib.h>
+#include "stdexcept.h"
+
+/**
+ * Called to generate a bad cast exception. This function is intended to allow
+ * compilers to insert code generating this exception without needing to
+ * duplicate the code for throwing the exception in every call site.
+ */
+extern "C" void __cxa_bad_cast()
+{
+ throw std::bad_cast();
+}
+
+/**
+ * Called to generate a bad typeid exception. This function is intended to
+ * allow compilers to insert code generating this exception without needing to
+ * duplicate the code for throwing the exception in every call site.
+ */
+extern "C" void __cxa_bad_typeid()
+{
+ throw std::bad_typeid();
+}
+
+/**
+ * Compilers may (but are not required to) set any pure-virtual function's
+ * vtable entry to this function. This makes debugging slightly easier, as
+ * users can add a breakpoint on this function to tell if they've accidentally
+ * called a pure-virtual function.
+ */
+extern "C" void __cxa_pure_virtual()
+{
+ abort();
+}
+