unsafe private static IntPtr MulticastDelegateInvoke(ref CallConversionParameters conversionParams) { // Create a transition block on the stack. // Note that SizeOfFrameArgumentArray does overflow checks with sufficient margin to prevent overflows here int nStackBytes = conversionParams._calleeArgs.SizeOfFrameArgumentArray(); int dwAllocaSize = TransitionBlock.GetNegSpaceSize() + sizeof(TransitionBlock) + nStackBytes; IntPtr invokeTargetPtr = Intrinsics.AddrOf((InvokeTargetDel)InvokeTarget); for (int i = 0; i < conversionParams.MulticastDelegateCallCount; i++) { conversionParams.PrepareNextMulticastDelegateCall(i); conversionParams._copyReturnValue = (i == (conversionParams.MulticastDelegateCallCount - 1)); RuntimeAugments.RunFunctionWithConservativelyReportedBuffer(dwAllocaSize, invokeTargetPtr, ref conversionParams); System.Diagnostics.DebugAnnotations.PreviousCallContainsDebuggerStepInCode(); } return conversionParams._invokeReturnValue; }