summaryrefslogtreecommitdiff
path: root/src/auxhelper.cc
blob: e8ce6e7b76aa822e4360e922ec161f8a1faf3d84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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();
}