diff options
Diffstat (limited to 'src/System.Private.Reflection.Core/src/System/Reflection/Runtime/MethodInfos/RuntimeMethodInfo.cs')
-rw-r--r-- | src/System.Private.Reflection.Core/src/System/Reflection/Runtime/MethodInfos/RuntimeMethodInfo.cs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/System.Private.Reflection.Core/src/System/Reflection/Runtime/MethodInfos/RuntimeMethodInfo.cs b/src/System.Private.Reflection.Core/src/System/Reflection/Runtime/MethodInfos/RuntimeMethodInfo.cs index 33d73b16a..4af12bfc9 100644 --- a/src/System.Private.Reflection.Core/src/System/Reflection/Runtime/MethodInfos/RuntimeMethodInfo.cs +++ b/src/System.Private.Reflection.Core/src/System/Reflection/Runtime/MethodInfos/RuntimeMethodInfo.cs @@ -354,7 +354,12 @@ namespace System.Reflection.Runtime.MethodInfos if (methodInvoker == null) { if (ReturnType.IsByRef) - throw new NotSupportedException(SR.NotSupported_ByRefReturn); + { + // The invoker is going to dereference and box (for structs) the result of the invocation + // on behalf of the caller. Can't box byref-like types and can't box void. + if (ReturnType.GetElementType().IsByRefLike || ReturnType.GetElementType() == CommonRuntimeTypes.Void) + throw new NotSupportedException(); + } methodInvoker = _lazyMethodInvoker = this.UncachedMethodInvoker; } return methodInvoker; |