From 9af0b59bc920f2a60fc90eeabff55d630b8a6fcc Mon Sep 17 00:00:00 2001 From: Andy Ayers Date: Tue, 12 Mar 2019 16:46:24 -0700 Subject: [PATCH] Don't retain modifiers for instantation stub signatures (dotnet/coreclr#23210) `ConvToJitSig` is not expecting to see modifiers for return types in sigs, so don't bother preserving them when creating instantiation stubs. This comes up for instantiation stubs for methods of `ReadOnlySpan`. Also, if we are preserving modifiers in a sig, make sure to prefix their type handles with `ELEM_TYPE_INTERNAL`. Fixes dotnet/coreclr#23136. Commit migrated from https://github.com/dotnet/coreclr/commit/5831fe40394fcdc34fa161041956d379db433dd6 --- src/coreclr/src/vm/prestub.cpp | 2 +- src/coreclr/src/vm/siginfo.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/coreclr/src/vm/prestub.cpp b/src/coreclr/src/vm/prestub.cpp index a08a2d1..975f86e 100644 --- a/src/coreclr/src/vm/prestub.cpp +++ b/src/coreclr/src/vm/prestub.cpp @@ -1234,7 +1234,7 @@ void CreateInstantiatingILStubTargetSig(MethodDesc *pBaseMD, // Return type SigPointer pReturn = msig.GetReturnProps(); - pReturn.ConvertToInternalExactlyOne(msig.GetModule(), &typeContext, stubSigBuilder, FALSE); + pReturn.ConvertToInternalExactlyOne(msig.GetModule(), &typeContext, stubSigBuilder); #ifndef _TARGET_X86_ // The hidden context parameter diff --git a/src/coreclr/src/vm/siginfo.cpp b/src/coreclr/src/vm/siginfo.cpp index 736e0c7..353abf4 100644 --- a/src/coreclr/src/vm/siginfo.cpp +++ b/src/coreclr/src/vm/siginfo.cpp @@ -321,6 +321,7 @@ void SigPointer::ConvertToInternalExactlyOne(Module* pSigModule, SigTypeContext mdToken tk; IfFailThrowBF(GetToken(&tk), BFA_BAD_COMPLUS_SIG, pSigModule); TypeHandle th = ClassLoader::LoadTypeDefOrRefThrowing(pSigModule, tk); + pSigBuilder->AppendElementType(ELEMENT_TYPE_INTERNAL); pSigBuilder->AppendPointer(th.AsPtr()); ConvertToInternalExactlyOne(pSigModule, pTypeContext, pSigBuilder, bSkipCustomModifier); -- 2.7.4