diff options
author | Jan Kotas <jkotas@microsoft.com> | 2016-03-21 09:06:54 -0700 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2016-03-21 17:39:02 -0700 |
commit | dfd9e1b097813e9ad9d02bd0a08a25c0cc4cae32 (patch) | |
tree | 56624c47f88bc2535298efe283282ca798c902e2 /src/vm | |
parent | fc2246d77a951ac2111f242f3bb408af39903270 (diff) | |
download | coreclr-dfd9e1b097813e9ad9d02bd0a08a25c0cc4cae32.tar.gz coreclr-dfd9e1b097813e9ad9d02bd0a08a25c0cc4cae32.tar.bz2 coreclr-dfd9e1b097813e9ad9d02bd0a08a25c0cc4cae32.zip |
Delete legacy netcf compat support (part 1)
Diffstat (limited to 'src/vm')
-rw-r--r-- | src/vm/ceeload.cpp | 10 | ||||
-rw-r--r-- | src/vm/class.h | 15 | ||||
-rw-r--r-- | src/vm/clsload.cpp | 7 | ||||
-rw-r--r-- | src/vm/comdelegate.cpp | 6 | ||||
-rw-r--r-- | src/vm/commodule.cpp | 6 | ||||
-rw-r--r-- | src/vm/domainfile.cpp | 7 | ||||
-rw-r--r-- | src/vm/invokeutil.cpp | 5 | ||||
-rw-r--r-- | src/vm/jitinterface.cpp | 87 | ||||
-rw-r--r-- | src/vm/methodtablebuilder.cpp | 61 | ||||
-rw-r--r-- | src/vm/pefile.cpp | 37 | ||||
-rw-r--r-- | src/vm/reflectioninvocation.cpp | 29 | ||||
-rw-r--r-- | src/vm/securitymeta.cpp | 9 | ||||
-rw-r--r-- | src/vm/staticallocationhelpers.inl | 7 |
13 files changed, 12 insertions, 274 deletions
diff --git a/src/vm/ceeload.cpp b/src/vm/ceeload.cpp index 3d64ebc8bc..3e46941959 100644 --- a/src/vm/ceeload.cpp +++ b/src/vm/ceeload.cpp @@ -2902,12 +2902,6 @@ BOOL Module::IsNoStringInterning() // Default is string interning BOOL fNoStringInterning = FALSE; -#ifdef FEATURE_LEGACYNETCF - // NetCF ignored this attribute - if (GetAppDomain()->GetAppDomainCompatMode() != BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - { -#endif - HRESULT hr; // This flag applies to assembly, but it is stored on module so it can be cached in ngen image @@ -2941,10 +2935,6 @@ BOOL Module::IsNoStringInterning() } } -#ifdef FEATURE_LEGACYNETCF - } -#endif - #ifdef _DEBUG static ConfigDWORD g_NoStringInterning; DWORD dwOverride = g_NoStringInterning.val(CLRConfig::INTERNAL_NoStringInterning); diff --git a/src/vm/class.h b/src/vm/class.h index cad0e0f49c..78c09000e3 100644 --- a/src/vm/class.h +++ b/src/vm/class.h @@ -1677,18 +1677,6 @@ public: /* no op */ } #endif -#ifdef FEATURE_LEGACYNETCF - DWORD IsTypeValidOnNetCF() - { - LIMITED_METHOD_CONTRACT; - return (m_VMFlags & VMFLAG_TYPE_VALID_ON_NETCF); - } - void SetTypeValidOnNetCF() - { - WRAPPER_NO_CONTRACT; - FastInterlockOr(EnsureWritablePages(&m_VMFlags), VMFLAG_TYPE_VALID_ON_NETCF); - } -#endif DWORD HasNonPublicFields() { LIMITED_METHOD_CONTRACT; @@ -2159,9 +2147,6 @@ public: #ifdef FEATURE_REMOTING VMFLAG_CANNOT_BE_BLITTED_BY_OBJECT_CLONER = 0x00000100, // This class has GC type fields, or implements ISerializable or has non-Serializable fields #endif -#ifdef FEATURE_LEGACYNETCF - VMFLAG_TYPE_VALID_ON_NETCF = 0x00000100, // This type would succesfully load on NetCF -#endif VMFLAG_IS_EQUIVALENT_TYPE = 0x00000200, diff --git a/src/vm/clsload.cpp b/src/vm/clsload.cpp index 086f202873..1b8b3eed58 100644 --- a/src/vm/clsload.cpp +++ b/src/vm/clsload.cpp @@ -4473,12 +4473,7 @@ VOID ClassLoader::AddAvailableClassHaveLock( // been obfuscated so that they have duplicate private typedefs. // We must allow this for old assemblies for app compat reasons #ifdef FEATURE_CORECLR -#ifdef FEATURE_LEGACYNETCF - if (!RuntimeIsLegacyNetCF(0)) -#endif - { - pModule->GetAssembly()->ThrowBadImageException(pszNameSpace, pszName, BFA_MULT_TYPE_SAME_NAME); - } + pModule->GetAssembly()->ThrowBadImageException(pszNameSpace, pszName, BFA_MULT_TYPE_SAME_NAME); #else LPCSTR pszVersion = NULL; if (FAILED(pModule->GetMDImport()->GetVersionString(&pszVersion))) diff --git a/src/vm/comdelegate.cpp b/src/vm/comdelegate.cpp index 27a2d00735..5b0a952cd3 100644 --- a/src/vm/comdelegate.cpp +++ b/src/vm/comdelegate.cpp @@ -698,12 +698,6 @@ FCIMPL5(FC_BOOL_RET, COMDelegate::BindToMethodName, // performance gain in some reflection emit scenarios. MethodTable::AllowMethodDataCaching(); -#ifdef FEATURE_LEGACYNETCF - // NetCF has done relaxed signature matching unconditionally - if (GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - flags |= DBF_RelaxedSignature; -#endif - TypeHandle targetType((gc.target != NULL) ? gc.target->GetTrueMethodTable() : NULL); // get the invoke of the delegate MethodTable * pDelegateType = gc.refThis->GetMethodTable(); diff --git a/src/vm/commodule.cpp b/src/vm/commodule.cpp index 41e7aa16e2..7cab6b54f2 100644 --- a/src/vm/commodule.cpp +++ b/src/vm/commodule.cpp @@ -871,12 +871,6 @@ void QCALLTYPE COMModule::GetType(QCall::ModuleHandle pModule, LPCWSTR wszName, BOOL prohibitAsmQualifiedName = TRUE; -#ifdef FEATURE_LEGACYNETCF - // // NetCF type name parser allowed assembly name to be overriden here - if (GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - prohibitAsmQualifiedName = FALSE; -#endif - // Load the class from this assembly (fail if it is in a different one). retTypeHandle = TypeName::GetTypeManaged(wszName, pAssembly, bThrowOnError, bIgnoreCase, pAssembly->IsIntrospectionOnly(), prohibitAsmQualifiedName, NULL, FALSE, &keepAlive); } diff --git a/src/vm/domainfile.cpp b/src/vm/domainfile.cpp index 5c77d608a8..e16f9d8ab5 100644 --- a/src/vm/domainfile.cpp +++ b/src/vm/domainfile.cpp @@ -3804,13 +3804,6 @@ DWORD DomainAssembly::ComputeDebuggingConfig() { dacfFlags |= DACF_USER_OVERRIDE; } -#ifdef FEATURE_LEGACYNETCF - else - if (GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - { - // NetCF did not respect the DebuggableAttribute - } -#endif else { IfFailThrow(GetDebuggingCustomAttributes(&dacfFlags)); diff --git a/src/vm/invokeutil.cpp b/src/vm/invokeutil.cpp index 2211dfeffd..42e5a86249 100644 --- a/src/vm/invokeutil.cpp +++ b/src/vm/invokeutil.cpp @@ -2016,11 +2016,6 @@ AccessCheckOptions::AccessCheckType InvokeUtil::GetInvocationAccessCheckType(BOO // There is no security concern because we are in Full Trust. return AccessCheckOptions::kRestrictedMemberAccessNoTransparency; -#ifdef FEATURE_LEGACYNETCF - if (pAppDomain->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - return AccessCheckOptions::kRestrictedMemberAccess; -#endif // FEATURE_LEGACYNETCF - return AccessCheckOptions::kMemberAccess; #else // !FEATURE_CORECLR diff --git a/src/vm/jitinterface.cpp b/src/vm/jitinterface.cpp index 9c47f6d944..0a5154aa4f 100644 --- a/src/vm/jitinterface.cpp +++ b/src/vm/jitinterface.cpp @@ -1453,43 +1453,6 @@ static CorInfoHelpFunc getInstanceFieldHelper(FieldDesc * pField, CORINFO_ACCESS return (CorInfoHelpFunc)helper; } -#ifdef FEATURE_LEGACYNETCF -void CheckValidTypeOnNetCF(MethodTable * pMT) -{ - STANDARD_VM_CONTRACT; - - // Do this quirk for application assemblies only - if (pMT->GetAssembly()->GetManifestFile()->IsProfileAssembly()) - return; - - if (pMT->GetClass()->IsTypeValidOnNetCF()) - return; - - DWORD dwStaticsSizeOnNetCF = 0; - - // - // NetCF had 64k limit on total size of statics per class. This limit - // is easy to reach by initialized data in C#. Apps took dependency - // on type load exceptions being thrown in this case. - // - ApproxFieldDescIterator fieldIterator(pMT, ApproxFieldDescIterator::STATIC_FIELDS); - for (FieldDesc *pFD = fieldIterator.Next(); pFD != NULL; pFD = fieldIterator.Next()) - { - DWORD fldSize = pFD->LoadSize(); - - // Simulate NetCF behaviour that caused size to wrap around - dwStaticsSizeOnNetCF += (UINT16)fldSize; - - if (dwStaticsSizeOnNetCF > 0xFFFF) - COMPlusThrow(kTypeLoadException); - } - - // Cache the result of the check - pMT->GetClass()->SetTypeValidOnNetCF(); -} -#endif // FEATURE_LEGACYNETCF - - /*********************************************************************/ void CEEInfo::getFieldInfo (CORINFO_RESOLVED_TOKEN * pResolvedToken, CORINFO_METHOD_HANDLE callerHandle, @@ -1520,11 +1483,6 @@ void CEEInfo::getFieldInfo (CORINFO_RESOLVED_TOKEN * pResolvedToken, pResult->offset = pField->GetOffset(); if (pField->IsStatic()) { -#ifdef FEATURE_LEGACYNETCF - if (pFieldMT->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - CheckValidTypeOnNetCF(pFieldMT); -#endif - fieldFlags |= CORINFO_FLG_FIELD_STATIC; if (pField->IsRVA()) @@ -3943,18 +3901,6 @@ CorInfoInitClassResult CEEInfo::initClass( if (pFD == NULL) { -#ifdef FEATURE_LEGACYNETCF - // For methods, NetCF always triggers static constructor as side-effect of JITing, essentially ignoring before field init. - if (pTypeToInitMT->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - { - // This quirk assumes that RunCCTorAsIfNGenImageExists() is TRUE. It would need to be replicated in more places - // if it was not the case. - _ASSERTE(pTypeToInitMT->RunCCTorAsIfNGenImageExists()); - - fIgnoreBeforeFieldInit = true; - } -#endif - if (!fIgnoreBeforeFieldInit && pTypeToInitMT->GetClass()->IsBeforeFieldInit()) { // We can wait for field accesses to run .cctor @@ -7304,20 +7250,6 @@ CorInfoInline CEEInfo::canInline (CORINFO_METHOD_HANDLE hCaller, { Module * pCalleeModule = pCallee->GetModule(); -#ifdef FEATURE_LEGACYNETCF - if (m_pMethodBeingCompiled->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - { - // NetCF did not allow cross-assembly inlining (except for mscorlib) - // and leaf methods - Assembly * pCalleeAssembly = pCalleeModule->GetAssembly(); - Assembly * pOrigCallerAssembly = pOrigCallerModule->GetAssembly(); - if ((pCalleeAssembly != pOrigCallerAssembly) && !pCalleeAssembly->IsSystem()) - { - dwRestrictions |= INLINE_RESPECT_BOUNDARY; - } - } -#endif // FEATURE_LEGACYNETCF - #ifdef FEATURE_PREJIT Assembly * pCalleeAssembly = pCalleeModule->GetAssembly(); @@ -7946,17 +7878,6 @@ bool CEEInfo::canTailCall (CORINFO_METHOD_HANDLE hCaller, _ASSERTE((pExactCallee == NULL) || pExactCallee->GetModule()); _ASSERTE((pExactCallee == NULL) || pExactCallee->GetModule()->GetClassLoader()); -#ifdef FEATURE_LEGACYNETCF - // NetCF did not implement tail calls - if (m_pMethodBeingCompiled->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - { - - result = false; - szFailReason = "Windows Phone OS 7 compatibility"; - goto exit; - } -#endif // FEATURE_LEGACYNETCF - // If the caller is the static constructor (.cctor) of a class which has a ComImport base class // somewhere up the class hierarchy, then we cannot make the call into a tailcall. See // RegisterObjectCreationCallback() in ExtensibleClassFactory.cpp for more information. @@ -11736,14 +11657,6 @@ CorJitResult CallCompileMethodWithSEHWrapper(EEJitManager *jitMgr, } } -#ifdef FEATURE_LEGACYNETCF - // for "AppDomainCompatSwitch" == "WindowsPhone_3.7.0.0" or "AppDomainCompatSwitch" == "WindowsPhone_3.8.0.0" - // This is when we need to generate code that more closely resembles - // what the WinPhone 7.0/7.1/7.5 NetCF JIT used to generate. - if (ftn->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - flags |= CORJIT_FLG_NETCF_QUIRKS; -#endif // FEATURE_LEGACYNETCF - return flags; } diff --git a/src/vm/methodtablebuilder.cpp b/src/vm/methodtablebuilder.cpp index 5d291081c7..8a5c19043c 100644 --- a/src/vm/methodtablebuilder.cpp +++ b/src/vm/methodtablebuilder.cpp @@ -952,23 +952,9 @@ MethodTableBuilder::MethodSignature::SignaturesEquivalent( { STANDARD_VM_CONTRACT; -#ifdef FEATURE_LEGACYNETCF - BaseDomain::AppDomainCompatMode compatMode1 = sig1.GetModule()->GetDomain()->GetAppDomainCompatMode(); - BaseDomain::AppDomainCompatMode compatMode2 = sig2.GetModule()->GetDomain()->GetAppDomainCompatMode(); - - if ((compatMode1 == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) || (compatMode2 == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8)) - { - return S_OK == MetaSig::CompareMethodSigsNT( - sig1.GetSignature(), static_cast<DWORD>(sig1.GetSignatureLength()), sig1.GetModule(), &sig1.GetSubstitution(), - sig2.GetSignature(), static_cast<DWORD>(sig2.GetSignatureLength()), sig2.GetModule(), &sig2.GetSubstitution()); - } - else -#endif - { - return !!MetaSig::CompareMethodSigs( - sig1.GetSignature(), static_cast<DWORD>(sig1.GetSignatureLength()), sig1.GetModule(), &sig1.GetSubstitution(), - sig2.GetSignature(), static_cast<DWORD>(sig2.GetSignatureLength()), sig2.GetModule(), &sig2.GetSubstitution()); - } + return !!MetaSig::CompareMethodSigs( + sig1.GetSignature(), static_cast<DWORD>(sig1.GetSignatureLength()), sig1.GetModule(), &sig1.GetSubstitution(), + sig2.GetSignature(), static_cast<DWORD>(sig2.GetSignatureLength()), sig2.GetModule(), &sig2.GetSubstitution()); } //******************************************************************************* @@ -979,27 +965,11 @@ MethodTableBuilder::MethodSignature::SignaturesExactlyEqual( { STANDARD_VM_CONTRACT; -#ifdef FEATURE_LEGACYNETCF - BaseDomain::AppDomainCompatMode compatMode1 = sig1.GetModule()->GetDomain()->GetAppDomainCompatMode(); - BaseDomain::AppDomainCompatMode compatMode2 = sig2.GetModule()->GetDomain()->GetAppDomainCompatMode(); - - if ((compatMode1 == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) || (compatMode2 == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8)) - { - TokenPairList newVisited = TokenPairList::AdjustForTypeEquivalenceForbiddenScope(NULL); - return S_OK == MetaSig::CompareMethodSigsNT( - sig1.GetSignature(), static_cast<DWORD>(sig1.GetSignatureLength()), sig1.GetModule(), &sig1.GetSubstitution(), - sig2.GetSignature(), static_cast<DWORD>(sig2.GetSignatureLength()), sig2.GetModule(), &sig2.GetSubstitution(), - &newVisited); - } - else -#endif - { - TokenPairList newVisited = TokenPairList::AdjustForTypeEquivalenceForbiddenScope(NULL); - return !!MetaSig::CompareMethodSigs( - sig1.GetSignature(), static_cast<DWORD>(sig1.GetSignatureLength()), sig1.GetModule(), &sig1.GetSubstitution(), - sig2.GetSignature(), static_cast<DWORD>(sig2.GetSignatureLength()), sig2.GetModule(), &sig2.GetSubstitution(), - &newVisited); - } + TokenPairList newVisited = TokenPairList::AdjustForTypeEquivalenceForbiddenScope(NULL); + return !!MetaSig::CompareMethodSigs( + sig1.GetSignature(), static_cast<DWORD>(sig1.GetSignatureLength()), sig1.GetModule(), &sig1.GetSubstitution(), + sig2.GetSignature(), static_cast<DWORD>(sig2.GetSignatureLength()), sig2.GetModule(), &sig2.GetSubstitution(), + &newVisited); } //******************************************************************************* @@ -3896,13 +3866,6 @@ VOID MethodTableBuilder::InitializeFieldDescs(FieldDesc *pFieldDescList, BOOL fFieldRequiresAlign8 = HasParent() ? GetParentMethodTable()->RequiresAlign8() : FALSE; #endif -#ifdef FEATURE_LEGACYNETCF - BOOL fNetCFCompat = GetModule()->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8; - DWORD dwStaticsSizeOnNetCF = 0; -#else - const BOOL fNetCFCompat = FALSE; -#endif - for (i = 0; i < bmtMetaData->cFields; i++) { PCCOR_SIGNATURE pMemberSignature; @@ -4400,8 +4363,7 @@ VOID MethodTableBuilder::InitializeFieldDescs(FieldDesc *pFieldDescList, ); // Check if the ValueType field containing non-publics is overlapped - if (!fNetCFCompat - && HasExplicitFieldOffsetLayout() + if (HasExplicitFieldOffsetLayout() && pLayoutFieldInfo != NULL && pLayoutFieldInfo->m_fIsOverlapped && pByValueClass != NULL @@ -11498,11 +11460,6 @@ void MethodTableBuilder::VerifyVirtualMethodsImplemented(MethodTable::MethodData return; #endif // FEATURE_COMINTEROP -#ifdef FEATURE_LEGACYNETCF - if (GetModule()->GetDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - return; -#endif - // Since interfaces aren't laid out in the vtable for stub dispatch, what we need to do // is try to find an implementation for every interface contract by iterating through // the interfaces not declared on a parent. diff --git a/src/vm/pefile.cpp b/src/vm/pefile.cpp index 220a3bbb91..f4abb5f2f5 100644 --- a/src/vm/pefile.cpp +++ b/src/vm/pefile.cpp @@ -306,11 +306,6 @@ void PEFile::ValidateImagePlatformNeutrality() fMachineOk = (machine == IMAGE_FILE_MACHINE_I386); fPlatformFlagsOk = ((kind & (peILonly | pe32Plus | pe32BitRequired)) == peILonly); - -#ifdef FEATURE_LEGACYNETCF - if (GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - fPlatformFlagsOk = ((kind & (peILonly | pe32Plus)) == peILonly); -#endif if (!(fMachineOk && fPlatformFlagsOk)) @@ -561,14 +556,6 @@ static void ValidatePEFileMachineType(PEFile *peFile) if (actualMachineType != IMAGE_FILE_MACHINE_NATIVE) { -#ifdef FEATURE_LEGACYNETCF - if (GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8) - { - if (actualMachineType == IMAGE_FILE_MACHINE_I386 && ((peKind & peILonly)) == peILonly) - return; - } -#endif - #ifdef _TARGET_AMD64_ // v4.0 64-bit compatibility workaround. The 64-bit v4.0 CLR's Reflection.Load(byte[]) api does not detect cpu-matches. We should consider fixing that in // the next SxS release. In the meantime, this bypass will retain compat for 64-bit v4.0 CLR for target platforms that existed at the time. @@ -4344,33 +4331,11 @@ void PEAssembly::VerifyStrongName() #endif // !defined(FEATURE_CORECLR) else { -#if defined(FEATURE_CORECLR) +#ifdef FEATURE_CORECLR // Runtime policy on CoreCLR is to skip verification of ALL assemblies m_flags |= PEFILE_SKIP_MODULE_HASH_CHECKS; m_fStrongNameVerified = TRUE; #else - -#ifdef FEATURE_CORECLR - BOOL skip = FALSE; - - // Skip verification for assemblies from the trusted path - if (IsSystem() || m_bIsOnTpaList) - skip = TRUE; - -#ifdef FEATURE_LEGACYNETCF - // crossgen should skip verification for Mango - if (RuntimeIsLegacyNetCF(0)) - skip = TRUE; -#endif - - if (skip) - { - m_flags |= PEFILE_SKIP_MODULE_HASH_CHECKS; - m_fStrongNameVerified = TRUE; - return; - } -#endif // FEATURE_CORECLR - DWORD verifyOutputFlags = 0; HRESULT hr = GetILimage()->VerifyStrongName(&verifyOutputFlags); diff --git a/src/vm/reflectioninvocation.cpp b/src/vm/reflectioninvocation.cpp index edbb678502..164da1395e 100644 --- a/src/vm/reflectioninvocation.cpp +++ b/src/vm/reflectioninvocation.cpp @@ -521,34 +521,8 @@ FCIMPL6(Object*, RuntimeTypeHandle::CreateInstance, ReflectClassBaseObject* refT HELPER_METHOD_FRAME_BEGIN_RET_2(rv, refThis); -#ifdef FEATURE_LEGACYNETCF - BOOL fNetCFCompat = GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8; -#else - const BOOL fNetCFCompat = FALSE; -#endif - MethodTable* pVMT; bool bNeedAccessCheck; - - if (fNetCFCompat && !thisTH.IsNull() && thisTH.IsArray()) - { - ArrayTypeDesc *atd = thisTH.AsArray(); - if (atd->GetTypeParam().IsArray()) - { - // We could do this, but Mango doesn't support creating - // arrays of arrays here - COMPlusThrow(kMissingMethodException,W("Arg_NoDefCTor")); - } - - INT32 rank = atd->GetRank(); - INT32* lengths = (INT32*) _alloca(sizeof(INT32) * rank); - for (INT32 i = 0; i < rank; ++i) - { - lengths[i] = 0; - } - rv = AllocateArrayEx(thisTH, lengths, rank); - goto Exit; - } // Get the type information associated with refThis if (thisTH.IsNull() || thisTH.IsTypeDesc()) @@ -736,8 +710,7 @@ FCIMPL6(Object*, RuntimeTypeHandle::CreateInstance, ReflectClassBaseObject* refT } } } - -Exit: + HELPER_METHOD_FRAME_END(); return OBJECTREFToObject(rv); } diff --git a/src/vm/securitymeta.cpp b/src/vm/securitymeta.cpp index 114a710463..85c81f75db 100644 --- a/src/vm/securitymeta.cpp +++ b/src/vm/securitymeta.cpp @@ -1612,15 +1612,6 @@ void ModuleSecurityDescriptor::VerifyDataComputed() AssemblySecurityDescriptor *pAssemSecDesc = static_cast<AssemblySecurityDescriptor*>(pAssembly->GetSecurityDescriptor()); -#ifdef FEATURE_LEGACYNETCF - // Legacy Mango apps have incorrect transparency attributes, so quirk to ignore them and force - // opportunistic criticality - if (GetAppDomain()->GetAppDomainCompatMode() == BaseDomain::APPDOMAINCOMPAT_APP_EARLIER_THAN_WP8 && !pAssemSecDesc->IsMicrosoftPlatform()) - { - moduleFlags = ModuleSecurityDescriptorFlags_IsOpportunisticallyCritical | ModuleSecurityDescriptorFlags_IsAPTCA; - } -#endif // FEATURE_LEGACYNETCF - // We shouldn't be both all transparent and all critical const ModuleSecurityDescriptorFlags invalidMask = ModuleSecurityDescriptorFlags_IsAllCritical | ModuleSecurityDescriptorFlags_IsAllTransparent; diff --git a/src/vm/staticallocationhelpers.inl b/src/vm/staticallocationhelpers.inl index a6440f62cc..26c2573762 100644 --- a/src/vm/staticallocationhelpers.inl +++ b/src/vm/staticallocationhelpers.inl @@ -122,13 +122,6 @@ static BOOL GetStaticFieldElementTypeForFieldDef(Module * pModule, IMDInternalIm HRESULT hr = pImport->GetCustomAttributeByName((mdToken)field, g_ThreadStaticAttributeClassName, NULL, NULL); - -#if defined(FEATURE_LEGACYNETCF) - // Replicate quirk from code:CMiniMd::CommonGetCustomAttributeByNameEx - if (FAILED(hr) && RuntimeIsLegacyNetCF(0)) - hr = S_FALSE; -#endif - IfFailThrow(hr); // Use one set of variables for regular statics, and the other set for thread statics |