xref: /aosp_15_r20/art/runtime/common_throws.h (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2012 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_COMMON_THROWS_H_
18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_COMMON_THROWS_H_
19*795d594fSAndroid Build Coastguard Worker 
20*795d594fSAndroid Build Coastguard Worker #include <string_view>
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker #include "base/locks.h"
23*795d594fSAndroid Build Coastguard Worker #include "base/macros.h"
24*795d594fSAndroid Build Coastguard Worker #include "obj_ptr.h"
25*795d594fSAndroid Build Coastguard Worker 
26*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN {
27*795d594fSAndroid Build Coastguard Worker namespace mirror {
28*795d594fSAndroid Build Coastguard Worker class Class;
29*795d594fSAndroid Build Coastguard Worker class Object;
30*795d594fSAndroid Build Coastguard Worker class MethodType;
31*795d594fSAndroid Build Coastguard Worker }  // namespace mirror
32*795d594fSAndroid Build Coastguard Worker class ArtField;
33*795d594fSAndroid Build Coastguard Worker class ArtMethod;
34*795d594fSAndroid Build Coastguard Worker class DexFile;
35*795d594fSAndroid Build Coastguard Worker enum InvokeType : uint32_t;
36*795d594fSAndroid Build Coastguard Worker class Signature;
37*795d594fSAndroid Build Coastguard Worker enum class StackType;
38*795d594fSAndroid Build Coastguard Worker 
39*795d594fSAndroid Build Coastguard Worker // The descriptor of the transaction abort exception.
40*795d594fSAndroid Build Coastguard Worker constexpr const char kTransactionAbortErrorDescriptor[] = "Ldalvik/system/TransactionAbortError;";
41*795d594fSAndroid Build Coastguard Worker 
42*795d594fSAndroid Build Coastguard Worker // AbstractMethodError
43*795d594fSAndroid Build Coastguard Worker 
44*795d594fSAndroid Build Coastguard Worker void ThrowAbstractMethodError(ArtMethod* method)
45*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
46*795d594fSAndroid Build Coastguard Worker 
47*795d594fSAndroid Build Coastguard Worker void ThrowAbstractMethodError(uint32_t method_idx, const DexFile& dex_file)
48*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
49*795d594fSAndroid Build Coastguard Worker 
50*795d594fSAndroid Build Coastguard Worker // ArithmeticException
51*795d594fSAndroid Build Coastguard Worker 
52*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowArithmeticExceptionDivideByZero() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
53*795d594fSAndroid Build Coastguard Worker 
54*795d594fSAndroid Build Coastguard Worker // ArrayIndexOutOfBoundsException
55*795d594fSAndroid Build Coastguard Worker 
56*795d594fSAndroid Build Coastguard Worker void ThrowArrayIndexOutOfBoundsException(int index, int length)
57*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
58*795d594fSAndroid Build Coastguard Worker 
59*795d594fSAndroid Build Coastguard Worker // ArrayStoreException
60*795d594fSAndroid Build Coastguard Worker 
61*795d594fSAndroid Build Coastguard Worker void ThrowArrayStoreException(ObjPtr<mirror::Class> element_class,
62*795d594fSAndroid Build Coastguard Worker                               ObjPtr<mirror::Class> array_class)
63*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
64*795d594fSAndroid Build Coastguard Worker 
65*795d594fSAndroid Build Coastguard Worker // BootstrapMethodError
66*795d594fSAndroid Build Coastguard Worker 
67*795d594fSAndroid Build Coastguard Worker void ThrowBootstrapMethodError(const char* fmt, ...)
68*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
69*795d594fSAndroid Build Coastguard Worker 
70*795d594fSAndroid Build Coastguard Worker void ThrowWrappedBootstrapMethodError(const char* fmt, ...)
71*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
72*795d594fSAndroid Build Coastguard Worker 
73*795d594fSAndroid Build Coastguard Worker // ClassCircularityError
74*795d594fSAndroid Build Coastguard Worker 
75*795d594fSAndroid Build Coastguard Worker void ThrowClassCircularityError(ObjPtr<mirror::Class> c)
76*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
77*795d594fSAndroid Build Coastguard Worker 
78*795d594fSAndroid Build Coastguard Worker void ThrowClassCircularityError(ObjPtr<mirror::Class> c, const char* fmt, ...)
79*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
80*795d594fSAndroid Build Coastguard Worker 
81*795d594fSAndroid Build Coastguard Worker // ClassCastException
82*795d594fSAndroid Build Coastguard Worker 
83*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowClassCastException(ObjPtr<mirror::Class> dest_type, ObjPtr<mirror::Class> src_type)
84*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
85*795d594fSAndroid Build Coastguard Worker 
86*795d594fSAndroid Build Coastguard Worker void ThrowClassCastException(const char* msg)
87*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
88*795d594fSAndroid Build Coastguard Worker 
89*795d594fSAndroid Build Coastguard Worker // ClassFormatError
90*795d594fSAndroid Build Coastguard Worker 
91*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowClassFormatError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
92*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 2, 3))) REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
93*795d594fSAndroid Build Coastguard Worker 
94*795d594fSAndroid Build Coastguard Worker // IllegalAccessError
95*795d594fSAndroid Build Coastguard Worker 
96*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIllegalAccessErrorClass(ObjPtr<mirror::Class> referrer,
97*795d594fSAndroid Build Coastguard Worker                                          ObjPtr<mirror::Class> accessed)
98*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
99*795d594fSAndroid Build Coastguard Worker 
100*795d594fSAndroid Build Coastguard Worker void ThrowIllegalAccessErrorClassForMethodDispatch(ObjPtr<mirror::Class> referrer,
101*795d594fSAndroid Build Coastguard Worker                                                    ObjPtr<mirror::Class> accessed,
102*795d594fSAndroid Build Coastguard Worker                                                    ArtMethod* called,
103*795d594fSAndroid Build Coastguard Worker                                                    InvokeType type)
104*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
105*795d594fSAndroid Build Coastguard Worker 
106*795d594fSAndroid Build Coastguard Worker void ThrowIllegalAccessErrorMethod(ObjPtr<mirror::Class> referrer, ArtMethod* accessed)
107*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
108*795d594fSAndroid Build Coastguard Worker 
109*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIllegalAccessErrorField(ObjPtr<mirror::Class> referrer, ArtField* accessed)
110*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
111*795d594fSAndroid Build Coastguard Worker 
112*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIllegalAccessErrorFinalField(ArtMethod* referrer, ArtField* accessed)
113*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
114*795d594fSAndroid Build Coastguard Worker 
115*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIllegalAccessError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
116*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 2, 3)))
117*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
118*795d594fSAndroid Build Coastguard Worker 
119*795d594fSAndroid Build Coastguard Worker void ThrowIllegalAccessErrorForImplementingMethod(ObjPtr<mirror::Class> klass,
120*795d594fSAndroid Build Coastguard Worker                                                   ArtMethod* implementation_method,
121*795d594fSAndroid Build Coastguard Worker                                                   ArtMethod* interface_method)
122*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
123*795d594fSAndroid Build Coastguard Worker 
124*795d594fSAndroid Build Coastguard Worker // IllegalAccessException
125*795d594fSAndroid Build Coastguard Worker 
126*795d594fSAndroid Build Coastguard Worker void ThrowIllegalAccessException(const char* msg)
127*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
128*795d594fSAndroid Build Coastguard Worker 
129*795d594fSAndroid Build Coastguard Worker // IllegalArgumentException
130*795d594fSAndroid Build Coastguard Worker 
131*795d594fSAndroid Build Coastguard Worker void ThrowIllegalArgumentException(const char* msg)
132*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
133*795d594fSAndroid Build Coastguard Worker 
134*795d594fSAndroid Build Coastguard Worker // IllegalAccessException
135*795d594fSAndroid Build Coastguard Worker 
136*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIllegalStateException(const char* msg)
137*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
138*795d594fSAndroid Build Coastguard Worker 
139*795d594fSAndroid Build Coastguard Worker // IncompatibleClassChangeError
140*795d594fSAndroid Build Coastguard Worker 
141*795d594fSAndroid Build Coastguard Worker void ThrowIncompatibleClassChangeError(InvokeType expected_type,
142*795d594fSAndroid Build Coastguard Worker                                        InvokeType found_type,
143*795d594fSAndroid Build Coastguard Worker                                        ArtMethod* method,
144*795d594fSAndroid Build Coastguard Worker                                        ArtMethod* referrer)
145*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
146*795d594fSAndroid Build Coastguard Worker 
147*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIncompatibleClassChangeErrorClassForInterfaceDispatch(
148*795d594fSAndroid Build Coastguard Worker     ArtMethod* interface_method, ObjPtr<mirror::Object> this_object, ArtMethod* referrer)
149*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
150*795d594fSAndroid Build Coastguard Worker 
151*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowIncompatibleClassChangeErrorField(
152*795d594fSAndroid Build Coastguard Worker     ArtField* resolved_field, bool is_static, ArtMethod* referrer)
153*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
154*795d594fSAndroid Build Coastguard Worker 
155*795d594fSAndroid Build Coastguard Worker void ThrowIncompatibleClassChangeError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
156*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 2, 3)))
157*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
158*795d594fSAndroid Build Coastguard Worker 
159*795d594fSAndroid Build Coastguard Worker void ThrowIncompatibleClassChangeErrorForMethodConflict(ArtMethod* method)
160*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
161*795d594fSAndroid Build Coastguard Worker 
162*795d594fSAndroid Build Coastguard Worker // IndexOutOfBoundsException
163*795d594fSAndroid Build Coastguard Worker 
164*795d594fSAndroid Build Coastguard Worker void ThrowIndexOutOfBoundsException(int index, int length)
165*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
166*795d594fSAndroid Build Coastguard Worker 
167*795d594fSAndroid Build Coastguard Worker // InternalError
168*795d594fSAndroid Build Coastguard Worker 
169*795d594fSAndroid Build Coastguard Worker void ThrowInternalError(const char* fmt, ...)
170*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 1, 2)))
171*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
172*795d594fSAndroid Build Coastguard Worker 
173*795d594fSAndroid Build Coastguard Worker // IOException
174*795d594fSAndroid Build Coastguard Worker 
175*795d594fSAndroid Build Coastguard Worker void ThrowIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
176*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
177*795d594fSAndroid Build Coastguard Worker 
178*795d594fSAndroid Build Coastguard Worker void ThrowWrappedIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
179*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
180*795d594fSAndroid Build Coastguard Worker 
181*795d594fSAndroid Build Coastguard Worker // LinkageError
182*795d594fSAndroid Build Coastguard Worker 
183*795d594fSAndroid Build Coastguard Worker void ThrowLinkageError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
184*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 2, 3)))
185*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
186*795d594fSAndroid Build Coastguard Worker 
187*795d594fSAndroid Build Coastguard Worker void ThrowWrappedLinkageError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
188*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 2, 3)))
189*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
190*795d594fSAndroid Build Coastguard Worker 
191*795d594fSAndroid Build Coastguard Worker // NegativeArraySizeException
192*795d594fSAndroid Build Coastguard Worker 
193*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowNegativeArraySizeException(int size)
194*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
195*795d594fSAndroid Build Coastguard Worker 
196*795d594fSAndroid Build Coastguard Worker void ThrowNegativeArraySizeException(const char* msg)
197*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
198*795d594fSAndroid Build Coastguard Worker 
199*795d594fSAndroid Build Coastguard Worker 
200*795d594fSAndroid Build Coastguard Worker // NoSuchFieldError
201*795d594fSAndroid Build Coastguard Worker 
202*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowNoSuchFieldError(std::string_view scope,
203*795d594fSAndroid Build Coastguard Worker                                   ObjPtr<mirror::Class> c,
204*795d594fSAndroid Build Coastguard Worker                                   std::string_view type,
205*795d594fSAndroid Build Coastguard Worker                                   std::string_view name)
206*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
207*795d594fSAndroid Build Coastguard Worker 
208*795d594fSAndroid Build Coastguard Worker void ThrowNoSuchFieldException(ObjPtr<mirror::Class> c, std::string_view name)
209*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
210*795d594fSAndroid Build Coastguard Worker 
211*795d594fSAndroid Build Coastguard Worker // NoSuchMethodError
212*795d594fSAndroid Build Coastguard Worker 
213*795d594fSAndroid Build Coastguard Worker void ThrowNoSuchMethodError(InvokeType type,
214*795d594fSAndroid Build Coastguard Worker                             ObjPtr<mirror::Class> c,
215*795d594fSAndroid Build Coastguard Worker                             std::string_view name,
216*795d594fSAndroid Build Coastguard Worker                             const Signature& signature)
217*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
218*795d594fSAndroid Build Coastguard Worker 
219*795d594fSAndroid Build Coastguard Worker void ThrowNoSuchMethodError(ObjPtr<mirror::Class> c,
220*795d594fSAndroid Build Coastguard Worker                             std::string_view name,
221*795d594fSAndroid Build Coastguard Worker                             const Signature& signature)
222*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
223*795d594fSAndroid Build Coastguard Worker 
224*795d594fSAndroid Build Coastguard Worker // NullPointerException
225*795d594fSAndroid Build Coastguard Worker EXPORT
226*795d594fSAndroid Build Coastguard Worker void ThrowNullPointerExceptionForFieldAccess(ArtField* field, ArtMethod* method, bool is_read)
227*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
228*795d594fSAndroid Build Coastguard Worker 
229*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowNullPointerExceptionForMethodAccess(uint32_t method_idx, InvokeType type)
230*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
231*795d594fSAndroid Build Coastguard Worker 
232*795d594fSAndroid Build Coastguard Worker void ThrowNullPointerExceptionForMethodAccess(ArtMethod* method, InvokeType type)
233*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
234*795d594fSAndroid Build Coastguard Worker 
235*795d594fSAndroid Build Coastguard Worker void ThrowNullPointerExceptionFromDexPC(bool check_address = false, uintptr_t addr = 0)
236*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
237*795d594fSAndroid Build Coastguard Worker 
238*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowNullPointerException(const char* msg)
239*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
240*795d594fSAndroid Build Coastguard Worker 
241*795d594fSAndroid Build Coastguard Worker EXPORT void ThrowNullPointerException()
242*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
243*795d594fSAndroid Build Coastguard Worker 
244*795d594fSAndroid Build Coastguard Worker // ReadOnlyBufferException
245*795d594fSAndroid Build Coastguard Worker 
246*795d594fSAndroid Build Coastguard Worker void ThrowReadOnlyBufferException() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
247*795d594fSAndroid Build Coastguard Worker 
248*795d594fSAndroid Build Coastguard Worker // RuntimeException
249*795d594fSAndroid Build Coastguard Worker 
250*795d594fSAndroid Build Coastguard Worker void ThrowRuntimeException(const char* fmt, ...)
251*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 1, 2)))
252*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
253*795d594fSAndroid Build Coastguard Worker 
254*795d594fSAndroid Build Coastguard Worker // SecurityException
255*795d594fSAndroid Build Coastguard Worker 
256*795d594fSAndroid Build Coastguard Worker void ThrowSecurityException(const char* fmt, ...)
257*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 1, 2)))
258*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
259*795d594fSAndroid Build Coastguard Worker 
260*795d594fSAndroid Build Coastguard Worker // Stack overflow.
261*795d594fSAndroid Build Coastguard Worker 
262*795d594fSAndroid Build Coastguard Worker template <StackType stack_type>
263*795d594fSAndroid Build Coastguard Worker void ThrowStackOverflowError(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
264*795d594fSAndroid Build Coastguard Worker 
265*795d594fSAndroid Build Coastguard Worker // StringIndexOutOfBoundsException
266*795d594fSAndroid Build Coastguard Worker 
267*795d594fSAndroid Build Coastguard Worker void ThrowStringIndexOutOfBoundsException(int index, int length)
268*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
269*795d594fSAndroid Build Coastguard Worker 
270*795d594fSAndroid Build Coastguard Worker // UnsupportedOperationException
271*795d594fSAndroid Build Coastguard Worker 
272*795d594fSAndroid Build Coastguard Worker void ThrowUnsupportedOperationException() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
273*795d594fSAndroid Build Coastguard Worker 
274*795d594fSAndroid Build Coastguard Worker // VerifyError
275*795d594fSAndroid Build Coastguard Worker 
276*795d594fSAndroid Build Coastguard Worker void ThrowVerifyError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
277*795d594fSAndroid Build Coastguard Worker     __attribute__((__format__(__printf__, 2, 3)))
278*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
279*795d594fSAndroid Build Coastguard Worker 
280*795d594fSAndroid Build Coastguard Worker // WrongMethodTypeException
281*795d594fSAndroid Build Coastguard Worker 
282*795d594fSAndroid Build Coastguard Worker void ThrowWrongMethodTypeException(ObjPtr<mirror::MethodType> callee_type,
283*795d594fSAndroid Build Coastguard Worker                                    ObjPtr<mirror::MethodType> callsite_type)
284*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
285*795d594fSAndroid Build Coastguard Worker 
286*795d594fSAndroid Build Coastguard Worker void ThrowWrongMethodTypeException(const std::string& expected_descriptor,
287*795d594fSAndroid Build Coastguard Worker                                    const std::string& actual_descriptor)
288*795d594fSAndroid Build Coastguard Worker     REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
289*795d594fSAndroid Build Coastguard Worker 
290*795d594fSAndroid Build Coastguard Worker }  // namespace art
291*795d594fSAndroid Build Coastguard Worker 
292*795d594fSAndroid Build Coastguard Worker #endif  // ART_RUNTIME_COMMON_THROWS_H_
293