blob: 843c455878e8b658aec0e8961638a46c127c37e1 [file] [log] [blame]
Ian Rogers87e552d2012-08-31 15:54:48 -07001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Brian Carlstromfc0e3212013-07-17 14:40:12 -070017#ifndef ART_RUNTIME_COMMON_THROWS_H_
18#define ART_RUNTIME_COMMON_THROWS_H_
Ian Rogers87e552d2012-08-31 15:54:48 -070019
Vladimir Marko72101082019-02-05 16:16:30 +000020#include <string_view>
21
Andreas Gampe7fbc4a52018-11-28 08:26:47 -080022#include "base/locks.h"
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070023#include "obj_ptr.h"
Ian Rogers87e552d2012-08-31 15:54:48 -070024
25namespace art {
Ian Rogers2dd0e2c2013-01-24 12:42:14 -080026namespace mirror {
Igor Murashkin2ffb7032017-11-08 13:35:21 -080027class Class;
28class Object;
29class MethodType;
Ian Rogers2dd0e2c2013-01-24 12:42:14 -080030} // namespace mirror
Mathieu Chartierc7853442015-03-27 14:35:38 -070031class ArtField;
Mathieu Chartiere401d142015-04-22 13:56:20 -070032class ArtMethod;
Alex Light705ad492015-09-21 11:36:30 -070033class DexFile;
Andreas Gampe04c6ab92017-06-08 21:49:14 -070034enum InvokeType : uint32_t;
Ian Rogersd91d6d62013-09-25 20:26:14 -070035class Signature;
Ian Rogers87e552d2012-08-31 15:54:48 -070036
Sebastien Hertz56adf602013-07-09 17:27:07 +020037// AbstractMethodError
38
Mathieu Chartiere401d142015-04-22 13:56:20 -070039void ThrowAbstractMethodError(ArtMethod* method)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070040 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Sebastien Hertz56adf602013-07-09 17:27:07 +020041
Alex Light705ad492015-09-21 11:36:30 -070042void ThrowAbstractMethodError(uint32_t method_idx, const DexFile& dex_file)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070043 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Alex Light705ad492015-09-21 11:36:30 -070044
Ian Rogers62d6c772013-02-27 08:32:07 -080045// ArithmeticException
Ian Rogers87e552d2012-08-31 15:54:48 -070046
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070047void ThrowArithmeticExceptionDivideByZero() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080048
49// ArrayIndexOutOfBoundsException
50
51void ThrowArrayIndexOutOfBoundsException(int index, int length)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070052 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070053
Ian Rogers62d6c772013-02-27 08:32:07 -080054// ArrayStoreException
55
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070056void ThrowArrayStoreException(ObjPtr<mirror::Class> element_class,
57 ObjPtr<mirror::Class> array_class)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070058 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070059
Orion Hodsonc069a302017-01-18 09:23:12 +000060// BootstrapMethodError
61
62void ThrowBootstrapMethodError(const char* fmt, ...)
63 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
64
65void ThrowWrappedBootstrapMethodError(const char* fmt, ...)
66 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
67
Ian Rogers62d6c772013-02-27 08:32:07 -080068// ClassCircularityError
69
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070070void ThrowClassCircularityError(ObjPtr<mirror::Class> c)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070071 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080072
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070073void ThrowClassCircularityError(ObjPtr<mirror::Class> c, const char* fmt, ...)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070074 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Roland Levillain989ab3b2016-05-18 15:52:54 +010075
Ian Rogers62d6c772013-02-27 08:32:07 -080076// ClassCastException
77
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070078void ThrowClassCastException(ObjPtr<mirror::Class> dest_type, ObjPtr<mirror::Class> src_type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070079 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080080
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +000081void ThrowClassCastException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070082 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080083
84// ClassFormatError
85
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070086void ThrowClassFormatError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -080087 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070088 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070089
90// IllegalAccessError
91
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070092void ThrowIllegalAccessErrorClass(ObjPtr<mirror::Class> referrer, ObjPtr<mirror::Class> accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070093 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070094
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070095void ThrowIllegalAccessErrorClassForMethodDispatch(ObjPtr<mirror::Class> referrer,
96 ObjPtr<mirror::Class> accessed,
Mathieu Chartiere401d142015-04-22 13:56:20 -070097 ArtMethod* called,
Ian Rogers87e552d2012-08-31 15:54:48 -070098 InvokeType type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070099 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700100
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700101void ThrowIllegalAccessErrorMethod(ObjPtr<mirror::Class> referrer, ArtMethod* accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700102 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700103
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700104void ThrowIllegalAccessErrorField(ObjPtr<mirror::Class> referrer, ArtField* accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700105 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700106
Mathieu Chartiere401d142015-04-22 13:56:20 -0700107void ThrowIllegalAccessErrorFinalField(ArtMethod* referrer, ArtField* accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700108 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700109
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700110void ThrowIllegalAccessError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800111 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700112 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800113
Jeff Hao11d5d8f2014-03-26 15:08:20 -0700114// IllegalAccessException
115
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000116void ThrowIllegalAccessException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700117 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Jeff Hao11d5d8f2014-03-26 15:08:20 -0700118
Ian Rogers62d6c772013-02-27 08:32:07 -0800119// IllegalArgumentException
120
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000121void ThrowIllegalArgumentException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700122 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800123
Orion Hodson928033d2018-02-07 05:30:54 +0000124// IllegalAccessException
125
126void ThrowIllegalStateException(const char* msg)
127 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
128
Ian Rogers87e552d2012-08-31 15:54:48 -0700129// IncompatibleClassChangeError
130
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700131void ThrowIncompatibleClassChangeError(InvokeType expected_type,
132 InvokeType found_type,
133 ArtMethod* method,
134 ArtMethod* referrer)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700135 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700136
Mathieu Chartiere401d142015-04-22 13:56:20 -0700137void ThrowIncompatibleClassChangeErrorClassForInterfaceDispatch(ArtMethod* interface_method,
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700138 ObjPtr<mirror::Object> this_object,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700139 ArtMethod* referrer)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700140 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700141
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700142void ThrowIncompatibleClassChangeErrorField(ArtField* resolved_field,
143 bool is_static,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700144 ArtMethod* referrer)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700145 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700146
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700147void ThrowIncompatibleClassChangeError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800148 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700149 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700150
Alex Light9139e002015-10-09 15:59:48 -0700151void ThrowIncompatibleClassChangeErrorForMethodConflict(ArtMethod* method)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700152 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Alex Light9139e002015-10-09 15:59:48 -0700153
Orion Hodson928033d2018-02-07 05:30:54 +0000154// IndexOutOfBoundsException
155
156void ThrowIndexOutOfBoundsException(int index, int length)
157 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
158
Alex Lightdb01a092017-04-03 15:39:55 -0700159// InternalError
160
161void ThrowInternalError(const char* fmt, ...)
162 __attribute__((__format__(__printf__, 1, 2)))
163 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
164
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700165// IOException
166
167void ThrowIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700168 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800169
Andreas Gampe329d1882014-04-08 10:32:19 -0700170void ThrowWrappedIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700171 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Andreas Gampe329d1882014-04-08 10:32:19 -0700172
Ian Rogers62d6c772013-02-27 08:32:07 -0800173// LinkageError
174
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700175void ThrowLinkageError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800176 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700177 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800178
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700179void ThrowWrappedLinkageError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Vladimir Markod5e5a0e2015-05-08 12:26:59 +0100180 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700181 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Vladimir Markod5e5a0e2015-05-08 12:26:59 +0100182
Ian Rogers62d6c772013-02-27 08:32:07 -0800183// NegativeArraySizeException
184
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700185void ThrowNegativeArraySizeException(int size)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700186 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800187
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700188void ThrowNegativeArraySizeException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700189 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800190
191
192// NoSuchFieldError
193
Vladimir Marko72101082019-02-05 16:16:30 +0000194void ThrowNoSuchFieldError(std::string_view scope,
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700195 ObjPtr<mirror::Class> c,
Vladimir Marko72101082019-02-05 16:16:30 +0000196 std::string_view type,
197 std::string_view name)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700198 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800199
Vladimir Marko72101082019-02-05 16:16:30 +0000200void ThrowNoSuchFieldException(ObjPtr<mirror::Class> c, std::string_view name)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700201 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Mathieu Chartier4e067782015-05-13 13:13:24 -0700202
Ian Rogers87e552d2012-08-31 15:54:48 -0700203// NoSuchMethodError
204
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700205void ThrowNoSuchMethodError(InvokeType type,
206 ObjPtr<mirror::Class> c,
Vladimir Marko72101082019-02-05 16:16:30 +0000207 std::string_view name,
Ian Rogersd91d6d62013-09-25 20:26:14 -0700208 const Signature& signature)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700209 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700210
Ian Rogers62d6c772013-02-27 08:32:07 -0800211// NullPointerException
212
Santiago Aboy Solanes14e8d642022-02-04 14:15:01 +0000213void ThrowNullPointerExceptionForFieldAccess(ArtField* field, ArtMethod* method, bool is_read)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700214 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800215
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000216void ThrowNullPointerExceptionForMethodAccess(uint32_t method_idx,
Ian Rogers62d6c772013-02-27 08:32:07 -0800217 InvokeType type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700218 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800219
Mathieu Chartiere401d142015-04-22 13:56:20 -0700220void ThrowNullPointerExceptionForMethodAccess(ArtMethod* method,
Sebastien Hertz2d6ba512013-05-17 11:31:37 +0200221 InvokeType type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700222 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Sebastien Hertz2d6ba512013-05-17 11:31:37 +0200223
Nicolas Geoffraye8e11272016-06-28 18:08:46 +0100224void ThrowNullPointerExceptionFromDexPC(bool check_address = false, uintptr_t addr = 0)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700225 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800226
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000227void ThrowNullPointerException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700228 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800229
Nicolas Geoffray635967b2019-08-07 10:15:39 +0100230void ThrowNullPointerException()
231 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
232
Orion Hodson928033d2018-02-07 05:30:54 +0000233// ReadOnlyBufferException
234
235void ThrowReadOnlyBufferException() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
236
Ian Rogers62d6c772013-02-27 08:32:07 -0800237// RuntimeException
238
239void ThrowRuntimeException(const char* fmt, ...)
240 __attribute__((__format__(__printf__, 1, 2)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700241 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800242
Leonard Mosescueb842212016-10-06 17:26:36 -0700243// SecurityException
244
245void ThrowSecurityException(const char* fmt, ...)
246 __attribute__((__format__(__printf__, 1, 2)))
247 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
248
Andreas Gampe103992b2016-01-04 15:32:43 -0800249// Stack overflow.
250
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700251void ThrowStackOverflowError(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Andreas Gampe103992b2016-01-04 15:32:43 -0800252
Vladimir Marko87f3fcb2016-04-28 15:52:11 +0100253// StringIndexOutOfBoundsException
254
255void ThrowStringIndexOutOfBoundsException(int index, int length)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700256 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Vladimir Marko87f3fcb2016-04-28 15:52:11 +0100257
Orion Hodson928033d2018-02-07 05:30:54 +0000258// UnsupportedOperationException
259
260void ThrowUnsupportedOperationException() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
261
Ian Rogers62d6c772013-02-27 08:32:07 -0800262// VerifyError
263
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700264void ThrowVerifyError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800265 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700266 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700267
Orion Hodsonc069a302017-01-18 09:23:12 +0000268// WrongMethodTypeException
Orion Hodson928033d2018-02-07 05:30:54 +0000269
Orion Hodsona5dca522018-02-27 12:42:11 +0000270void ThrowWrongMethodTypeException(ObjPtr<mirror::MethodType> callee_type,
271 ObjPtr<mirror::MethodType> callsite_type)
Narayan Kamath208f8572016-08-03 12:46:58 +0100272 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
273
Orion Hodson3f383462018-05-17 14:03:39 +0100274void ThrowWrongMethodTypeException(const std::string& expected_descriptor,
275 const std::string& actual_descriptor)
276 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
277
Ian Rogers87e552d2012-08-31 15:54:48 -0700278} // namespace art
279
Brian Carlstromfc0e3212013-07-17 14:40:12 -0700280#endif // ART_RUNTIME_COMMON_THROWS_H_