blob: 29a056e9ea644fc4dd62b17ed2d238c24aab47bf [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
Elliott Hughes76b61672012-12-12 17:47:30 -080020#include "base/mutex.h"
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070021#include "obj_ptr.h"
Ian Rogers87e552d2012-08-31 15:54:48 -070022
23namespace art {
Ian Rogers2dd0e2c2013-01-24 12:42:14 -080024namespace mirror {
Igor Murashkin2ffb7032017-11-08 13:35:21 -080025class Class;
26class Object;
27class MethodType;
Ian Rogers2dd0e2c2013-01-24 12:42:14 -080028} // namespace mirror
Mathieu Chartierc7853442015-03-27 14:35:38 -070029class ArtField;
Mathieu Chartiere401d142015-04-22 13:56:20 -070030class ArtMethod;
Alex Light705ad492015-09-21 11:36:30 -070031class DexFile;
Andreas Gampe04c6ab92017-06-08 21:49:14 -070032enum InvokeType : uint32_t;
Ian Rogersd91d6d62013-09-25 20:26:14 -070033class Signature;
Ian Rogers2dd0e2c2013-01-24 12:42:14 -080034class StringPiece;
Ian Rogers87e552d2012-08-31 15:54:48 -070035
Sebastien Hertz56adf602013-07-09 17:27:07 +020036// AbstractMethodError
37
Mathieu Chartiere401d142015-04-22 13:56:20 -070038void ThrowAbstractMethodError(ArtMethod* method)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070039 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Sebastien Hertz56adf602013-07-09 17:27:07 +020040
Alex Light705ad492015-09-21 11:36:30 -070041void ThrowAbstractMethodError(uint32_t method_idx, const DexFile& dex_file)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070042 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Alex Light705ad492015-09-21 11:36:30 -070043
Ian Rogers62d6c772013-02-27 08:32:07 -080044// ArithmeticException
Ian Rogers87e552d2012-08-31 15:54:48 -070045
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070046void ThrowArithmeticExceptionDivideByZero() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080047
48// ArrayIndexOutOfBoundsException
49
50void ThrowArrayIndexOutOfBoundsException(int index, int length)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070051 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070052
Ian Rogers62d6c772013-02-27 08:32:07 -080053// ArrayStoreException
54
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070055void ThrowArrayStoreException(ObjPtr<mirror::Class> element_class,
56 ObjPtr<mirror::Class> array_class)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070057 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070058
Orion Hodsonc069a302017-01-18 09:23:12 +000059// BootstrapMethodError
60
61void ThrowBootstrapMethodError(const char* fmt, ...)
62 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
63
64void ThrowWrappedBootstrapMethodError(const char* fmt, ...)
65 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
66
Ian Rogers62d6c772013-02-27 08:32:07 -080067// ClassCircularityError
68
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070069void ThrowClassCircularityError(ObjPtr<mirror::Class> c)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070070 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080071
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070072void ThrowClassCircularityError(ObjPtr<mirror::Class> c, const char* fmt, ...)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070073 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Roland Levillain989ab3b2016-05-18 15:52:54 +010074
Ian Rogers62d6c772013-02-27 08:32:07 -080075// ClassCastException
76
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070077void ThrowClassCastException(ObjPtr<mirror::Class> dest_type, ObjPtr<mirror::Class> src_type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070078 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080079
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +000080void ThrowClassCastException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070081 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -080082
83// ClassFormatError
84
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070085void ThrowClassFormatError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -080086 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070087 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070088
89// IllegalAccessError
90
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070091void ThrowIllegalAccessErrorClass(ObjPtr<mirror::Class> referrer, ObjPtr<mirror::Class> accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070092 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070093
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -070094void ThrowIllegalAccessErrorClassForMethodDispatch(ObjPtr<mirror::Class> referrer,
95 ObjPtr<mirror::Class> accessed,
Mathieu Chartiere401d142015-04-22 13:56:20 -070096 ArtMethod* called,
Ian Rogers87e552d2012-08-31 15:54:48 -070097 InvokeType type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -070098 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -070099
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700100void ThrowIllegalAccessErrorMethod(ObjPtr<mirror::Class> referrer, ArtMethod* accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700101 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700102
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700103void ThrowIllegalAccessErrorField(ObjPtr<mirror::Class> referrer, ArtField* accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700104 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700105
Mathieu Chartiere401d142015-04-22 13:56:20 -0700106void ThrowIllegalAccessErrorFinalField(ArtMethod* referrer, ArtField* accessed)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700107 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700108
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700109void ThrowIllegalAccessError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800110 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700111 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800112
Jeff Hao11d5d8f2014-03-26 15:08:20 -0700113// IllegalAccessException
114
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000115void ThrowIllegalAccessException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700116 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Jeff Hao11d5d8f2014-03-26 15:08:20 -0700117
Ian Rogers62d6c772013-02-27 08:32:07 -0800118// IllegalArgumentException
119
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000120void ThrowIllegalArgumentException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700121 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800122
Orion Hodson928033d2018-02-07 05:30:54 +0000123// IllegalAccessException
124
125void ThrowIllegalStateException(const char* msg)
126 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
127
Ian Rogers87e552d2012-08-31 15:54:48 -0700128// IncompatibleClassChangeError
129
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700130void ThrowIncompatibleClassChangeError(InvokeType expected_type,
131 InvokeType found_type,
132 ArtMethod* method,
133 ArtMethod* referrer)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700134 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700135
Alex Light705ad492015-09-21 11:36:30 -0700136void ThrowIncompatibleClassChangeErrorClassForInterfaceSuper(ArtMethod* method,
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700137 ObjPtr<mirror::Class> target_class,
138 ObjPtr<mirror::Object> this_object,
Alex Light705ad492015-09-21 11:36:30 -0700139 ArtMethod* referrer)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700140 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Alex Light705ad492015-09-21 11:36:30 -0700141
Mathieu Chartiere401d142015-04-22 13:56:20 -0700142void ThrowIncompatibleClassChangeErrorClassForInterfaceDispatch(ArtMethod* interface_method,
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700143 ObjPtr<mirror::Object> this_object,
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 ThrowIncompatibleClassChangeErrorField(ArtField* resolved_field,
148 bool is_static,
Mathieu Chartiere401d142015-04-22 13:56:20 -0700149 ArtMethod* referrer)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700150 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700151
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700152void ThrowIncompatibleClassChangeError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800153 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700154 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700155
Alex Light9139e002015-10-09 15:59:48 -0700156void ThrowIncompatibleClassChangeErrorForMethodConflict(ArtMethod* method)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700157 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Alex Light9139e002015-10-09 15:59:48 -0700158
Orion Hodson928033d2018-02-07 05:30:54 +0000159// IndexOutOfBoundsException
160
161void ThrowIndexOutOfBoundsException(int index, int length)
162 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
163
Alex Lightdb01a092017-04-03 15:39:55 -0700164// InternalError
165
166void ThrowInternalError(const char* fmt, ...)
167 __attribute__((__format__(__printf__, 1, 2)))
168 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
169
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700170// IOException
171
172void ThrowIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700173 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800174
Andreas Gampe329d1882014-04-08 10:32:19 -0700175void ThrowWrappedIOException(const char* fmt, ...) __attribute__((__format__(__printf__, 1, 2)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700176 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Andreas Gampe329d1882014-04-08 10:32:19 -0700177
Ian Rogers62d6c772013-02-27 08:32:07 -0800178// LinkageError
179
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700180void ThrowLinkageError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800181 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700182 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800183
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700184void ThrowWrappedLinkageError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Vladimir Markod5e5a0e2015-05-08 12:26:59 +0100185 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700186 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Vladimir Markod5e5a0e2015-05-08 12:26:59 +0100187
Ian Rogers62d6c772013-02-27 08:32:07 -0800188// NegativeArraySizeException
189
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700190void ThrowNegativeArraySizeException(int size)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700191 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800192
Ian Rogers8d31bbd2013-10-13 10:44:14 -0700193void ThrowNegativeArraySizeException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700194 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800195
196
197// NoSuchFieldError
198
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700199void ThrowNoSuchFieldError(const StringPiece& scope,
200 ObjPtr<mirror::Class> c,
201 const StringPiece& type,
202 const StringPiece& name)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700203 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800204
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700205void ThrowNoSuchFieldException(ObjPtr<mirror::Class> c, const StringPiece& name)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700206 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Mathieu Chartier4e067782015-05-13 13:13:24 -0700207
Ian Rogers87e552d2012-08-31 15:54:48 -0700208// NoSuchMethodError
209
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700210void ThrowNoSuchMethodError(InvokeType type,
211 ObjPtr<mirror::Class> c,
212 const StringPiece& name,
Ian Rogersd91d6d62013-09-25 20:26:14 -0700213 const Signature& signature)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700214 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700215
Ian Rogers62d6c772013-02-27 08:32:07 -0800216// NullPointerException
217
Mathieu Chartierc7853442015-03-27 14:35:38 -0700218void ThrowNullPointerExceptionForFieldAccess(ArtField* field,
Ian Rogers62d6c772013-02-27 08:32:07 -0800219 bool is_read)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700220 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800221
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000222void ThrowNullPointerExceptionForMethodAccess(uint32_t method_idx,
Ian Rogers62d6c772013-02-27 08:32:07 -0800223 InvokeType type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700224 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800225
Mathieu Chartiere401d142015-04-22 13:56:20 -0700226void ThrowNullPointerExceptionForMethodAccess(ArtMethod* method,
Sebastien Hertz2d6ba512013-05-17 11:31:37 +0200227 InvokeType type)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700228 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Sebastien Hertz2d6ba512013-05-17 11:31:37 +0200229
Nicolas Geoffraye8e11272016-06-28 18:08:46 +0100230void ThrowNullPointerExceptionFromDexPC(bool check_address = false, uintptr_t addr = 0)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700231 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800232
Nicolas Geoffray0aa50ce2015-03-10 11:03:29 +0000233void ThrowNullPointerException(const char* msg)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700234 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800235
Orion Hodson928033d2018-02-07 05:30:54 +0000236// ReadOnlyBufferException
237
238void ThrowReadOnlyBufferException() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
239
Ian Rogers62d6c772013-02-27 08:32:07 -0800240// RuntimeException
241
242void ThrowRuntimeException(const char* fmt, ...)
243 __attribute__((__format__(__printf__, 1, 2)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700244 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers62d6c772013-02-27 08:32:07 -0800245
Leonard Mosescueb842212016-10-06 17:26:36 -0700246// SecurityException
247
248void ThrowSecurityException(const char* fmt, ...)
249 __attribute__((__format__(__printf__, 1, 2)))
250 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
251
Andreas Gampe103992b2016-01-04 15:32:43 -0800252// Stack overflow.
253
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700254void ThrowStackOverflowError(Thread* self) REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Andreas Gampe103992b2016-01-04 15:32:43 -0800255
Vladimir Marko87f3fcb2016-04-28 15:52:11 +0100256// StringIndexOutOfBoundsException
257
258void ThrowStringIndexOutOfBoundsException(int index, int length)
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700259 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Vladimir Marko87f3fcb2016-04-28 15:52:11 +0100260
Orion Hodson928033d2018-02-07 05:30:54 +0000261// UnsupportedOperationException
262
263void ThrowUnsupportedOperationException() REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
264
Ian Rogers62d6c772013-02-27 08:32:07 -0800265// VerifyError
266
Mathieu Chartier6b3d12b2016-10-13 13:59:58 -0700267void ThrowVerifyError(ObjPtr<mirror::Class> referrer, const char* fmt, ...)
Ian Rogers62d6c772013-02-27 08:32:07 -0800268 __attribute__((__format__(__printf__, 2, 3)))
Andreas Gampebdf7f1c2016-08-30 16:38:47 -0700269 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
Ian Rogers87e552d2012-08-31 15:54:48 -0700270
Orion Hodsonc069a302017-01-18 09:23:12 +0000271// WrongMethodTypeException
Orion Hodson928033d2018-02-07 05:30:54 +0000272
Orion Hodsona5dca522018-02-27 12:42:11 +0000273void ThrowWrongMethodTypeException(ObjPtr<mirror::MethodType> callee_type,
274 ObjPtr<mirror::MethodType> callsite_type)
Narayan Kamath208f8572016-08-03 12:46:58 +0100275 REQUIRES_SHARED(Locks::mutator_lock_) COLD_ATTR;
276
Ian Rogers87e552d2012-08-31 15:54:48 -0700277} // namespace art
278
Brian Carlstromfc0e3212013-07-17 14:40:12 -0700279#endif // ART_RUNTIME_COMMON_THROWS_H_