summaryrefslogtreecommitdiff
path: root/src/auxhelper.cc
diff options
context:
space:
mode:
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();
+}
+