Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 9304ea2

Browse files
Put default interface support behind a COMPlus switch (#15233)
1 parent 52037f2 commit 9304ea2

File tree

10 files changed

+141
-2
lines changed

10 files changed

+141
-2
lines changed

src/inc/clrconfigvalues.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,7 @@ RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_TieredCompilation, W("EXPERIMENTAL_TieredCo
873873
// TypeLoader
874874
//
875875
CONFIG_DWORD_INFO(INTERNAL_TypeLoader_InjectInterfaceDuplicates, W("INTERNAL_TypeLoader_InjectInterfaceDuplicates"), 0, "Injects duplicates in interface map for all types.")
876+
RETAIL_CONFIG_DWORD_INFO(UNSUPPORTED_TypeLoader_DefaultInterfaces, W("UNSUPPORTED_TypeLoader_DefaultInterfaces"), 0, "Enables support for default interfaces.")
876877

877878
//
878879
// Virtual call stubs

src/vm/classcompat.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,6 +2612,26 @@ VOID MethodTableBuilder::EnumerateClassMethods()
26122612
}
26132613
}
26142614

2615+
// Some interface checks.
2616+
if (fIsClassInterface)
2617+
{
2618+
if (IsMdVirtual(dwMemberAttrs))
2619+
{
2620+
if (!IsMdAbstract(dwMemberAttrs) && (CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_TypeLoader_DefaultInterfaces) == 0))
2621+
{
2622+
BuildMethodTableThrowException(BFA_VIRTUAL_NONAB_INT_METHOD);
2623+
}
2624+
}
2625+
else
2626+
{
2627+
// Instance field/method
2628+
if (!IsMdStatic(dwMemberAttrs) && (CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_TypeLoader_DefaultInterfaces) == 0))
2629+
{
2630+
BuildMethodTableThrowException(BFA_NONVIRT_INST_INT_METHOD);
2631+
}
2632+
}
2633+
}
2634+
26152635
// No synchronized methods in ValueTypes
26162636
if(fIsClassValueType && IsMiSynchronized(dwImplFlags))
26172637
{

src/vm/methodtablebuilder.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2900,6 +2900,26 @@ MethodTableBuilder::EnumerateClassMethods()
29002900
}
29012901
}
29022902

2903+
// Some interface checks.
2904+
if (fIsClassInterface)
2905+
{
2906+
if (IsMdVirtual(dwMemberAttrs))
2907+
{
2908+
if (!IsMdAbstract(dwMemberAttrs) && (CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_TypeLoader_DefaultInterfaces) == 0))
2909+
{
2910+
BuildMethodTableThrowException(BFA_VIRTUAL_NONAB_INT_METHOD);
2911+
}
2912+
}
2913+
else
2914+
{
2915+
// Instance field/method
2916+
if (!IsMdStatic(dwMemberAttrs) && (CLRConfig::GetConfigValue(CLRConfig::UNSUPPORTED_TypeLoader_DefaultInterfaces) == 0))
2917+
{
2918+
BuildMethodTableThrowException(BFA_NONVIRT_INST_INT_METHOD);
2919+
}
2920+
}
2921+
}
2922+
29032923
// No synchronized methods in ValueTypes
29042924
if(fIsClassValueType && IsMiSynchronized(dwImplFlags))
29052925
{

tests/src/Loader/classloader/DefaultInterfaceMethods/constrainedcall/constrainedcall.ilproj

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,21 @@
1616
<CLRTestKind>BuildAndRun</CLRTestKind>
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
19-
<UseCustomILAsm>True</UseCustomILAsm>
19+
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

tests/src/Loader/classloader/DefaultInterfaceMethods/diamondshape/diamondshape.ilproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
1919
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

tests/src/Loader/classloader/DefaultInterfaceMethods/genericmethods/genericmethods.ilproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
1919
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

tests/src/Loader/classloader/DefaultInterfaceMethods/methodimpl/methodimpl.ilproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
1919
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.ilproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
1919
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

tests/src/Loader/classloader/DefaultInterfaceMethods/simple/simple.ilproj

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,21 @@
1616
<CLRTestKind>BuildAndRun</CLRTestKind>
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
19-
<UseCustomILAsm>True</UseCustomILAsm>
19+
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

tests/src/Loader/classloader/DefaultInterfaceMethods/valuetypes/valuetypes.ilproj

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@
1717
<CLRTestPriority>0</CLRTestPriority>
1818
<!-- Use ILAsm that we just built for the new fixes required in default interface methods -->
1919
<UseCustomILAsm>True</UseCustomILAsm>
20+
21+
<CLRTestBatchPreCommands>
22+
<![CDATA[
23+
$(CLRTestBatchPreCommands)
24+
set COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
25+
]]>
26+
</CLRTestBatchPreCommands>
27+
<BashCLRTestPreCommands>
28+
<![CDATA[
29+
$(BashCLRTestPreCommands)
30+
export COMPlus_UNSUPPORTED_TypeLoader_DefaultInterfaces=1
31+
]]>
32+
</BashCLRTestPreCommands>
33+
2034
</PropertyGroup>
2135

2236
<ItemGroup>

0 commit comments

Comments
 (0)