summaryrefslogtreecommitdiff
path: root/src/vm/method.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/method.cpp')
-rw-r--r--src/vm/method.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/vm/method.cpp b/src/vm/method.cpp
index 6926ce4b6e..3e7271b1fb 100644
--- a/src/vm/method.cpp
+++ b/src/vm/method.cpp
@@ -1396,8 +1396,9 @@ COR_ILMETHOD* MethodDesc::GetILHeader(BOOL fAllowOverrides /*=FALSE*/)
//*******************************************************************************
MetaSig::RETURNTYPE MethodDesc::ReturnsObject(
#ifdef _DEBUG
- bool supportStringConstructors
+ bool supportStringConstructors,
#endif
+ MethodTable** pMT
)
{
CONTRACTL
@@ -1439,7 +1440,19 @@ MetaSig::RETURNTYPE MethodDesc::ReturnsObject(
if (!thValueType.IsTypeDesc())
{
MethodTable * pReturnTypeMT = thValueType.AsMethodTable();
- if(pReturnTypeMT->ContainsPointers())
+ if (pMT != NULL)
+ {
+ *pMT = pReturnTypeMT;
+ }
+
+#ifdef FEATURE_UNIX_AMD64_STRUCT_PASSING
+ if (pReturnTypeMT->IsRegPassedStruct())
+ {
+ return MetaSig::RETVALUETYPE;
+ }
+#endif // !FEATURE_UNIX_AMD64_STRUCT_PASSING
+
+ if (pReturnTypeMT->ContainsPointers())
{
_ASSERTE(pReturnTypeMT->GetNumInstanceFieldBytes() == sizeof(void*));
return MetaSig::RETOBJ;