summaryrefslogtreecommitdiff
path: root/src/vm
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2016-03-21 09:06:54 -0700
committerJan Kotas <jkotas@microsoft.com>2016-03-21 17:39:02 -0700
commitdfd9e1b097813e9ad9d02bd0a08a25c0cc4cae32 (patch)
tree56624c47f88bc2535298efe283282ca798c902e2 /src/vm
parentfc2246d77a951ac2111f242f3bb408af39903270 (diff)
downloadcoreclr-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.cpp10
-rw-r--r--src/vm/class.h15
-rw-r--r--src/vm/clsload.cpp7
-rw-r--r--src/vm/comdelegate.cpp6
-rw-r--r--src/vm/commodule.cpp6
-rw-r--r--src/vm/domainfile.cpp7
-rw-r--r--src/vm/invokeutil.cpp5
-rw-r--r--src/vm/jitinterface.cpp87
-rw-r--r--src/vm/methodtablebuilder.cpp61
-rw-r--r--src/vm/pefile.cpp37
-rw-r--r--src/vm/reflectioninvocation.cpp29
-rw-r--r--src/vm/securitymeta.cpp9
-rw-r--r--src/vm/staticallocationhelpers.inl7
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