case CEE_THROW:
- if (compIsForInlining())
- {
- // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- // TODO: Will this be too strict, given that we will inline many basic blocks?
- // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
- /* Do we have just the exception on the stack ?*/
-
- if (verCurrentState.esStackDepth != 1)
- {
- /* if not, just don't inline the method */
-
- compInlineResult->NoteFatal(InlineObservation::CALLEE_THROW_WITH_INVALID_STACK);
- return;
- }
- }
-
if (tiVerificationNeeded)
{
tiRetVal = impStackTop().seTypeInfo;
}
}
- block->bbSetRunRarely(); // any block with a throw is rare
- /* Pop the exception object and create the 'throw' helper call */
+ // Any block with a throw is rarely executed.
+ block->bbSetRunRarely();
+ // Pop the exception object and create the 'throw' helper call
op1 = gtNewHelperCallNode(CORINFO_HELP_THROW, TYP_VOID, gtNewCallArgs(impPopStack().val));
+ // Fall through to clear out the eval stack.
+
EVAL_APPEND:
if (verCurrentState.esStackDepth > 0)
{
INLINE_OBSERVATION(RANDOM_REJECT, bool, "random reject", FATAL, CALLEE)
INLINE_OBSERVATION(STACK_CRAWL_MARK, bool, "uses stack crawl mark", FATAL, CALLEE)
INLINE_OBSERVATION(STFLD_NEEDS_HELPER, bool, "stfld needs helper", FATAL, CALLEE)
-INLINE_OBSERVATION(THROW_WITH_INVALID_STACK, bool, "throw with invalid stack", FATAL, CALLEE)
INLINE_OBSERVATION(TOO_MANY_ARGUMENTS, bool, "too many arguments", FATAL, CALLEE)
INLINE_OBSERVATION(TOO_MANY_LOCALS, bool, "too many locals", FATAL, CALLEE)
INLINE_OBSERVATION(EXPLICIT_TAIL_PREFIX, bool, "explicit tail prefix in callee",FATAL, CALLEE)