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