diff --git a/src/inc/corinfo.h b/src/inc/corinfo.h index cd48999cd03e..8d8d735c1997 100644 --- a/src/inc/corinfo.h +++ b/src/inc/corinfo.h @@ -213,11 +213,11 @@ TODO: Talk about initializing strutures before use #define SELECTANY extern __declspec(selectany) #endif -SELECTANY const GUID JITEEVersionIdentifier = { /* b6af83a1-ca48-46c6-b7b0-5d7d6a79a5c5 */ - 0xb6af83a1, - 0xca48, - 0x46c6, - {0xb7, 0xb0, 0x5d, 0x7d, 0x6a, 0x79, 0xa5, 0xc5} +SELECTANY const GUID JITEEVersionIdentifier = { /* C4B63AD8-0D4D-4103-A928-A981B230F2C4 */ + 0xc4b63ad8, + 0xd4d, + 0x4103, + { 0xa9, 0x28, 0xa9, 0x81, 0xb2, 0x30, 0xf2, 0xc4 } }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -643,6 +643,7 @@ enum CorInfoHelpFunc CORINFO_HELP_THROW_ARGUMENTEXCEPTION, // throw ArgumentException CORINFO_HELP_THROW_ARGUMENTOUTOFRANGEEXCEPTION, // throw ArgumentOutOfRangeException CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED, // throw PlatformNotSupportedException + CORINFO_HELP_THROW_ARGTYPE_NOT_SUPPORTED, // throw NotSupportedException CORINFO_HELP_JIT_PINVOKE_BEGIN, // Transition to preemptive mode before a P/Invoke, frame is the first argument CORINFO_HELP_JIT_PINVOKE_END, // Transition to cooperative mode after a P/Invoke, frame is the first argument diff --git a/src/inc/jithelpers.h b/src/inc/jithelpers.h index 1419cda2deed..6d8e86f9a239 100644 --- a/src/inc/jithelpers.h +++ b/src/inc/jithelpers.h @@ -347,6 +347,7 @@ JITHELPER(CORINFO_HELP_THROW_ARGUMENTEXCEPTION, JIT_ThrowArgumentException, CORINFO_HELP_SIG_REG_ONLY) JITHELPER(CORINFO_HELP_THROW_ARGUMENTOUTOFRANGEEXCEPTION, JIT_ThrowArgumentOutOfRangeException, CORINFO_HELP_SIG_REG_ONLY) JITHELPER(CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED, JIT_ThrowPlatformNotSupportedException, CORINFO_HELP_SIG_REG_ONLY) + JITHELPER(CORINFO_HELP_THROW_ARGTYPE_NOT_SUPPORTED, JIT_ThrowArgTypeNotSupportedException, CORINFO_HELP_SIG_REG_ONLY) JITHELPER(CORINFO_HELP_JIT_PINVOKE_BEGIN, NULL, CORINFO_HELP_SIG_UNDEF) JITHELPER(CORINFO_HELP_JIT_PINVOKE_END, NULL, CORINFO_HELP_SIG_UNDEF) diff --git a/src/jit/flowgraph.cpp b/src/jit/flowgraph.cpp index b6ae5c0dbb83..5524d9b6bae1 100644 --- a/src/jit/flowgraph.cpp +++ b/src/jit/flowgraph.cpp @@ -6843,7 +6843,8 @@ bool Compiler::fgIsThrow(GenTreePtr tree) (tree->gtCall.gtCallMethHnd == eeFindHelper(CORINFO_HELP_THROWNULLREF)) || (tree->gtCall.gtCallMethHnd == eeFindHelper(CORINFO_HELP_THROW)) || (tree->gtCall.gtCallMethHnd == eeFindHelper(CORINFO_HELP_RETHROW)) || - (tree->gtCall.gtCallMethHnd == eeFindHelper(CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED))) + (tree->gtCall.gtCallMethHnd == eeFindHelper(CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED)) || + (tree->gtCall.gtCallMethHnd == eeFindHelper(CORINFO_HELP_THROW_ARGTYPE_NOT_SUPPORTED))) { noway_assert(tree->gtFlags & GTF_CALL); noway_assert(tree->gtFlags & GTF_EXCEPT); diff --git a/src/jit/utils.cpp b/src/jit/utils.cpp index d506e916b825..257c38c1687b 100644 --- a/src/jit/utils.cpp +++ b/src/jit/utils.cpp @@ -1477,6 +1477,7 @@ void HelperCallProperties::init() case CORINFO_HELP_THROW_ARGUMENTEXCEPTION: case CORINFO_HELP_THROW_ARGUMENTOUTOFRANGEEXCEPTION: case CORINFO_HELP_THROW_PLATFORM_NOT_SUPPORTED: + case CORINFO_HELP_THROW_ARGTYPE_NOT_SUPPORTED: break; diff --git a/src/mscorlib/Resources/Strings.resx b/src/mscorlib/Resources/Strings.resx index ef3821abf181..8fde41ac6d81 100644 --- a/src/mscorlib/Resources/Strings.resx +++ b/src/mscorlib/Resources/Strings.resx @@ -3697,4 +3697,7 @@ HashCode is a mutable struct and should not be compared with other HashCodes. + + Specified type is not supported + diff --git a/src/vm/jithelpers.cpp b/src/vm/jithelpers.cpp index 1611d585a504..975114e9e49d 100644 --- a/src/vm/jithelpers.cpp +++ b/src/vm/jithelpers.cpp @@ -5127,6 +5127,24 @@ HCIMPL0(void, JIT_ThrowPlatformNotSupportedException) } HCIMPLEND +/*********************************************************************/ +HCIMPL0(void, JIT_ThrowArgTypeNotSupportedException) +{ + FCALL_CONTRACT; + + /* Make no assumptions about the current machine state */ + ResetCurrentContext(); + + FC_GC_POLL_NOT_NEEDED(); // throws always open up for GC + + HELPER_METHOD_FRAME_BEGIN_ATTRIB_NOPOLL(Frame::FRAME_ATTR_EXCEPTION); // Set up a frame + + COMPlusThrow(kNotSupportedException, W("Arg_TypeNotSupported")); + + HELPER_METHOD_FRAME_END(); +} +HCIMPLEND + /*********************************************************************/ HCIMPL0(void, JIT_Overflow) {