Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/libcxxrt/auxhelper.cc
39476 views
1
/*
2
* Copyright 2010-2011 PathScale, Inc. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are met:
6
*
7
* 1. Redistributions of source code must retain the above copyright notice,
8
* this list of conditions and the following disclaimer.
9
*
10
* 2. Redistributions in binary form must reproduce the above copyright notice,
11
* this list of conditions and the following disclaimer in the documentation
12
* and/or other materials provided with the distribution.
13
*
14
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
15
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
18
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
*/
26
27
/**
28
* aux.cc - Compiler helper functions.
29
*
30
* The functions declared in this file are intended to be called only by code
31
* that is automatically generated by C++ compilers for some common cases.
32
*/
33
34
#include <stdlib.h>
35
#include "stdexcept.h"
36
37
namespace {
38
/**
39
* Throw an exception if we're compiling with exceptions, otherwise abort.
40
*/
41
template<typename T>
42
void throw_exception()
43
{
44
#if !defined(_CXXRT_NO_EXCEPTIONS)
45
throw T();
46
#else
47
abort();
48
#endif
49
}
50
}
51
52
/**
53
* Called to generate a bad cast exception. This function is intended to allow
54
* compilers to insert code generating this exception without needing to
55
* duplicate the code for throwing the exception in every call site.
56
*/
57
extern "C" void __cxa_bad_cast()
58
{
59
throw_exception<std::bad_cast>();
60
}
61
62
/**
63
* Called to generate a bad typeid exception. This function is intended to
64
* allow compilers to insert code generating this exception without needing to
65
* duplicate the code for throwing the exception in every call site.
66
*/
67
extern "C" void __cxa_bad_typeid()
68
{
69
throw_exception<std::bad_typeid>();
70
}
71
72
/**
73
* Compilers may (but are not required to) set any pure-virtual function's
74
* vtable entry to this function. This makes debugging slightly easier, as
75
* users can add a breakpoint on this function to tell if they've accidentally
76
* called a pure-virtual function.
77
*/
78
extern "C" void __cxa_pure_virtual()
79
{
80
abort();
81
}
82
83
/**
84
* Compilers may (but are not required to) set any deleted-virtual function's
85
* vtable entry to this function. This makes debugging slightly easier, as
86
* users can add a breakpoint on this function to tell if they've accidentally
87
* called a deleted-virtual function.
88
*/
89
extern "C" void __cxa_deleted_virtual()
90
{
91
abort();
92
}
93
94
extern "C" void __cxa_throw_bad_array_new_length()
95
{
96
throw_exception<std::bad_array_new_length>();
97
}
98
99