summaryrefslogtreecommitdiff
path: root/src/vm/methodtablebuilder.cpp
diff options
context:
space:
mode:
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>2019-02-19 13:47:50 +0100
committerGitHub <noreply@github.com>2019-02-19 13:47:50 +0100
commit388a7d415d8f5b45c3ca6e74d8b0885a20d0b962 (patch)
treea0d11dc6a3404c9962289360175f7406f47de2eb /src/vm/methodtablebuilder.cpp
parent4ac07f7e396e19043baf42c3e38bc50b51c5bff3 (diff)
downloadcoreclr-388a7d415d8f5b45c3ca6e74d8b0885a20d0b962.tar.gz
coreclr-388a7d415d8f5b45c3ca6e74d8b0885a20d0b962.tar.bz2
coreclr-388a7d415d8f5b45c3ca6e74d8b0885a20d0b962.zip
Fail loading types with default interface methods for fragile ngen (#22603)
We are not generating the right data structures for this. Since fragile crossgen is no longer a mainstream scenario, it's not worth the effort to add default interface methods support for it. This avoids `!"Precode::GetPrecodeFromEntryPoint: Unexpected code in precode"` and similar issues.
Diffstat (limited to 'src/vm/methodtablebuilder.cpp')
-rw-r--r--src/vm/methodtablebuilder.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/vm/methodtablebuilder.cpp b/src/vm/methodtablebuilder.cpp
index 9fd34bac7c..72aa6f5cf6 100644
--- a/src/vm/methodtablebuilder.cpp
+++ b/src/vm/methodtablebuilder.cpp
@@ -2892,9 +2892,15 @@ MethodTableBuilder::EnumerateClassMethods()
}
}
-#ifndef FEATURE_DEFAULT_INTERFACES
// Some interface checks.
- if (fIsClassInterface)
+ // We only need them if default interface method support is disabled or if this is fragile crossgen
+#if !defined(FEATURE_DEFAULT_INTERFACES) || defined(FEATURE_NATIVE_IMAGE_GENERATION)
+ if (fIsClassInterface
+#if defined(FEATURE_DEFAULT_INTERFACES)
+ // Only fragile crossgen wasn't upgraded to deal with default interface methods.
+ && !IsReadyToRunCompilation()
+#endif
+ )
{
if (IsMdVirtual(dwMemberAttrs))
{
@@ -2905,14 +2911,14 @@ MethodTableBuilder::EnumerateClassMethods()
}
else
{
- // Instance field/method
+ // Instance method
if (!IsMdStatic(dwMemberAttrs))
{
BuildMethodTableThrowException(BFA_NONVIRT_INST_INT_METHOD);
}
}
}
-#endif
+#endif // !defined(FEATURE_DEFAULT_INTERFACES) || defined(FEATURE_NATIVE_IMAGE_GENERATION)
// No synchronized methods in ValueTypes
if(fIsClassValueType && IsMiSynchronized(dwImplFlags))