diff options
author | Michal Strehovský <MichalStrehovsky@users.noreply.github.com> | 2019-02-19 13:47:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-19 13:47:50 +0100 |
commit | 388a7d415d8f5b45c3ca6e74d8b0885a20d0b962 (patch) | |
tree | a0d11dc6a3404c9962289360175f7406f47de2eb /src/vm/methodtablebuilder.cpp | |
parent | 4ac07f7e396e19043baf42c3e38bc50b51c5bff3 (diff) | |
download | coreclr-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.cpp | 14 |
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)) |