/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/CSharp/Test/Emit2/CodeGen/CodeGenLengthBasedSwitchTests.cs
14 125 строк
436 KB
AlekseyTs
Create real `NamedTypeSymbol` for private implementation type and use it as a parent for `SynthesizedGlobalMethodSymbol`. (#70814)
16 ноя 2023, 01:19
Не верифицирован
16 ноя 2023, 01:19
bac7262
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using Microsoft.CodeAnalysis.CodeGen; using Microsoft.CodeAnalysis.CSharp.Test.Utilities; using Microsoft.CodeAnalysis.Test.Utilities; using Roslyn.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.CSharp.UnitTests.CodeGen; public class CodeGenLengthBasedSwitchTests : CSharpTestBase { [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void MixOfBucketSizes() { var source = """ assert(null, "default"); assert("", "blank"); assert("a", "a"); assert("b", "b"); assert("c", "c"); assert("no"); assert("yes"); assert("four"); assert("blurb"); assert("hello"); assert("lamps"); assert("lambs"); assert("names"); assert("slurp"); assert("towed"); assert("words"); assert("not", "default"); assert("other", "default"); assert("y", "default"); assert("longer example", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string o) { return o switch { "" => "blank", "a" => "a", "b" => "b", "c" => "c", "no" => "no", "yes" => "yes", "four" => "four", "alice" => "alice", "blurb" => "blurb", "hello" => "hello", "lamps" => "lamps", "lambs" => "lambs", "lower" => "lower", "names" => "names", "slurp" => "slurp", "towed" => "towed", "words" => "words", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL(PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: false); verifier.VerifyIL("C.M", """ { // Code size 584 (0x248) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_0240 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: switch ( IL_01b5, IL_0030, IL_00ae, IL_00c3, IL_00d8, IL_0052) IL_002b: br IL_0240 IL_0030: ldarg.0 IL_0031: ldc.i4.0 IL_0032: call "char string.this[int].get" IL_0037: stloc.2 IL_0038: ldloc.2 IL_0039: ldc.i4.s 97 IL_003b: sub IL_003c: switch ( IL_01c0, IL_01c8, IL_01d0) IL_004d: br IL_0240 IL_0052: ldarg.0 IL_0053: ldc.i4.0 IL_0054: call "char string.this[int].get" IL_0059: stloc.2 IL_005a: ldloc.2 IL_005b: ldc.i4.s 104 IL_005d: bgt.un.s IL_007c IL_005f: ldloc.2 IL_0060: ldc.i4.s 97 IL_0062: beq IL_00ed IL_0067: ldloc.2 IL_0068: ldc.i4.s 98 IL_006a: beq IL_0102 IL_006f: ldloc.2 IL_0070: ldc.i4.s 104 IL_0072: beq IL_0117 IL_0077: br IL_0240 IL_007c: ldloc.2 IL_007d: ldc.i4.s 108 IL_007f: beq IL_012c IL_0084: ldloc.2 IL_0085: ldc.i4.s 110 IL_0087: beq IL_0161 IL_008c: ldloc.2 IL_008d: ldc.i4.s 115 IL_008f: sub IL_0090: switch ( IL_0176, IL_018b, IL_0240, IL_0240, IL_01a0) IL_00a9: br IL_0240 IL_00ae: ldarg.0 IL_00af: ldstr "no" IL_00b4: call "bool string.op_Equality(string, string)" IL_00b9: brtrue IL_01d8 IL_00be: br IL_0240 IL_00c3: ldarg.0 IL_00c4: ldstr "yes" IL_00c9: call "bool string.op_Equality(string, string)" IL_00ce: brtrue IL_01e0 IL_00d3: br IL_0240 IL_00d8: ldarg.0 IL_00d9: ldstr "four" IL_00de: call "bool string.op_Equality(string, string)" IL_00e3: brtrue IL_01e8 IL_00e8: br IL_0240 IL_00ed: ldarg.0 IL_00ee: ldstr "alice" IL_00f3: call "bool string.op_Equality(string, string)" IL_00f8: brtrue IL_01f0 IL_00fd: br IL_0240 IL_0102: ldarg.0 IL_0103: ldstr "blurb" IL_0108: call "bool string.op_Equality(string, string)" IL_010d: brtrue IL_01f8 IL_0112: br IL_0240 IL_0117: ldarg.0 IL_0118: ldstr "hello" IL_011d: call "bool string.op_Equality(string, string)" IL_0122: brtrue IL_0200 IL_0127: br IL_0240 IL_012c: ldarg.0 IL_012d: ldstr "lamps" IL_0132: call "bool string.op_Equality(string, string)" IL_0137: brtrue IL_0208 IL_013c: ldarg.0 IL_013d: ldstr "lambs" IL_0142: call "bool string.op_Equality(string, string)" IL_0147: brtrue IL_0210 IL_014c: ldarg.0 IL_014d: ldstr "lower" IL_0152: call "bool string.op_Equality(string, string)" IL_0157: brtrue IL_0218 IL_015c: br IL_0240 IL_0161: ldarg.0 IL_0162: ldstr "names" IL_0167: call "bool string.op_Equality(string, string)" IL_016c: brtrue IL_0220 IL_0171: br IL_0240 IL_0176: ldarg.0 IL_0177: ldstr "slurp" IL_017c: call "bool string.op_Equality(string, string)" IL_0181: brtrue IL_0228 IL_0186: br IL_0240 IL_018b: ldarg.0 IL_018c: ldstr "towed" IL_0191: call "bool string.op_Equality(string, string)" IL_0196: brtrue IL_0230 IL_019b: br IL_0240 IL_01a0: ldarg.0 IL_01a1: ldstr "words" IL_01a6: call "bool string.op_Equality(string, string)" IL_01ab: brtrue IL_0238 IL_01b0: br IL_0240 IL_01b5: ldstr "blank" IL_01ba: stloc.0 IL_01bb: br IL_0246 IL_01c0: ldstr "a" IL_01c5: stloc.0 IL_01c6: br.s IL_0246 IL_01c8: ldstr "b" IL_01cd: stloc.0 IL_01ce: br.s IL_0246 IL_01d0: ldstr "c" IL_01d5: stloc.0 IL_01d6: br.s IL_0246 IL_01d8: ldstr "no" IL_01dd: stloc.0 IL_01de: br.s IL_0246 IL_01e0: ldstr "yes" IL_01e5: stloc.0 IL_01e6: br.s IL_0246 IL_01e8: ldstr "four" IL_01ed: stloc.0 IL_01ee: br.s IL_0246 IL_01f0: ldstr "alice" IL_01f5: stloc.0 IL_01f6: br.s IL_0246 IL_01f8: ldstr "blurb" IL_01fd: stloc.0 IL_01fe: br.s IL_0246 IL_0200: ldstr "hello" IL_0205: stloc.0 IL_0206: br.s IL_0246 IL_0208: ldstr "lamps" IL_020d: stloc.0 IL_020e: br.s IL_0246 IL_0210: ldstr "lambs" IL_0215: stloc.0 IL_0216: br.s IL_0246 IL_0218: ldstr "lower" IL_021d: stloc.0 IL_021e: br.s IL_0246 IL_0220: ldstr "names" IL_0225: stloc.0 IL_0226: br.s IL_0246 IL_0228: ldstr "slurp" IL_022d: stloc.0 IL_022e: br.s IL_0246 IL_0230: ldstr "towed" IL_0235: stloc.0 IL_0236: br.s IL_0246 IL_0238: ldstr "words" IL_023d: stloc.0 IL_023e: br.s IL_0246 IL_0240: ldstr "default" IL_0245: stloc.0 IL_0246: ldloc.0 IL_0247: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL("<PrivateImplementationDetails>." + PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: true); verifier.VerifyIL("C.M", """ { // Code size 786 (0x312) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x62366ffa IL_000d: bgt.un IL_0096 IL_0012: ldloc.1 IL_0013: ldc.i4 0x3ec721c0 IL_0018: bgt.un.s IL_0058 IL_001a: ldloc.1 IL_001b: ldc.i4 0x2f69f5a5 IL_0020: bgt.un.s IL_003d IL_0022: ldloc.1 IL_0023: ldc.i4 0x242602e6 IL_0028: beq IL_0201 IL_002d: ldloc.1 IL_002e: ldc.i4 0x2f69f5a5 IL_0033: beq IL_0198 IL_0038: br IL_030a IL_003d: ldloc.1 IL_003e: ldc.i4 0x3448ae58 IL_0043: beq IL_01ec IL_0048: ldloc.1 IL_0049: ldc.i4 0x3ec721c0 IL_004e: beq IL_0255 IL_0053: br IL_030a IL_0058: ldloc.1 IL_0059: ldc.i4 0x4f9f2cab IL_005e: bgt.un.s IL_007b IL_0060: ldloc.1 IL_0061: ldc.i4 0x4e9f3590 IL_0066: beq IL_0183 IL_006b: ldloc.1 IL_006c: ldc.i4 0x4f9f2cab IL_0071: beq IL_01d7 IL_0076: br IL_030a IL_007b: ldloc.1 IL_007c: ldc.i4 0x5cb7aa8a IL_0081: beq IL_026a IL_0086: ldloc.1 IL_0087: ldc.i4 0x62366ffa IL_008c: beq IL_016e IL_0091: br IL_030a IL_0096: ldloc.1 IL_0097: ldc.i4 0xb51d04ba IL_009c: bgt.un.s IL_00d9 IL_009e: ldloc.1 IL_009f: ldc.i4 0x811c9dc5 IL_00a4: bgt.un.s IL_00be IL_00a6: ldloc.1 IL_00a7: ldc.i4 0x63cb5a27 IL_00ac: beq IL_0240 IL_00b1: ldloc.1 IL_00b2: ldc.i4 0x811c9dc5 IL_00b7: beq.s IL_0119 IL_00b9: br IL_030a IL_00be: ldloc.1 IL_00bf: ldc.i4 0x872213e7 IL_00c4: beq IL_01ad IL_00c9: ldloc.1 IL_00ca: ldc.i4 0xb51d04ba IL_00cf: beq IL_0216 IL_00d4: br IL_030a IL_00d9: ldloc.1 IL_00da: ldc.i4 0xe60c2c52 IL_00df: bgt.un.s IL_00f6 IL_00e1: ldloc.1 IL_00e2: ldc.i4 0xe40c292c IL_00e7: beq.s IL_012f IL_00e9: ldloc.1 IL_00ea: ldc.i4 0xe60c2c52 IL_00ef: beq.s IL_0159 IL_00f1: br IL_030a IL_00f6: ldloc.1 IL_00f7: ldc.i4 0xe6e5718f IL_00fc: beq IL_022b IL_0101: ldloc.1 IL_0102: ldc.i4 0xe70c2de5 IL_0107: beq.s IL_0144 IL_0109: ldloc.1 IL_010a: ldc.i4 0xf76b8c8e IL_010f: beq IL_01c2 IL_0114: br IL_030a IL_0119: ldarg.0 IL_011a: brfalse IL_030a IL_011f: ldarg.0 IL_0120: call "int string.Length.get" IL_0125: brfalse IL_027f IL_012a: br IL_030a IL_012f: ldarg.0 IL_0130: ldstr "a" IL_0135: call "bool string.op_Equality(string, string)" IL_013a: brtrue IL_028a IL_013f: br IL_030a IL_0144: ldarg.0 IL_0145: ldstr "b" IL_014a: call "bool string.op_Equality(string, string)" IL_014f: brtrue IL_0292 IL_0154: br IL_030a IL_0159: ldarg.0 IL_015a: ldstr "c" IL_015f: call "bool string.op_Equality(string, string)" IL_0164: brtrue IL_029a IL_0169: br IL_030a IL_016e: ldarg.0 IL_016f: ldstr "no" IL_0174: call "bool string.op_Equality(string, string)" IL_0179: brtrue IL_02a2 IL_017e: br IL_030a IL_0183: ldarg.0 IL_0184: ldstr "yes" IL_0189: call "bool string.op_Equality(string, string)" IL_018e: brtrue IL_02aa IL_0193: br IL_030a IL_0198: ldarg.0 IL_0199: ldstr "four" IL_019e: call "bool string.op_Equality(string, string)" IL_01a3: brtrue IL_02b2 IL_01a8: br IL_030a IL_01ad: ldarg.0 IL_01ae: ldstr "alice" IL_01b3: call "bool string.op_Equality(string, string)" IL_01b8: brtrue IL_02ba IL_01bd: br IL_030a IL_01c2: ldarg.0 IL_01c3: ldstr "blurb" IL_01c8: call "bool string.op_Equality(string, string)" IL_01cd: brtrue IL_02c2 IL_01d2: br IL_030a IL_01d7: ldarg.0 IL_01d8: ldstr "hello" IL_01dd: call "bool string.op_Equality(string, string)" IL_01e2: brtrue IL_02ca IL_01e7: br IL_030a IL_01ec: ldarg.0 IL_01ed: ldstr "lamps" IL_01f2: call "bool string.op_Equality(string, string)" IL_01f7: brtrue IL_02d2 IL_01fc: br IL_030a IL_0201: ldarg.0 IL_0202: ldstr "lambs" IL_0207: call "bool string.op_Equality(string, string)" IL_020c: brtrue IL_02da IL_0211: br IL_030a IL_0216: ldarg.0 IL_0217: ldstr "lower" IL_021c: call "bool string.op_Equality(string, string)" IL_0221: brtrue IL_02e2 IL_0226: br IL_030a IL_022b: ldarg.0 IL_022c: ldstr "names" IL_0231: call "bool string.op_Equality(string, string)" IL_0236: brtrue IL_02ea IL_023b: br IL_030a IL_0240: ldarg.0 IL_0241: ldstr "slurp" IL_0246: call "bool string.op_Equality(string, string)" IL_024b: brtrue IL_02f2 IL_0250: br IL_030a IL_0255: ldarg.0 IL_0256: ldstr "towed" IL_025b: call "bool string.op_Equality(string, string)" IL_0260: brtrue IL_02fa IL_0265: br IL_030a IL_026a: ldarg.0 IL_026b: ldstr "words" IL_0270: call "bool string.op_Equality(string, string)" IL_0275: brtrue IL_0302 IL_027a: br IL_030a IL_027f: ldstr "blank" IL_0284: stloc.0 IL_0285: br IL_0310 IL_028a: ldstr "a" IL_028f: stloc.0 IL_0290: br.s IL_0310 IL_0292: ldstr "b" IL_0297: stloc.0 IL_0298: br.s IL_0310 IL_029a: ldstr "c" IL_029f: stloc.0 IL_02a0: br.s IL_0310 IL_02a2: ldstr "no" IL_02a7: stloc.0 IL_02a8: br.s IL_0310 IL_02aa: ldstr "yes" IL_02af: stloc.0 IL_02b0: br.s IL_0310 IL_02b2: ldstr "four" IL_02b7: stloc.0 IL_02b8: br.s IL_0310 IL_02ba: ldstr "alice" IL_02bf: stloc.0 IL_02c0: br.s IL_0310 IL_02c2: ldstr "blurb" IL_02c7: stloc.0 IL_02c8: br.s IL_0310 IL_02ca: ldstr "hello" IL_02cf: stloc.0 IL_02d0: br.s IL_0310 IL_02d2: ldstr "lamps" IL_02d7: stloc.0 IL_02d8: br.s IL_0310 IL_02da: ldstr "lambs" IL_02df: stloc.0 IL_02e0: br.s IL_0310 IL_02e2: ldstr "lower" IL_02e7: stloc.0 IL_02e8: br.s IL_0310 IL_02ea: ldstr "names" IL_02ef: stloc.0 IL_02f0: br.s IL_0310 IL_02f2: ldstr "slurp" IL_02f7: stloc.0 IL_02f8: br.s IL_0310 IL_02fa: ldstr "towed" IL_02ff: stloc.0 IL_0300: br.s IL_0310 IL_0302: ldstr "words" IL_0307: stloc.0 IL_0308: br.s IL_0310 IL_030a: ldstr "default" IL_030f: stloc.0 IL_0310: ldloc.0 IL_0311: ret } """); comp = CreateCompilation(source, options: TestOptions.DebugExe); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 819 (0x333) .maxstack 2 .locals init (string V_0, uint V_1, string V_2) IL_0000: nop IL_0001: ldc.i4.1 IL_0002: brtrue.s IL_0005 IL_0004: nop IL_0005: ldarg.0 IL_0006: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_000b: stloc.1 IL_000c: ldloc.1 IL_000d: ldc.i4 0x62366ffa IL_0012: bgt.un IL_00a3 IL_0017: ldloc.1 IL_0018: ldc.i4 0x3ec721c0 IL_001d: bgt.un.s IL_0061 IL_001f: ldloc.1 IL_0020: ldc.i4 0x2f69f5a5 IL_0025: bgt.un.s IL_0044 IL_0027: ldloc.1 IL_0028: ldc.i4 0x242602e6 IL_002d: beq IL_0215 IL_0032: br.s IL_0034 IL_0034: ldloc.1 IL_0035: ldc.i4 0x2f69f5a5 IL_003a: beq IL_01ac IL_003f: br IL_0321 IL_0044: ldloc.1 IL_0045: ldc.i4 0x3448ae58 IL_004a: beq IL_0200 IL_004f: br.s IL_0051 IL_0051: ldloc.1 IL_0052: ldc.i4 0x3ec721c0 IL_0057: beq IL_0269 IL_005c: br IL_0321 IL_0061: ldloc.1 IL_0062: ldc.i4 0x4f9f2cab IL_0067: bgt.un.s IL_0086 IL_0069: ldloc.1 IL_006a: ldc.i4 0x4e9f3590 IL_006f: beq IL_0197 IL_0074: br.s IL_0076 IL_0076: ldloc.1 IL_0077: ldc.i4 0x4f9f2cab IL_007c: beq IL_01eb IL_0081: br IL_0321 IL_0086: ldloc.1 IL_0087: ldc.i4 0x5cb7aa8a IL_008c: beq IL_027e IL_0091: br.s IL_0093 IL_0093: ldloc.1 IL_0094: ldc.i4 0x62366ffa IL_0099: beq IL_0182 IL_009e: br IL_0321 IL_00a3: ldloc.1 IL_00a4: ldc.i4 0xb51d04ba IL_00a9: bgt.un.s IL_00ea IL_00ab: ldloc.1 IL_00ac: ldc.i4 0x811c9dc5 IL_00b1: bgt.un.s IL_00cd IL_00b3: ldloc.1 IL_00b4: ldc.i4 0x63cb5a27 IL_00b9: beq IL_0254 IL_00be: br.s IL_00c0 IL_00c0: ldloc.1 IL_00c1: ldc.i4 0x811c9dc5 IL_00c6: beq.s IL_0130 IL_00c8: br IL_0321 IL_00cd: ldloc.1 IL_00ce: ldc.i4 0x872213e7 IL_00d3: beq IL_01c1 IL_00d8: br.s IL_00da IL_00da: ldloc.1 IL_00db: ldc.i4 0xb51d04ba IL_00e0: beq IL_022a IL_00e5: br IL_0321 IL_00ea: ldloc.1 IL_00eb: ldc.i4 0xe60c2c52 IL_00f0: bgt.un.s IL_0109 IL_00f2: ldloc.1 IL_00f3: ldc.i4 0xe40c292c IL_00f8: beq.s IL_0143 IL_00fa: br.s IL_00fc IL_00fc: ldloc.1 IL_00fd: ldc.i4 0xe60c2c52 IL_0102: beq.s IL_016d IL_0104: br IL_0321 IL_0109: ldloc.1 IL_010a: ldc.i4 0xe6e5718f IL_010f: beq IL_023f IL_0114: br.s IL_0116 IL_0116: ldloc.1 IL_0117: ldc.i4 0xe70c2de5 IL_011c: beq.s IL_0158 IL_011e: br.s IL_0120 IL_0120: ldloc.1 IL_0121: ldc.i4 0xf76b8c8e IL_0126: beq IL_01d6 IL_012b: br IL_0321 IL_0130: ldarg.0 IL_0131: brfalse.s IL_013e IL_0133: ldarg.0 IL_0134: call "int string.Length.get" IL_0139: brfalse IL_0293 IL_013e: br IL_0321 IL_0143: ldarg.0 IL_0144: ldstr "a" IL_0149: call "bool string.op_Equality(string, string)" IL_014e: brtrue IL_029e IL_0153: br IL_0321 IL_0158: ldarg.0 IL_0159: ldstr "b" IL_015e: call "bool string.op_Equality(string, string)" IL_0163: brtrue IL_02a9 IL_0168: br IL_0321 IL_016d: ldarg.0 IL_016e: ldstr "c" IL_0173: call "bool string.op_Equality(string, string)" IL_0178: brtrue IL_02b1 IL_017d: br IL_0321 IL_0182: ldarg.0 IL_0183: ldstr "no" IL_0188: call "bool string.op_Equality(string, string)" IL_018d: brtrue IL_02b9 IL_0192: br IL_0321 IL_0197: ldarg.0 IL_0198: ldstr "yes" IL_019d: call "bool string.op_Equality(string, string)" IL_01a2: brtrue IL_02c1 IL_01a7: br IL_0321 IL_01ac: ldarg.0 IL_01ad: ldstr "four" IL_01b2: call "bool string.op_Equality(string, string)" IL_01b7: brtrue IL_02c9 IL_01bc: br IL_0321 IL_01c1: ldarg.0 IL_01c2: ldstr "alice" IL_01c7: call "bool string.op_Equality(string, string)" IL_01cc: brtrue IL_02d1 IL_01d1: br IL_0321 IL_01d6: ldarg.0 IL_01d7: ldstr "blurb" IL_01dc: call "bool string.op_Equality(string, string)" IL_01e1: brtrue IL_02d9 IL_01e6: br IL_0321 IL_01eb: ldarg.0 IL_01ec: ldstr "hello" IL_01f1: call "bool string.op_Equality(string, string)" IL_01f6: brtrue IL_02e1 IL_01fb: br IL_0321 IL_0200: ldarg.0 IL_0201: ldstr "lamps" IL_0206: call "bool string.op_Equality(string, string)" IL_020b: brtrue IL_02e9 IL_0210: br IL_0321 IL_0215: ldarg.0 IL_0216: ldstr "lambs" IL_021b: call "bool string.op_Equality(string, string)" IL_0220: brtrue IL_02f1 IL_0225: br IL_0321 IL_022a: ldarg.0 IL_022b: ldstr "lower" IL_0230: call "bool string.op_Equality(string, string)" IL_0235: brtrue IL_02f9 IL_023a: br IL_0321 IL_023f: ldarg.0 IL_0240: ldstr "names" IL_0245: call "bool string.op_Equality(string, string)" IL_024a: brtrue IL_0301 IL_024f: br IL_0321 IL_0254: ldarg.0 IL_0255: ldstr "slurp" IL_025a: call "bool string.op_Equality(string, string)" IL_025f: brtrue IL_0309 IL_0264: br IL_0321 IL_0269: ldarg.0 IL_026a: ldstr "towed" IL_026f: call "bool string.op_Equality(string, string)" IL_0274: brtrue IL_0311 IL_0279: br IL_0321 IL_027e: ldarg.0 IL_027f: ldstr "words" IL_0284: call "bool string.op_Equality(string, string)" IL_0289: brtrue IL_0319 IL_028e: br IL_0321 IL_0293: ldstr "blank" IL_0298: stloc.0 IL_0299: br IL_0329 IL_029e: ldstr "a" IL_02a3: stloc.0 IL_02a4: br IL_0329 IL_02a9: ldstr "b" IL_02ae: stloc.0 IL_02af: br.s IL_0329 IL_02b1: ldstr "c" IL_02b6: stloc.0 IL_02b7: br.s IL_0329 IL_02b9: ldstr "no" IL_02be: stloc.0 IL_02bf: br.s IL_0329 IL_02c1: ldstr "yes" IL_02c6: stloc.0 IL_02c7: br.s IL_0329 IL_02c9: ldstr "four" IL_02ce: stloc.0 IL_02cf: br.s IL_0329 IL_02d1: ldstr "alice" IL_02d6: stloc.0 IL_02d7: br.s IL_0329 IL_02d9: ldstr "blurb" IL_02de: stloc.0 IL_02df: br.s IL_0329 IL_02e1: ldstr "hello" IL_02e6: stloc.0 IL_02e7: br.s IL_0329 IL_02e9: ldstr "lamps" IL_02ee: stloc.0 IL_02ef: br.s IL_0329 IL_02f1: ldstr "lambs" IL_02f6: stloc.0 IL_02f7: br.s IL_0329 IL_02f9: ldstr "lower" IL_02fe: stloc.0 IL_02ff: br.s IL_0329 IL_0301: ldstr "names" IL_0306: stloc.0 IL_0307: br.s IL_0329 IL_0309: ldstr "slurp" IL_030e: stloc.0 IL_030f: br.s IL_0329 IL_0311: ldstr "towed" IL_0316: stloc.0 IL_0317: br.s IL_0329 IL_0319: ldstr "words" IL_031e: stloc.0 IL_031f: br.s IL_0329 IL_0321: ldstr "default" IL_0326: stloc.0 IL_0327: br.s IL_0329 IL_0329: ldc.i4.1 IL_032a: brtrue.s IL_032d IL_032c: nop IL_032d: ldloc.0 IL_032e: stloc.2 IL_032f: br.s IL_0331 IL_0331: ldloc.2 IL_0332: ret } """); } [InlineData(true)] [InlineData(false)] [Theory, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void MixOfBucketSizes_Span(bool useReadonly) { var keyType = useReadonly ? "System.ReadOnlySpan<char>" : "System.Span<char>"; var source = $$""" assert("", "blank"); assert("a", "a"); assert("b", "b"); assert("c", "c"); assert("no"); assert("yes"); assert("four"); assert("blurb"); assert("hello"); assert("lamps"); assert("lambs"); assert("names"); assert("slurp"); assert("towed"); assert("words"); assert("not", "default"); assert("other", "default"); assert("y", "default"); assert("longer example", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { var inputAsKeyType = new {{keyType}}(input.ToCharArray()); var result = C.M(inputAsKeyType); if (result != (expected ?? input)) { throw new System.Exception($"{input} produced {result}"); } } public class C { public static string M({{keyType}} o) { return o switch { "" => "blank", "a" => "a", "b" => "b", "c" => "c", "no" => "no", "yes" => "yes", "four" => "four", "alice" => "alice", "blurb" => "blurb", "hello" => "hello", "lamps" => "lamps", "lambs" => "lambs", "lower" => "lower", "names" => "names", "slurp" => "slurp", "towed" => "towed", "words" => "words", _ => "default" }; } } """; var comp = CreateCompilationWithSpanAndMemoryExtensions(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN", verify: Verification.Skipped); var indexer = useReadonly ? $$"""ref readonly char {{keyType}}.this[int].get""" : $$"""ref char {{keyType}}.this[int].get"""; verifier.VerifyMemberInIL(PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: false); verifier.VerifyIL("C.M", $$""" { // Code size 648 (0x288) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarga.s V_0 IL_0002: call "int {{keyType}}.Length.get" IL_0007: stloc.1 IL_0008: ldloc.1 IL_0009: switch ( IL_01f5, IL_002b, IL_00ad, IL_00c7, IL_00e1, IL_004f) IL_0026: br IL_0280 IL_002b: ldarga.s V_0 IL_002d: ldc.i4.0 IL_002e: call "{{indexer}}" IL_0033: ldind.u2 IL_0034: stloc.2 IL_0035: ldloc.2 IL_0036: ldc.i4.s 97 IL_0038: sub IL_0039: switch ( IL_0200, IL_0208, IL_0210) IL_004a: br IL_0280 IL_004f: ldarga.s V_0 IL_0051: ldc.i4.0 IL_0052: call "{{indexer}}" IL_0057: ldind.u2 IL_0058: stloc.2 IL_0059: ldloc.2 IL_005a: ldc.i4.s 104 IL_005c: bgt.un.s IL_007b IL_005e: ldloc.2 IL_005f: ldc.i4.s 97 IL_0061: beq IL_00fb IL_0066: ldloc.2 IL_0067: ldc.i4.s 98 IL_0069: beq IL_0115 IL_006e: ldloc.2 IL_006f: ldc.i4.s 104 IL_0071: beq IL_012f IL_0076: br IL_0280 IL_007b: ldloc.2 IL_007c: ldc.i4.s 108 IL_007e: beq IL_0149 IL_0083: ldloc.2 IL_0084: ldc.i4.s 110 IL_0086: beq IL_018d IL_008b: ldloc.2 IL_008c: ldc.i4.s 115 IL_008e: sub IL_008f: switch ( IL_01a7, IL_01c1, IL_0280, IL_0280, IL_01db) IL_00a8: br IL_0280 IL_00ad: ldarg.0 IL_00ae: ldstr "no" IL_00b3: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_00b8: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_00bd: brtrue IL_0218 IL_00c2: br IL_0280 IL_00c7: ldarg.0 IL_00c8: ldstr "yes" IL_00cd: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_00d2: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_00d7: brtrue IL_0220 IL_00dc: br IL_0280 IL_00e1: ldarg.0 IL_00e2: ldstr "four" IL_00e7: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_00ec: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_00f1: brtrue IL_0228 IL_00f6: br IL_0280 IL_00fb: ldarg.0 IL_00fc: ldstr "alice" IL_0101: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0106: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_010b: brtrue IL_0230 IL_0110: br IL_0280 IL_0115: ldarg.0 IL_0116: ldstr "blurb" IL_011b: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0120: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0125: brtrue IL_0238 IL_012a: br IL_0280 IL_012f: ldarg.0 IL_0130: ldstr "hello" IL_0135: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_013a: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_013f: brtrue IL_0240 IL_0144: br IL_0280 IL_0149: ldarg.0 IL_014a: ldstr "lamps" IL_014f: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0154: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0159: brtrue IL_0248 IL_015e: ldarg.0 IL_015f: ldstr "lambs" IL_0164: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0169: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_016e: brtrue IL_0250 IL_0173: ldarg.0 IL_0174: ldstr "lower" IL_0179: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_017e: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0183: brtrue IL_0258 IL_0188: br IL_0280 IL_018d: ldarg.0 IL_018e: ldstr "names" IL_0193: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0198: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_019d: brtrue IL_0260 IL_01a2: br IL_0280 IL_01a7: ldarg.0 IL_01a8: ldstr "slurp" IL_01ad: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_01b2: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01b7: brtrue IL_0268 IL_01bc: br IL_0280 IL_01c1: ldarg.0 IL_01c2: ldstr "towed" IL_01c7: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_01cc: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01d1: brtrue IL_0270 IL_01d6: br IL_0280 IL_01db: ldarg.0 IL_01dc: ldstr "words" IL_01e1: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_01e6: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01eb: brtrue IL_0278 IL_01f0: br IL_0280 IL_01f5: ldstr "blank" IL_01fa: stloc.0 IL_01fb: br IL_0286 IL_0200: ldstr "a" IL_0205: stloc.0 IL_0206: br.s IL_0286 IL_0208: ldstr "b" IL_020d: stloc.0 IL_020e: br.s IL_0286 IL_0210: ldstr "c" IL_0215: stloc.0 IL_0216: br.s IL_0286 IL_0218: ldstr "no" IL_021d: stloc.0 IL_021e: br.s IL_0286 IL_0220: ldstr "yes" IL_0225: stloc.0 IL_0226: br.s IL_0286 IL_0228: ldstr "four" IL_022d: stloc.0 IL_022e: br.s IL_0286 IL_0230: ldstr "alice" IL_0235: stloc.0 IL_0236: br.s IL_0286 IL_0238: ldstr "blurb" IL_023d: stloc.0 IL_023e: br.s IL_0286 IL_0240: ldstr "hello" IL_0245: stloc.0 IL_0246: br.s IL_0286 IL_0248: ldstr "lamps" IL_024d: stloc.0 IL_024e: br.s IL_0286 IL_0250: ldstr "lambs" IL_0255: stloc.0 IL_0256: br.s IL_0286 IL_0258: ldstr "lower" IL_025d: stloc.0 IL_025e: br.s IL_0286 IL_0260: ldstr "names" IL_0265: stloc.0 IL_0266: br.s IL_0286 IL_0268: ldstr "slurp" IL_026d: stloc.0 IL_026e: br.s IL_0286 IL_0270: ldstr "towed" IL_0275: stloc.0 IL_0276: br.s IL_0286 IL_0278: ldstr "words" IL_027d: stloc.0 IL_027e: br.s IL_0286 IL_0280: ldstr "default" IL_0285: stloc.0 IL_0286: ldloc.0 IL_0287: ret } """); comp = CreateCompilationWithSpanAndMemoryExtensions(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); var helper = useReadonly ? "ComputeReadOnlySpanHash(System.ReadOnlySpan<char>)" : "ComputeSpanHash(System.Span<char>)"; verifier.VerifyMemberInIL("<PrivateImplementationDetails>." + helper, expected: true); verifier.VerifyIL("C.M", $$""" { // Code size 861 (0x35d) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.{{helper}}" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x62366ffa IL_000d: bgt.un IL_0096 IL_0012: ldloc.1 IL_0013: ldc.i4 0x3ec721c0 IL_0018: bgt.un.s IL_0058 IL_001a: ldloc.1 IL_001b: ldc.i4 0x2f69f5a5 IL_0020: bgt.un.s IL_003d IL_0022: ldloc.1 IL_0023: ldc.i4 0x242602e6 IL_0028: beq IL_022e IL_002d: ldloc.1 IL_002e: ldc.i4 0x2f69f5a5 IL_0033: beq IL_01ac IL_0038: br IL_0355 IL_003d: ldloc.1 IL_003e: ldc.i4 0x3448ae58 IL_0043: beq IL_0214 IL_0048: ldloc.1 IL_0049: ldc.i4 0x3ec721c0 IL_004e: beq IL_0296 IL_0053: br IL_0355 IL_0058: ldloc.1 IL_0059: ldc.i4 0x4f9f2cab IL_005e: bgt.un.s IL_007b IL_0060: ldloc.1 IL_0061: ldc.i4 0x4e9f3590 IL_0066: beq IL_0192 IL_006b: ldloc.1 IL_006c: ldc.i4 0x4f9f2cab IL_0071: beq IL_01fa IL_0076: br IL_0355 IL_007b: ldloc.1 IL_007c: ldc.i4 0x5cb7aa8a IL_0081: beq IL_02b0 IL_0086: ldloc.1 IL_0087: ldc.i4 0x62366ffa IL_008c: beq IL_0178 IL_0091: br IL_0355 IL_0096: ldloc.1 IL_0097: ldc.i4 0xb51d04ba IL_009c: bgt.un.s IL_00d9 IL_009e: ldloc.1 IL_009f: ldc.i4 0x811c9dc5 IL_00a4: bgt.un.s IL_00be IL_00a6: ldloc.1 IL_00a7: ldc.i4 0x63cb5a27 IL_00ac: beq IL_027c IL_00b1: ldloc.1 IL_00b2: ldc.i4 0x811c9dc5 IL_00b7: beq.s IL_0119 IL_00b9: br IL_0355 IL_00be: ldloc.1 IL_00bf: ldc.i4 0x872213e7 IL_00c4: beq IL_01c6 IL_00c9: ldloc.1 IL_00ca: ldc.i4 0xb51d04ba IL_00cf: beq IL_0248 IL_00d4: br IL_0355 IL_00d9: ldloc.1 IL_00da: ldc.i4 0xe60c2c52 IL_00df: bgt.un.s IL_00f6 IL_00e1: ldloc.1 IL_00e2: ldc.i4 0xe40c292c IL_00e7: beq.s IL_012a IL_00e9: ldloc.1 IL_00ea: ldc.i4 0xe60c2c52 IL_00ef: beq.s IL_015e IL_00f1: br IL_0355 IL_00f6: ldloc.1 IL_00f7: ldc.i4 0xe6e5718f IL_00fc: beq IL_0262 IL_0101: ldloc.1 IL_0102: ldc.i4 0xe70c2de5 IL_0107: beq.s IL_0144 IL_0109: ldloc.1 IL_010a: ldc.i4 0xf76b8c8e IL_010f: beq IL_01e0 IL_0114: br IL_0355 IL_0119: ldarga.s V_0 IL_011b: call "int {{keyType}}.Length.get" IL_0120: brfalse IL_02ca IL_0125: br IL_0355 IL_012a: ldarg.0 IL_012b: ldstr "a" IL_0130: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0135: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_013a: brtrue IL_02d5 IL_013f: br IL_0355 IL_0144: ldarg.0 IL_0145: ldstr "b" IL_014a: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_014f: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0154: brtrue IL_02dd IL_0159: br IL_0355 IL_015e: ldarg.0 IL_015f: ldstr "c" IL_0164: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0169: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_016e: brtrue IL_02e5 IL_0173: br IL_0355 IL_0178: ldarg.0 IL_0179: ldstr "no" IL_017e: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0183: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0188: brtrue IL_02ed IL_018d: br IL_0355 IL_0192: ldarg.0 IL_0193: ldstr "yes" IL_0198: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_019d: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01a2: brtrue IL_02f5 IL_01a7: br IL_0355 IL_01ac: ldarg.0 IL_01ad: ldstr "four" IL_01b2: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_01b7: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01bc: brtrue IL_02fd IL_01c1: br IL_0355 IL_01c6: ldarg.0 IL_01c7: ldstr "alice" IL_01cc: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_01d1: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01d6: brtrue IL_0305 IL_01db: br IL_0355 IL_01e0: ldarg.0 IL_01e1: ldstr "blurb" IL_01e6: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_01eb: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_01f0: brtrue IL_030d IL_01f5: br IL_0355 IL_01fa: ldarg.0 IL_01fb: ldstr "hello" IL_0200: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0205: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_020a: brtrue IL_0315 IL_020f: br IL_0355 IL_0214: ldarg.0 IL_0215: ldstr "lamps" IL_021a: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_021f: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0224: brtrue IL_031d IL_0229: br IL_0355 IL_022e: ldarg.0 IL_022f: ldstr "lambs" IL_0234: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0239: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_023e: brtrue IL_0325 IL_0243: br IL_0355 IL_0248: ldarg.0 IL_0249: ldstr "lower" IL_024e: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0253: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0258: brtrue IL_032d IL_025d: br IL_0355 IL_0262: ldarg.0 IL_0263: ldstr "names" IL_0268: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_026d: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_0272: brtrue IL_0335 IL_0277: br IL_0355 IL_027c: ldarg.0 IL_027d: ldstr "slurp" IL_0282: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0287: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_028c: brtrue IL_033d IL_0291: br IL_0355 IL_0296: ldarg.0 IL_0297: ldstr "towed" IL_029c: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_02a1: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_02a6: brtrue IL_0345 IL_02ab: br IL_0355 IL_02b0: ldarg.0 IL_02b1: ldstr "words" IL_02b6: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_02bb: call "bool System.MemoryExtensions.SequenceEqual<char>({{keyType}}, System.ReadOnlySpan<char>)" IL_02c0: brtrue IL_034d IL_02c5: br IL_0355 IL_02ca: ldstr "blank" IL_02cf: stloc.0 IL_02d0: br IL_035b IL_02d5: ldstr "a" IL_02da: stloc.0 IL_02db: br.s IL_035b IL_02dd: ldstr "b" IL_02e2: stloc.0 IL_02e3: br.s IL_035b IL_02e5: ldstr "c" IL_02ea: stloc.0 IL_02eb: br.s IL_035b IL_02ed: ldstr "no" IL_02f2: stloc.0 IL_02f3: br.s IL_035b IL_02f5: ldstr "yes" IL_02fa: stloc.0 IL_02fb: br.s IL_035b IL_02fd: ldstr "four" IL_0302: stloc.0 IL_0303: br.s IL_035b IL_0305: ldstr "alice" IL_030a: stloc.0 IL_030b: br.s IL_035b IL_030d: ldstr "blurb" IL_0312: stloc.0 IL_0313: br.s IL_035b IL_0315: ldstr "hello" IL_031a: stloc.0 IL_031b: br.s IL_035b IL_031d: ldstr "lamps" IL_0322: stloc.0 IL_0323: br.s IL_035b IL_0325: ldstr "lambs" IL_032a: stloc.0 IL_032b: br.s IL_035b IL_032d: ldstr "lower" IL_0332: stloc.0 IL_0333: br.s IL_035b IL_0335: ldstr "names" IL_033a: stloc.0 IL_033b: br.s IL_035b IL_033d: ldstr "slurp" IL_0342: stloc.0 IL_0343: br.s IL_035b IL_0345: ldstr "towed" IL_034a: stloc.0 IL_034b: br.s IL_035b IL_034d: ldstr "words" IL_0352: stloc.0 IL_0353: br.s IL_035b IL_0355: ldstr "default" IL_035a: stloc.0 IL_035b: ldloc.0 IL_035c: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void TwoNullCases() { var source = """ public class C { public static string M(object o) { return o switch { null => "null1", null => "null2", "" => "blank", "a" => "a", "b" => "b", "c" => "c", "no" => "no", "yes" => "yes", "four" => "four", "alice" => "alice", "blurb" => "blurb", "hello" => "hello", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyEmitDiagnostics( // (8,13): error CS8510: The pattern is unreachable. It has already been handled by a previous arm of the switch expression or it is impossible to match. // null => "null2", Diagnostic(ErrorCode.ERR_SwitchArmSubsumed, "null").WithLocation(8, 13) ); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void BucketSizeOne() { var source = """ assert(null, "default"); assert("", "default"); assert("a"); assert("b", "default"); assert("ab"); assert("abc"); assert("abcd"); assert("abcde"); assert("abcdef"); assert("not", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(object o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL(PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: false); verifier.VerifyIL("C.M", """ { // Code size 272 (0x110) .maxstack 2 .locals init (string V_0, string V_1, int V_2, char V_3) IL_0000: ldarg.0 IL_0001: isinst "string" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: brfalse IL_0108 IL_000d: ldloc.1 IL_000e: brfalse IL_0108 IL_0013: ldloc.1 IL_0014: call "int string.Length.get" IL_0019: stloc.2 IL_001a: ldloc.2 IL_001b: ldc.i4.1 IL_001c: sub IL_001d: switch ( IL_0047, IL_0059, IL_006b, IL_007d, IL_008c, IL_009b, IL_00aa, IL_00b9) IL_0042: br IL_0108 IL_0047: ldloc.1 IL_0048: ldstr "a" IL_004d: call "bool string.op_Equality(string, string)" IL_0052: brtrue.s IL_00c8 IL_0054: br IL_0108 IL_0059: ldloc.1 IL_005a: ldstr "ab" IL_005f: call "bool string.op_Equality(string, string)" IL_0064: brtrue.s IL_00d0 IL_0066: br IL_0108 IL_006b: ldloc.1 IL_006c: ldstr "abc" IL_0071: call "bool string.op_Equality(string, string)" IL_0076: brtrue.s IL_00d8 IL_0078: br IL_0108 IL_007d: ldloc.1 IL_007e: ldstr "abcd" IL_0083: call "bool string.op_Equality(string, string)" IL_0088: brtrue.s IL_00e0 IL_008a: br.s IL_0108 IL_008c: ldloc.1 IL_008d: ldstr "abcde" IL_0092: call "bool string.op_Equality(string, string)" IL_0097: brtrue.s IL_00e8 IL_0099: br.s IL_0108 IL_009b: ldloc.1 IL_009c: ldstr "abcdef" IL_00a1: call "bool string.op_Equality(string, string)" IL_00a6: brtrue.s IL_00f0 IL_00a8: br.s IL_0108 IL_00aa: ldloc.1 IL_00ab: ldstr "abcdefg" IL_00b0: call "bool string.op_Equality(string, string)" IL_00b5: brtrue.s IL_00f8 IL_00b7: br.s IL_0108 IL_00b9: ldloc.1 IL_00ba: ldstr "abcdefgh" IL_00bf: call "bool string.op_Equality(string, string)" IL_00c4: brtrue.s IL_0100 IL_00c6: br.s IL_0108 IL_00c8: ldstr "a" IL_00cd: stloc.0 IL_00ce: br.s IL_010e IL_00d0: ldstr "ab" IL_00d5: stloc.0 IL_00d6: br.s IL_010e IL_00d8: ldstr "abc" IL_00dd: stloc.0 IL_00de: br.s IL_010e IL_00e0: ldstr "abcd" IL_00e5: stloc.0 IL_00e6: br.s IL_010e IL_00e8: ldstr "abcde" IL_00ed: stloc.0 IL_00ee: br.s IL_010e IL_00f0: ldstr "abcdef" IL_00f5: stloc.0 IL_00f6: br.s IL_010e IL_00f8: ldstr "abcdefg" IL_00fd: stloc.0 IL_00fe: br.s IL_010e IL_0100: ldstr "abcdefgh" IL_0105: stloc.0 IL_0106: br.s IL_010e IL_0108: ldstr "default" IL_010d: stloc.0 IL_010e: ldloc.0 IL_010f: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL("<PrivateImplementationDetails>." + PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: true); verifier.VerifyIL("C.M", """ { // Code size 335 (0x14f) .maxstack 2 .locals init (string V_0, string V_1, uint V_2) IL_0000: ldarg.0 IL_0001: isinst "string" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: brfalse IL_0147 IL_000d: ldloc.1 IL_000e: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0013: stloc.2 IL_0014: ldloc.2 IL_0015: ldc.i4 0x749bcf08 IL_001a: bgt.un.s IL_0051 IL_001c: ldloc.2 IL_001d: ldc.i4 0x2a9eb737 IL_0022: bgt.un.s IL_003c IL_0024: ldloc.2 IL_0025: ldc.i4 0x1a47e90b IL_002a: beq.s IL_00aa IL_002c: ldloc.2 IL_002d: ldc.i4 0x2a9eb737 IL_0032: beq IL_00e9 IL_0037: br IL_0147 IL_003c: ldloc.2 IL_003d: ldc.i4 0x4d2505ca IL_0042: beq.s IL_0098 IL_0044: ldloc.2 IL_0045: ldc.i4 0x749bcf08 IL_004a: beq.s IL_00cb IL_004c: br IL_0147 IL_0051: ldloc.2 IL_0052: ldc.i4 0xce3479bd IL_0057: bgt.un.s IL_0071 IL_0059: ldloc.2 IL_005a: ldc.i4 0x76daaa8d IL_005f: beq IL_00f8 IL_0064: ldloc.2 IL_0065: ldc.i4 0xce3479bd IL_006a: beq.s IL_00bc IL_006c: br IL_0147 IL_0071: ldloc.2 IL_0072: ldc.i4 0xe40c292c IL_0077: beq.s IL_0086 IL_0079: ldloc.2 IL_007a: ldc.i4 0xff478a2a IL_007f: beq.s IL_00da IL_0081: br IL_0147 IL_0086: ldloc.1 IL_0087: ldstr "a" IL_008c: call "bool string.op_Equality(string, string)" IL_0091: brtrue.s IL_0107 IL_0093: br IL_0147 IL_0098: ldloc.1 IL_0099: ldstr "ab" IL_009e: call "bool string.op_Equality(string, string)" IL_00a3: brtrue.s IL_010f IL_00a5: br IL_0147 IL_00aa: ldloc.1 IL_00ab: ldstr "abc" IL_00b0: call "bool string.op_Equality(string, string)" IL_00b5: brtrue.s IL_0117 IL_00b7: br IL_0147 IL_00bc: ldloc.1 IL_00bd: ldstr "abcd" IL_00c2: call "bool string.op_Equality(string, string)" IL_00c7: brtrue.s IL_011f IL_00c9: br.s IL_0147 IL_00cb: ldloc.1 IL_00cc: ldstr "abcde" IL_00d1: call "bool string.op_Equality(string, string)" IL_00d6: brtrue.s IL_0127 IL_00d8: br.s IL_0147 IL_00da: ldloc.1 IL_00db: ldstr "abcdef" IL_00e0: call "bool string.op_Equality(string, string)" IL_00e5: brtrue.s IL_012f IL_00e7: br.s IL_0147 IL_00e9: ldloc.1 IL_00ea: ldstr "abcdefg" IL_00ef: call "bool string.op_Equality(string, string)" IL_00f4: brtrue.s IL_0137 IL_00f6: br.s IL_0147 IL_00f8: ldloc.1 IL_00f9: ldstr "abcdefgh" IL_00fe: call "bool string.op_Equality(string, string)" IL_0103: brtrue.s IL_013f IL_0105: br.s IL_0147 IL_0107: ldstr "a" IL_010c: stloc.0 IL_010d: br.s IL_014d IL_010f: ldstr "ab" IL_0114: stloc.0 IL_0115: br.s IL_014d IL_0117: ldstr "abc" IL_011c: stloc.0 IL_011d: br.s IL_014d IL_011f: ldstr "abcd" IL_0124: stloc.0 IL_0125: br.s IL_014d IL_0127: ldstr "abcde" IL_012c: stloc.0 IL_012d: br.s IL_014d IL_012f: ldstr "abcdef" IL_0134: stloc.0 IL_0135: br.s IL_014d IL_0137: ldstr "abcdefg" IL_013c: stloc.0 IL_013d: br.s IL_014d IL_013f: ldstr "abcdefgh" IL_0144: stloc.0 IL_0145: br.s IL_014d IL_0147: ldstr "default" IL_014c: stloc.0 IL_014d: ldloc.0 IL_014e: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void BucketSizeOne_WithIntValues() { var source = """ assert(null, "default"); assert("", "default"); assert("a"); assert("b", "default"); assert("ab"); assert("abc"); assert("abcd"); assert("abcde"); assert("abcdef"); assert("not", "default"); assert("other", "default"); assert(0, "0"); assert(1, "default"); System.Console.Write("RAN"); void assert(object input, string expected = null) { if (C.M(input) != (expected ?? input.ToString())) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(object o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", 0 => "0", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL(PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: false); verifier.VerifyIL("C.M", """ { // Code size 310 (0x136) .maxstack 2 .locals init (string V_0, string V_1, int V_2, char V_3) IL_0000: ldarg.0 IL_0001: isinst "string" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: brfalse IL_00d4 IL_000d: ldloc.1 IL_000e: brfalse IL_012e IL_0013: ldloc.1 IL_0014: call "int string.Length.get" IL_0019: stloc.2 IL_001a: ldloc.2 IL_001b: ldc.i4.1 IL_001c: sub IL_001d: switch ( IL_0047, IL_005c, IL_0071, IL_0083, IL_0095, IL_00a7, IL_00b6, IL_00c5) IL_0042: br IL_012e IL_0047: ldloc.1 IL_0048: ldstr "a" IL_004d: call "bool string.op_Equality(string, string)" IL_0052: brtrue IL_00e6 IL_0057: br IL_012e IL_005c: ldloc.1 IL_005d: ldstr "ab" IL_0062: call "bool string.op_Equality(string, string)" IL_0067: brtrue IL_00ee IL_006c: br IL_012e IL_0071: ldloc.1 IL_0072: ldstr "abc" IL_0077: call "bool string.op_Equality(string, string)" IL_007c: brtrue.s IL_00f6 IL_007e: br IL_012e IL_0083: ldloc.1 IL_0084: ldstr "abcd" IL_0089: call "bool string.op_Equality(string, string)" IL_008e: brtrue.s IL_00fe IL_0090: br IL_012e IL_0095: ldloc.1 IL_0096: ldstr "abcde" IL_009b: call "bool string.op_Equality(string, string)" IL_00a0: brtrue.s IL_0106 IL_00a2: br IL_012e IL_00a7: ldloc.1 IL_00a8: ldstr "abcdef" IL_00ad: call "bool string.op_Equality(string, string)" IL_00b2: brtrue.s IL_010e IL_00b4: br.s IL_012e IL_00b6: ldloc.1 IL_00b7: ldstr "abcdefg" IL_00bc: call "bool string.op_Equality(string, string)" IL_00c1: brtrue.s IL_0116 IL_00c3: br.s IL_012e IL_00c5: ldloc.1 IL_00c6: ldstr "abcdefgh" IL_00cb: call "bool string.op_Equality(string, string)" IL_00d0: brtrue.s IL_011e IL_00d2: br.s IL_012e IL_00d4: ldarg.0 IL_00d5: isinst "int" IL_00da: brfalse.s IL_012e IL_00dc: ldarg.0 IL_00dd: unbox.any "int" IL_00e2: brfalse.s IL_0126 IL_00e4: br.s IL_012e IL_00e6: ldstr "a" IL_00eb: stloc.0 IL_00ec: br.s IL_0134 IL_00ee: ldstr "ab" IL_00f3: stloc.0 IL_00f4: br.s IL_0134 IL_00f6: ldstr "abc" IL_00fb: stloc.0 IL_00fc: br.s IL_0134 IL_00fe: ldstr "abcd" IL_0103: stloc.0 IL_0104: br.s IL_0134 IL_0106: ldstr "abcde" IL_010b: stloc.0 IL_010c: br.s IL_0134 IL_010e: ldstr "abcdef" IL_0113: stloc.0 IL_0114: br.s IL_0134 IL_0116: ldstr "abcdefg" IL_011b: stloc.0 IL_011c: br.s IL_0134 IL_011e: ldstr "abcdefgh" IL_0123: stloc.0 IL_0124: br.s IL_0134 IL_0126: ldstr "0" IL_012b: stloc.0 IL_012c: br.s IL_0134 IL_012e: ldstr "default" IL_0133: stloc.0 IL_0134: ldloc.0 IL_0135: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingStringLength() { var source = """ public class C { public static string M(string o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.MakeMemberMissing(SpecialMember.System_String__Length); comp.VerifyEmitDiagnostics( // error CS0656: Missing compiler required member 'System.String.get_Length' // Diagnostic(ErrorCode.ERR_MissingPredefinedMember, "").WithArguments("System.String", "get_Length").WithLocation(1, 1) ); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.MakeMemberMissing(SpecialMember.System_String__Length); comp.VerifyEmitDiagnostics( // error CS0656: Missing compiler required member 'System.String.get_Length' // Diagnostic(ErrorCode.ERR_MissingPredefinedMember, "").WithArguments("System.String", "get_Length").WithLocation(1, 1) ); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingStringIndexer() { var source = """ public class C { public static string M(string o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.MakeMemberMissing(SpecialMember.System_String__Chars); comp.VerifyEmitDiagnostics(); var verifier = CompileAndVerify(comp); verifier.VerifyMemberInIL(PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: false); verifier.VerifyIL("C.M", """ { // Code size 178 (0xb2) .maxstack 2 .locals init (string V_0) IL_0000: ldarg.0 IL_0001: ldstr "a" IL_0006: call "bool string.op_Equality(string, string)" IL_000b: brtrue.s IL_006a IL_000d: ldarg.0 IL_000e: ldstr "ab" IL_0013: call "bool string.op_Equality(string, string)" IL_0018: brtrue.s IL_0072 IL_001a: ldarg.0 IL_001b: ldstr "abc" IL_0020: call "bool string.op_Equality(string, string)" IL_0025: brtrue.s IL_007a IL_0027: ldarg.0 IL_0028: ldstr "abcd" IL_002d: call "bool string.op_Equality(string, string)" IL_0032: brtrue.s IL_0082 IL_0034: ldarg.0 IL_0035: ldstr "abcde" IL_003a: call "bool string.op_Equality(string, string)" IL_003f: brtrue.s IL_008a IL_0041: ldarg.0 IL_0042: ldstr "abcdef" IL_0047: call "bool string.op_Equality(string, string)" IL_004c: brtrue.s IL_0092 IL_004e: ldarg.0 IL_004f: ldstr "abcdefg" IL_0054: call "bool string.op_Equality(string, string)" IL_0059: brtrue.s IL_009a IL_005b: ldarg.0 IL_005c: ldstr "abcdefgh" IL_0061: call "bool string.op_Equality(string, string)" IL_0066: brtrue.s IL_00a2 IL_0068: br.s IL_00aa IL_006a: ldstr "a" IL_006f: stloc.0 IL_0070: br.s IL_00b0 IL_0072: ldstr "ab" IL_0077: stloc.0 IL_0078: br.s IL_00b0 IL_007a: ldstr "abc" IL_007f: stloc.0 IL_0080: br.s IL_00b0 IL_0082: ldstr "abcd" IL_0087: stloc.0 IL_0088: br.s IL_00b0 IL_008a: ldstr "abcde" IL_008f: stloc.0 IL_0090: br.s IL_00b0 IL_0092: ldstr "abcdef" IL_0097: stloc.0 IL_0098: br.s IL_00b0 IL_009a: ldstr "abcdefg" IL_009f: stloc.0 IL_00a0: br.s IL_00b0 IL_00a2: ldstr "abcdefgh" IL_00a7: stloc.0 IL_00a8: br.s IL_00b0 IL_00aa: ldstr "default" IL_00af: stloc.0 IL_00b0: ldloc.0 IL_00b1: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingSpanLength() { var source = """ public class C { public static string M(System.Span<char> o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source, targetFramework: TargetFramework.Net70); comp.MakeMemberMissing(WellKnownMember.System_Span_T__get_Length); comp.VerifyEmitDiagnostics( // (7,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "a" => "a", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""a""").WithArguments("System.Span`1", "get_Length").WithLocation(7, 13), // (8,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "ab" => "ab", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""ab""").WithArguments("System.Span`1", "get_Length").WithLocation(8, 13), // (9,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "abc" => "abc", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abc""").WithArguments("System.Span`1", "get_Length").WithLocation(9, 13), // (10,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "abcd" => "abcd", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcd""").WithArguments("System.Span`1", "get_Length").WithLocation(10, 13), // (11,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "abcde" => "abcde", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcde""").WithArguments("System.Span`1", "get_Length").WithLocation(11, 13), // (12,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "abcdef" => "abcdef", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdef""").WithArguments("System.Span`1", "get_Length").WithLocation(12, 13), // (13,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "abcdefg" => "abcdefg", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdefg""").WithArguments("System.Span`1", "get_Length").WithLocation(13, 13), // (14,13): error CS0656: Missing compiler required member 'System.Span`1.get_Length' // "abcdefgh" => "abcdefgh", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdefgh""").WithArguments("System.Span`1", "get_Length").WithLocation(14, 13) ); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingSpanIndexer() { var source = """ public class C { public static string M(System.Span<char> o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source, targetFramework: TargetFramework.Net70); comp.MakeMemberMissing(WellKnownMember.System_Span_T__get_Item); comp.VerifyEmitDiagnostics(); var verifier = CompileAndVerify(comp, verify: Verification.Skipped); verifier.VerifyIL("C.M", """ { // Code size 221 (0xdd) .maxstack 2 .locals init (string V_0) IL_0000: ldarg.0 IL_0001: ldstr "a" IL_0006: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_000b: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_0010: brtrue IL_0095 IL_0015: ldarg.0 IL_0016: ldstr "ab" IL_001b: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0020: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_0025: brtrue.s IL_009d IL_0027: ldarg.0 IL_0028: ldstr "abc" IL_002d: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0032: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_0037: brtrue.s IL_00a5 IL_0039: ldarg.0 IL_003a: ldstr "abcd" IL_003f: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0044: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_0049: brtrue.s IL_00ad IL_004b: ldarg.0 IL_004c: ldstr "abcde" IL_0051: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0056: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_005b: brtrue.s IL_00b5 IL_005d: ldarg.0 IL_005e: ldstr "abcdef" IL_0063: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0068: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_006d: brtrue.s IL_00bd IL_006f: ldarg.0 IL_0070: ldstr "abcdefg" IL_0075: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_007a: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_007f: brtrue.s IL_00c5 IL_0081: ldarg.0 IL_0082: ldstr "abcdefgh" IL_0087: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_008c: call "bool System.MemoryExtensions.SequenceEqual<char>(System.Span<char>, System.ReadOnlySpan<char>)" IL_0091: brtrue.s IL_00cd IL_0093: br.s IL_00d5 IL_0095: ldstr "a" IL_009a: stloc.0 IL_009b: br.s IL_00db IL_009d: ldstr "ab" IL_00a2: stloc.0 IL_00a3: br.s IL_00db IL_00a5: ldstr "abc" IL_00aa: stloc.0 IL_00ab: br.s IL_00db IL_00ad: ldstr "abcd" IL_00b2: stloc.0 IL_00b3: br.s IL_00db IL_00b5: ldstr "abcde" IL_00ba: stloc.0 IL_00bb: br.s IL_00db IL_00bd: ldstr "abcdef" IL_00c2: stloc.0 IL_00c3: br.s IL_00db IL_00c5: ldstr "abcdefg" IL_00ca: stloc.0 IL_00cb: br.s IL_00db IL_00cd: ldstr "abcdefgh" IL_00d2: stloc.0 IL_00d3: br.s IL_00db IL_00d5: ldstr "default" IL_00da: stloc.0 IL_00db: ldloc.0 IL_00dc: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingReadOnlySpanIndexer() { var source = """ public class C { public static string M(System.ReadOnlySpan<char> o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source, targetFramework: TargetFramework.Net70); comp.MakeMemberMissing(WellKnownMember.System_ReadOnlySpan_T__get_Item); comp.VerifyEmitDiagnostics(); var verifier = CompileAndVerify(comp, verify: Verification.Skipped); verifier.VerifyIL("C.M", """ { // Code size 221 (0xdd) .maxstack 2 .locals init (string V_0) IL_0000: ldarg.0 IL_0001: ldstr "a" IL_0006: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_000b: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_0010: brtrue IL_0095 IL_0015: ldarg.0 IL_0016: ldstr "ab" IL_001b: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0020: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_0025: brtrue.s IL_009d IL_0027: ldarg.0 IL_0028: ldstr "abc" IL_002d: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0032: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_0037: brtrue.s IL_00a5 IL_0039: ldarg.0 IL_003a: ldstr "abcd" IL_003f: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0044: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_0049: brtrue.s IL_00ad IL_004b: ldarg.0 IL_004c: ldstr "abcde" IL_0051: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0056: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_005b: brtrue.s IL_00b5 IL_005d: ldarg.0 IL_005e: ldstr "abcdef" IL_0063: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_0068: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_006d: brtrue.s IL_00bd IL_006f: ldarg.0 IL_0070: ldstr "abcdefg" IL_0075: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_007a: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_007f: brtrue.s IL_00c5 IL_0081: ldarg.0 IL_0082: ldstr "abcdefgh" IL_0087: call "System.ReadOnlySpan<char> System.MemoryExtensions.AsSpan(string)" IL_008c: call "bool System.MemoryExtensions.SequenceEqual<char>(System.ReadOnlySpan<char>, System.ReadOnlySpan<char>)" IL_0091: brtrue.s IL_00cd IL_0093: br.s IL_00d5 IL_0095: ldstr "a" IL_009a: stloc.0 IL_009b: br.s IL_00db IL_009d: ldstr "ab" IL_00a2: stloc.0 IL_00a3: br.s IL_00db IL_00a5: ldstr "abc" IL_00aa: stloc.0 IL_00ab: br.s IL_00db IL_00ad: ldstr "abcd" IL_00b2: stloc.0 IL_00b3: br.s IL_00db IL_00b5: ldstr "abcde" IL_00ba: stloc.0 IL_00bb: br.s IL_00db IL_00bd: ldstr "abcdef" IL_00c2: stloc.0 IL_00c3: br.s IL_00db IL_00c5: ldstr "abcdefg" IL_00ca: stloc.0 IL_00cb: br.s IL_00db IL_00cd: ldstr "abcdefgh" IL_00d2: stloc.0 IL_00d3: br.s IL_00db IL_00d5: ldstr "default" IL_00da: stloc.0 IL_00db: ldloc.0 IL_00dc: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingAsSpan() { var source = """ public class C { public static string M(System.Span<char> o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source, targetFramework: TargetFramework.Net70); comp.MakeMemberMissing(WellKnownMember.System_MemoryExtensions__AsSpan_String); comp.VerifyEmitDiagnostics( // (7,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "a" => "a", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""a""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(7, 13), // (8,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "ab" => "ab", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""ab""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(8, 13), // (9,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "abc" => "abc", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abc""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(9, 13), // (10,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "abcd" => "abcd", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcd""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(10, 13), // (11,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "abcde" => "abcde", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcde""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(11, 13), // (12,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "abcdef" => "abcdef", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdef""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(12, 13), // (13,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "abcdefg" => "abcdefg", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdefg""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(13, 13), // (14,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.AsSpan' // "abcdefgh" => "abcdefgh", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdefgh""").WithArguments("System.MemoryExtensions", "AsSpan").WithLocation(14, 13) ); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] internal void BucketSizeOne_MissingSequenceEquals() { var source = """ public class C { public static string M(System.Span<char> o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", _ => "default" }; } } """; var comp = CreateCompilation(source, targetFramework: TargetFramework.Net70); comp.MakeMemberMissing(WellKnownMember.System_MemoryExtensions__SequenceEqual_Span_T); comp.VerifyEmitDiagnostics( // (7,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "a" => "a", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""a""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(7, 13), // (8,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "ab" => "ab", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""ab""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(8, 13), // (9,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "abc" => "abc", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abc""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(9, 13), // (10,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "abcd" => "abcd", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcd""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(10, 13), // (11,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "abcde" => "abcde", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcde""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(11, 13), // (12,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "abcdef" => "abcdef", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdef""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(12, 13), // (13,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "abcdefg" => "abcdefg", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdefg""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(13, 13), // (14,13): error CS0656: Missing compiler required member 'System.MemoryExtensions.SequenceEqual' // "abcdefgh" => "abcdefgh", Diagnostic(ErrorCode.ERR_MissingPredefinedMember, @"""abcdefgh""").WithArguments("System.MemoryExtensions", "SequenceEqual").WithLocation(14, 13) ); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void BucketSizeOne_WithNull() { var source = """ assert(null, "null"); assert("", "default"); assert("a"); assert("ab"); assert("abc"); assert("abcd"); assert("abcde"); assert("abcdef"); assert("not", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(object o) { return o switch { "a" => "a", "ab" => "ab", "abc" => "abc", "abcd" => "abcd", "abcde" => "abcde", "abcdef" => "abcdef", "abcdefg" => "abcdefg", "abcdefgh" => "abcdefgh", null => "null", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL(PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: false); verifier.VerifyIL("C.M", """ { // Code size 288 (0x120) .maxstack 2 .locals init (string V_0, string V_1, int V_2, char V_3) IL_0000: ldarg.0 IL_0001: isinst "string" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: brfalse IL_00cb IL_000d: ldloc.1 IL_000e: brfalse IL_0118 IL_0013: ldloc.1 IL_0014: call "int string.Length.get" IL_0019: stloc.2 IL_001a: ldloc.2 IL_001b: ldc.i4.1 IL_001c: sub IL_001d: switch ( IL_0047, IL_0059, IL_006b, IL_007d, IL_008f, IL_009e, IL_00ad, IL_00bc) IL_0042: br IL_0118 IL_0047: ldloc.1 IL_0048: ldstr "a" IL_004d: call "bool string.op_Equality(string, string)" IL_0052: brtrue.s IL_00d0 IL_0054: br IL_0118 IL_0059: ldloc.1 IL_005a: ldstr "ab" IL_005f: call "bool string.op_Equality(string, string)" IL_0064: brtrue.s IL_00d8 IL_0066: br IL_0118 IL_006b: ldloc.1 IL_006c: ldstr "abc" IL_0071: call "bool string.op_Equality(string, string)" IL_0076: brtrue.s IL_00e0 IL_0078: br IL_0118 IL_007d: ldloc.1 IL_007e: ldstr "abcd" IL_0083: call "bool string.op_Equality(string, string)" IL_0088: brtrue.s IL_00e8 IL_008a: br IL_0118 IL_008f: ldloc.1 IL_0090: ldstr "abcde" IL_0095: call "bool string.op_Equality(string, string)" IL_009a: brtrue.s IL_00f0 IL_009c: br.s IL_0118 IL_009e: ldloc.1 IL_009f: ldstr "abcdef" IL_00a4: call "bool string.op_Equality(string, string)" IL_00a9: brtrue.s IL_00f8 IL_00ab: br.s IL_0118 IL_00ad: ldloc.1 IL_00ae: ldstr "abcdefg" IL_00b3: call "bool string.op_Equality(string, string)" IL_00b8: brtrue.s IL_0100 IL_00ba: br.s IL_0118 IL_00bc: ldloc.1 IL_00bd: ldstr "abcdefgh" IL_00c2: call "bool string.op_Equality(string, string)" IL_00c7: brtrue.s IL_0108 IL_00c9: br.s IL_0118 IL_00cb: ldarg.0 IL_00cc: brfalse.s IL_0110 IL_00ce: br.s IL_0118 IL_00d0: ldstr "a" IL_00d5: stloc.0 IL_00d6: br.s IL_011e IL_00d8: ldstr "ab" IL_00dd: stloc.0 IL_00de: br.s IL_011e IL_00e0: ldstr "abc" IL_00e5: stloc.0 IL_00e6: br.s IL_011e IL_00e8: ldstr "abcd" IL_00ed: stloc.0 IL_00ee: br.s IL_011e IL_00f0: ldstr "abcde" IL_00f5: stloc.0 IL_00f6: br.s IL_011e IL_00f8: ldstr "abcdef" IL_00fd: stloc.0 IL_00fe: br.s IL_011e IL_0100: ldstr "abcdefg" IL_0105: stloc.0 IL_0106: br.s IL_011e IL_0108: ldstr "abcdefgh" IL_010d: stloc.0 IL_010e: br.s IL_011e IL_0110: ldstr "null" IL_0115: stloc.0 IL_0116: br.s IL_011e IL_0118: ldstr "default" IL_011d: stloc.0 IL_011e: ldloc.0 IL_011f: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyMemberInIL("<PrivateImplementationDetails>." + PrivateImplementationDetails.SynthesizedStringHashFunctionName + "(string)", expected: true); verifier.VerifyIL("C.M", """ { // Code size 357 (0x165) .maxstack 2 .locals init (string V_0, string V_1, uint V_2) IL_0000: ldarg.0 IL_0001: isinst "string" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: brfalse IL_0110 IL_000d: ldloc.1 IL_000e: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0013: stloc.2 IL_0014: ldloc.2 IL_0015: ldc.i4 0x749bcf08 IL_001a: bgt.un.s IL_0057 IL_001c: ldloc.2 IL_001d: ldc.i4 0x2a9eb737 IL_0022: bgt.un.s IL_003f IL_0024: ldloc.2 IL_0025: ldc.i4 0x1a47e90b IL_002a: beq IL_00b0 IL_002f: ldloc.2 IL_0030: ldc.i4 0x2a9eb737 IL_0035: beq IL_00f2 IL_003a: br IL_015d IL_003f: ldloc.2 IL_0040: ldc.i4 0x4d2505ca IL_0045: beq.s IL_009e IL_0047: ldloc.2 IL_0048: ldc.i4 0x749bcf08 IL_004d: beq IL_00d4 IL_0052: br IL_015d IL_0057: ldloc.2 IL_0058: ldc.i4 0xce3479bd IL_005d: bgt.un.s IL_0077 IL_005f: ldloc.2 IL_0060: ldc.i4 0x76daaa8d IL_0065: beq IL_0101 IL_006a: ldloc.2 IL_006b: ldc.i4 0xce3479bd IL_0070: beq.s IL_00c2 IL_0072: br IL_015d IL_0077: ldloc.2 IL_0078: ldc.i4 0xe40c292c IL_007d: beq.s IL_008c IL_007f: ldloc.2 IL_0080: ldc.i4 0xff478a2a IL_0085: beq.s IL_00e3 IL_0087: br IL_015d IL_008c: ldloc.1 IL_008d: ldstr "a" IL_0092: call "bool string.op_Equality(string, string)" IL_0097: brtrue.s IL_0115 IL_0099: br IL_015d IL_009e: ldloc.1 IL_009f: ldstr "ab" IL_00a4: call "bool string.op_Equality(string, string)" IL_00a9: brtrue.s IL_011d IL_00ab: br IL_015d IL_00b0: ldloc.1 IL_00b1: ldstr "abc" IL_00b6: call "bool string.op_Equality(string, string)" IL_00bb: brtrue.s IL_0125 IL_00bd: br IL_015d IL_00c2: ldloc.1 IL_00c3: ldstr "abcd" IL_00c8: call "bool string.op_Equality(string, string)" IL_00cd: brtrue.s IL_012d IL_00cf: br IL_015d IL_00d4: ldloc.1 IL_00d5: ldstr "abcde" IL_00da: call "bool string.op_Equality(string, string)" IL_00df: brtrue.s IL_0135 IL_00e1: br.s IL_015d IL_00e3: ldloc.1 IL_00e4: ldstr "abcdef" IL_00e9: call "bool string.op_Equality(string, string)" IL_00ee: brtrue.s IL_013d IL_00f0: br.s IL_015d IL_00f2: ldloc.1 IL_00f3: ldstr "abcdefg" IL_00f8: call "bool string.op_Equality(string, string)" IL_00fd: brtrue.s IL_0145 IL_00ff: br.s IL_015d IL_0101: ldloc.1 IL_0102: ldstr "abcdefgh" IL_0107: call "bool string.op_Equality(string, string)" IL_010c: brtrue.s IL_014d IL_010e: br.s IL_015d IL_0110: ldarg.0 IL_0111: brfalse.s IL_0155 IL_0113: br.s IL_015d IL_0115: ldstr "a" IL_011a: stloc.0 IL_011b: br.s IL_0163 IL_011d: ldstr "ab" IL_0122: stloc.0 IL_0123: br.s IL_0163 IL_0125: ldstr "abc" IL_012a: stloc.0 IL_012b: br.s IL_0163 IL_012d: ldstr "abcd" IL_0132: stloc.0 IL_0133: br.s IL_0163 IL_0135: ldstr "abcde" IL_013a: stloc.0 IL_013b: br.s IL_0163 IL_013d: ldstr "abcdef" IL_0142: stloc.0 IL_0143: br.s IL_0163 IL_0145: ldstr "abcdefg" IL_014a: stloc.0 IL_014b: br.s IL_0163 IL_014d: ldstr "abcdefgh" IL_0152: stloc.0 IL_0153: br.s IL_0163 IL_0155: ldstr "null" IL_015a: stloc.0 IL_015b: br.s IL_0163 IL_015d: ldstr "default" IL_0162: stloc.0 IL_0163: ldloc.0 IL_0164: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void ContentType() { var source = """ assert(null, false); assert("", false); assert("a", false); assert("aa", false); assert("text/xml"); assert("text/css"); assert("text/csv"); assert("image/gif"); assert("image/png"); assert("text/html"); assert("text/plain"); assert("image/jpeg"); assert("application/pdf"); assert("application/xml"); assert("application/zip"); assert("application/grpc"); assert("application/json"); assert("multipart/form-data"); assert("application/javascript"); assert("application/octet-stream"); assert("text/html; charset=utf-8"); assert("text/plain; charset=utf-8"); assert("application/json; charset=utf-8"); assert("application/x-www-form-urlencoded"); System.Console.Write("RAN"); void assert(string input, bool expected = true) { if (C.M(input) != expected) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static bool M(string contentTypeValue) { switch (contentTypeValue) { case "text/xml": case "text/css": case "text/csv": case "image/gif": case "image/png": case "text/html": case "text/plain": case "image/jpeg": case "application/pdf": case "application/xml": case "application/zip": case "application/grpc": case "application/json": case "multipart/form-data": case "application/javascript": case "application/octet-stream": case "text/html; charset=utf-8": case "text/plain; charset=utf-8": case "application/json; charset=utf-8": case "application/x-www-form-urlencoded": return true; } return false; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 693 (0x2b5) .maxstack 2 .locals init (int V_0, char V_1) IL_0000: ldarg.0 IL_0001: brfalse IL_02b3 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.0 IL_000d: ldloc.0 IL_000e: ldc.i4.s 25 IL_0010: bgt.s IL_0068 IL_0012: ldloc.0 IL_0013: ldc.i4.8 IL_0014: sub IL_0015: switch ( IL_007d, IL_00a2, IL_00c7, IL_02b3, IL_02b3, IL_02b3, IL_02b3, IL_00e4, IL_010a) IL_003e: ldloc.0 IL_003f: ldc.i4.s 19 IL_0041: sub IL_0042: switch ( IL_024a, IL_02b3, IL_02b3, IL_0259, IL_02b3, IL_0128, IL_0286) IL_0063: br IL_02b3 IL_0068: ldloc.0 IL_0069: ldc.i4.s 31 IL_006b: beq IL_0295 IL_0070: ldloc.0 IL_0071: ldc.i4.s 33 IL_0073: beq IL_02a4 IL_0078: br IL_02b3 IL_007d: ldarg.0 IL_007e: ldc.i4.7 IL_007f: call "char string.this[int].get" IL_0084: stloc.1 IL_0085: ldloc.1 IL_0086: ldc.i4.s 108 IL_0088: beq IL_0145 IL_008d: ldloc.1 IL_008e: ldc.i4.s 115 IL_0090: beq IL_015a IL_0095: ldloc.1 IL_0096: ldc.i4.s 118 IL_0098: beq IL_016f IL_009d: br IL_02b3 IL_00a2: ldarg.0 IL_00a3: ldc.i4.6 IL_00a4: call "char string.this[int].get" IL_00a9: stloc.1 IL_00aa: ldloc.1 IL_00ab: ldc.i4.s 103 IL_00ad: beq IL_0184 IL_00b2: ldloc.1 IL_00b3: ldc.i4.s 112 IL_00b5: beq IL_0199 IL_00ba: ldloc.1 IL_00bb: ldc.i4.s 116 IL_00bd: beq IL_01ae IL_00c2: br IL_02b3 IL_00c7: ldarg.0 IL_00c8: ldc.i4.0 IL_00c9: call "char string.this[int].get" IL_00ce: stloc.1 IL_00cf: ldloc.1 IL_00d0: ldc.i4.s 105 IL_00d2: beq IL_01d8 IL_00d7: ldloc.1 IL_00d8: ldc.i4.s 116 IL_00da: beq IL_01c3 IL_00df: br IL_02b3 IL_00e4: ldarg.0 IL_00e5: ldc.i4.s 12 IL_00e7: call "char string.this[int].get" IL_00ec: stloc.1 IL_00ed: ldloc.1 IL_00ee: ldc.i4.s 112 IL_00f0: beq IL_01ed IL_00f5: ldloc.1 IL_00f6: ldc.i4.s 120 IL_00f8: beq IL_0202 IL_00fd: ldloc.1 IL_00fe: ldc.i4.s 122 IL_0100: beq IL_0217 IL_0105: br IL_02b3 IL_010a: ldarg.0 IL_010b: ldc.i4.s 12 IL_010d: call "char string.this[int].get" IL_0112: stloc.1 IL_0113: ldloc.1 IL_0114: ldc.i4.s 103 IL_0116: beq IL_022c IL_011b: ldloc.1 IL_011c: ldc.i4.s 106 IL_011e: beq IL_023b IL_0123: br IL_02b3 IL_0128: ldarg.0 IL_0129: ldc.i4.0 IL_012a: call "char string.this[int].get" IL_012f: stloc.1 IL_0130: ldloc.1 IL_0131: ldc.i4.s 97 IL_0133: beq IL_0268 IL_0138: ldloc.1 IL_0139: ldc.i4.s 116 IL_013b: beq IL_0277 IL_0140: br IL_02b3 IL_0145: ldarg.0 IL_0146: ldstr "text/xml" IL_014b: call "bool string.op_Equality(string, string)" IL_0150: brtrue IL_02b1 IL_0155: br IL_02b3 IL_015a: ldarg.0 IL_015b: ldstr "text/css" IL_0160: call "bool string.op_Equality(string, string)" IL_0165: brtrue IL_02b1 IL_016a: br IL_02b3 IL_016f: ldarg.0 IL_0170: ldstr "text/csv" IL_0175: call "bool string.op_Equality(string, string)" IL_017a: brtrue IL_02b1 IL_017f: br IL_02b3 IL_0184: ldarg.0 IL_0185: ldstr "image/gif" IL_018a: call "bool string.op_Equality(string, string)" IL_018f: brtrue IL_02b1 IL_0194: br IL_02b3 IL_0199: ldarg.0 IL_019a: ldstr "image/png" IL_019f: call "bool string.op_Equality(string, string)" IL_01a4: brtrue IL_02b1 IL_01a9: br IL_02b3 IL_01ae: ldarg.0 IL_01af: ldstr "text/html" IL_01b4: call "bool string.op_Equality(string, string)" IL_01b9: brtrue IL_02b1 IL_01be: br IL_02b3 IL_01c3: ldarg.0 IL_01c4: ldstr "text/plain" IL_01c9: call "bool string.op_Equality(string, string)" IL_01ce: brtrue IL_02b1 IL_01d3: br IL_02b3 IL_01d8: ldarg.0 IL_01d9: ldstr "image/jpeg" IL_01de: call "bool string.op_Equality(string, string)" IL_01e3: brtrue IL_02b1 IL_01e8: br IL_02b3 IL_01ed: ldarg.0 IL_01ee: ldstr "application/pdf" IL_01f3: call "bool string.op_Equality(string, string)" IL_01f8: brtrue IL_02b1 IL_01fd: br IL_02b3 IL_0202: ldarg.0 IL_0203: ldstr "application/xml" IL_0208: call "bool string.op_Equality(string, string)" IL_020d: brtrue IL_02b1 IL_0212: br IL_02b3 IL_0217: ldarg.0 IL_0218: ldstr "application/zip" IL_021d: call "bool string.op_Equality(string, string)" IL_0222: brtrue IL_02b1 IL_0227: br IL_02b3 IL_022c: ldarg.0 IL_022d: ldstr "application/grpc" IL_0232: call "bool string.op_Equality(string, string)" IL_0237: brtrue.s IL_02b1 IL_0239: br.s IL_02b3 IL_023b: ldarg.0 IL_023c: ldstr "application/json" IL_0241: call "bool string.op_Equality(string, string)" IL_0246: brtrue.s IL_02b1 IL_0248: br.s IL_02b3 IL_024a: ldarg.0 IL_024b: ldstr "multipart/form-data" IL_0250: call "bool string.op_Equality(string, string)" IL_0255: brtrue.s IL_02b1 IL_0257: br.s IL_02b3 IL_0259: ldarg.0 IL_025a: ldstr "application/javascript" IL_025f: call "bool string.op_Equality(string, string)" IL_0264: brtrue.s IL_02b1 IL_0266: br.s IL_02b3 IL_0268: ldarg.0 IL_0269: ldstr "application/octet-stream" IL_026e: call "bool string.op_Equality(string, string)" IL_0273: brtrue.s IL_02b1 IL_0275: br.s IL_02b3 IL_0277: ldarg.0 IL_0278: ldstr "text/html; charset=utf-8" IL_027d: call "bool string.op_Equality(string, string)" IL_0282: brtrue.s IL_02b1 IL_0284: br.s IL_02b3 IL_0286: ldarg.0 IL_0287: ldstr "text/plain; charset=utf-8" IL_028c: call "bool string.op_Equality(string, string)" IL_0291: brtrue.s IL_02b1 IL_0293: br.s IL_02b3 IL_0295: ldarg.0 IL_0296: ldstr "application/json; charset=utf-8" IL_029b: call "bool string.op_Equality(string, string)" IL_02a0: brtrue.s IL_02b1 IL_02a2: br.s IL_02b3 IL_02a4: ldarg.0 IL_02a5: ldstr "application/x-www-form-urlencoded" IL_02aa: call "bool string.op_Equality(string, string)" IL_02af: brfalse.s IL_02b3 IL_02b1: ldc.i4.1 IL_02b2: ret IL_02b3: ldc.i4.0 IL_02b4: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 694 (0x2b6) .maxstack 2 .locals init (uint V_0) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldc.i4 0xad238cee IL_000d: bgt.un IL_00ac IL_0012: ldloc.0 IL_0013: ldc.i4 0x498c93a5 IL_0018: bgt.un.s IL_0063 IL_001a: ldloc.0 IL_001b: ldc.i4 0x12648e18 IL_0020: bgt.un.s IL_003d IL_0022: ldloc.0 IL_0023: ldc.i4 0xa54742b IL_0028: beq IL_0287 IL_002d: ldloc.0 IL_002e: ldc.i4 0x12648e18 IL_0033: beq IL_0146 IL_0038: br IL_02b4 IL_003d: ldloc.0 IL_003e: ldc.i4 0x335c6202 IL_0043: beq IL_0278 IL_0048: ldloc.0 IL_0049: ldc.i4 0x3e4bb053 IL_004e: beq IL_0203 IL_0053: ldloc.0 IL_0054: ldc.i4 0x498c93a5 IL_0059: beq IL_025a IL_005e: br IL_02b4 IL_0063: ldloc.0 IL_0064: ldc.i4 0x75d8656e IL_0069: bgt.un.s IL_0086 IL_006b: ldloc.0 IL_006c: ldc.i4 0x69e8e6a8 IL_0071: beq IL_023c IL_0076: ldloc.0 IL_0077: ldc.i4 0x75d8656e IL_007c: beq IL_01af IL_0081: br IL_02b4 IL_0086: ldloc.0 IL_0087: ldc.i4 0x84ebb23d IL_008c: beq IL_0218 IL_0091: ldloc.0 IL_0092: ldc.i4 0xacccdd84 IL_0097: beq IL_01ee IL_009c: ldloc.0 IL_009d: ldc.i4 0xad238cee IL_00a2: beq IL_015b IL_00a7: br IL_02b4 IL_00ac: ldloc.0 IL_00ad: ldc.i4 0xd23bd685 IL_00b2: bgt.un.s IL_00fd IL_00b4: ldloc.0 IL_00b5: ldc.i4 0xb22394cd IL_00ba: bgt.un.s IL_00d7 IL_00bc: ldloc.0 IL_00bd: ldc.i4 0xb00abf3a IL_00c2: beq IL_019a IL_00c7: ldloc.0 IL_00c8: ldc.i4 0xb22394cd IL_00cd: beq IL_0170 IL_00d2: br IL_02b4 IL_00d7: ldloc.0 IL_00d8: ldc.i4 0xb71b3e3f IL_00dd: beq IL_0185 IL_00e2: ldloc.0 IL_00e3: ldc.i4 0xc0fe6950 IL_00e8: beq IL_0269 IL_00ed: ldloc.0 IL_00ee: ldc.i4 0xd23bd685 IL_00f3: beq IL_01c4 IL_00f8: br IL_02b4 IL_00fd: ldloc.0 IL_00fe: ldc.i4 0xdced728d IL_0103: bgt.un.s IL_0120 IL_0105: ldloc.0 IL_0106: ldc.i4 0xd4121ccc IL_010b: beq IL_0296 IL_0110: ldloc.0 IL_0111: ldc.i4 0xdced728d IL_0116: beq IL_024b IL_011b: br IL_02b4 IL_0120: ldloc.0 IL_0121: ldc.i4 0xe88a7c5d IL_0126: beq IL_01d9 IL_012b: ldloc.0 IL_012c: ldc.i4 0xef625ac9 IL_0131: beq IL_02a5 IL_0136: ldloc.0 IL_0137: ldc.i4 0xfb352546 IL_013c: beq IL_022d IL_0141: br IL_02b4 IL_0146: ldarg.0 IL_0147: ldstr "text/xml" IL_014c: call "bool string.op_Equality(string, string)" IL_0151: brtrue IL_02b2 IL_0156: br IL_02b4 IL_015b: ldarg.0 IL_015c: ldstr "text/css" IL_0161: call "bool string.op_Equality(string, string)" IL_0166: brtrue IL_02b2 IL_016b: br IL_02b4 IL_0170: ldarg.0 IL_0171: ldstr "text/csv" IL_0176: call "bool string.op_Equality(string, string)" IL_017b: brtrue IL_02b2 IL_0180: br IL_02b4 IL_0185: ldarg.0 IL_0186: ldstr "image/gif" IL_018b: call "bool string.op_Equality(string, string)" IL_0190: brtrue IL_02b2 IL_0195: br IL_02b4 IL_019a: ldarg.0 IL_019b: ldstr "image/png" IL_01a0: call "bool string.op_Equality(string, string)" IL_01a5: brtrue IL_02b2 IL_01aa: br IL_02b4 IL_01af: ldarg.0 IL_01b0: ldstr "text/html" IL_01b5: call "bool string.op_Equality(string, string)" IL_01ba: brtrue IL_02b2 IL_01bf: br IL_02b4 IL_01c4: ldarg.0 IL_01c5: ldstr "text/plain" IL_01ca: call "bool string.op_Equality(string, string)" IL_01cf: brtrue IL_02b2 IL_01d4: br IL_02b4 IL_01d9: ldarg.0 IL_01da: ldstr "image/jpeg" IL_01df: call "bool string.op_Equality(string, string)" IL_01e4: brtrue IL_02b2 IL_01e9: br IL_02b4 IL_01ee: ldarg.0 IL_01ef: ldstr "application/pdf" IL_01f4: call "bool string.op_Equality(string, string)" IL_01f9: brtrue IL_02b2 IL_01fe: br IL_02b4 IL_0203: ldarg.0 IL_0204: ldstr "application/xml" IL_0209: call "bool string.op_Equality(string, string)" IL_020e: brtrue IL_02b2 IL_0213: br IL_02b4 IL_0218: ldarg.0 IL_0219: ldstr "application/zip" IL_021e: call "bool string.op_Equality(string, string)" IL_0223: brtrue IL_02b2 IL_0228: br IL_02b4 IL_022d: ldarg.0 IL_022e: ldstr "application/grpc" IL_0233: call "bool string.op_Equality(string, string)" IL_0238: brtrue.s IL_02b2 IL_023a: br.s IL_02b4 IL_023c: ldarg.0 IL_023d: ldstr "application/json" IL_0242: call "bool string.op_Equality(string, string)" IL_0247: brtrue.s IL_02b2 IL_0249: br.s IL_02b4 IL_024b: ldarg.0 IL_024c: ldstr "multipart/form-data" IL_0251: call "bool string.op_Equality(string, string)" IL_0256: brtrue.s IL_02b2 IL_0258: br.s IL_02b4 IL_025a: ldarg.0 IL_025b: ldstr "application/javascript" IL_0260: call "bool string.op_Equality(string, string)" IL_0265: brtrue.s IL_02b2 IL_0267: br.s IL_02b4 IL_0269: ldarg.0 IL_026a: ldstr "application/octet-stream" IL_026f: call "bool string.op_Equality(string, string)" IL_0274: brtrue.s IL_02b2 IL_0276: br.s IL_02b4 IL_0278: ldarg.0 IL_0279: ldstr "text/html; charset=utf-8" IL_027e: call "bool string.op_Equality(string, string)" IL_0283: brtrue.s IL_02b2 IL_0285: br.s IL_02b4 IL_0287: ldarg.0 IL_0288: ldstr "text/plain; charset=utf-8" IL_028d: call "bool string.op_Equality(string, string)" IL_0292: brtrue.s IL_02b2 IL_0294: br.s IL_02b4 IL_0296: ldarg.0 IL_0297: ldstr "application/json; charset=utf-8" IL_029c: call "bool string.op_Equality(string, string)" IL_02a1: brtrue.s IL_02b2 IL_02a3: br.s IL_02b4 IL_02a5: ldarg.0 IL_02a6: ldstr "application/x-www-form-urlencoded" IL_02ab: call "bool string.op_Equality(string, string)" IL_02b0: brfalse.s IL_02b4 IL_02b2: ldc.i4.1 IL_02b3: ret IL_02b4: ldc.i4.0 IL_02b5: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void BucketSizeTen() { var source = """ for (int i = 0; i < 50; i++) { assert(i.ToString("D2")); } for (int i = 0; i < 10; i++) { assert("A" + i.ToString("D1"), "default"); assert(i.ToString("D1") + "A", "default"); } assert(null, "default"); assert("", "default"); assert("50", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { expected ??= input; if (C.M(input) != expected) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string x) { return x switch { "00" => "00", "01" => "01", "02" => "02", "03" => "03", "04" => "04", "05" => "05", "06" => "06", "07" => "07", "08" => "08", "09" => "09", "10" => "10", "11" => "11", "12" => "12", "13" => "13", "14" => "14", "15" => "15", "16" => "16", "17" => "17", "18" => "18", "19" => "19", "20" => "20", "21" => "21", "22" => "22", "23" => "23", "24" => "24", "25" => "25", "26" => "26", "27" => "27", "28" => "28", "29" => "29", "30" => "30", "31" => "31", "32" => "32", "33" => "33", "34" => "34", "35" => "35", "36" => "36", "37" => "37", "38" => "38", "39" => "39", "40" => "40", "41" => "41", "42" => "42", "43" => "43", "44" => "44", "45" => "45", "46" => "46", "47" => "47", "48" => "48", "49" => "49", "59" => "59", "69" => "69", "79" => "79", "89" => "89", "99" => "99", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 2632 (0xa48) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x87f05176 IL_000d: bgt.un IL_01c5 IL_0012: ldloc.1 IL_0013: ldc.i4 0x1bed68db IL_0018: bgt.un IL_00e5 IL_001d: ldloc.1 IL_001e: ldc.i4 0x18eb258b IL_0023: bgt.un.s IL_0079 IL_0025: ldloc.1 IL_0026: ldc.i4 0x14eb1f3f IL_002b: bgt.un.s IL_0053 IL_002d: ldloc.1 IL_002e: ldc.i4 0xce8d410 IL_0033: beq IL_07bf IL_0038: ldloc.1 IL_0039: ldc.i4 0x13eb1dac IL_003e: beq IL_050a IL_0043: ldloc.1 IL_0044: ldc.i4 0x14eb1f3f IL_0049: beq IL_051f IL_004e: br IL_0a40 IL_0053: ldloc.1 IL_0054: ldc.i4 0x14fea6f7 IL_0059: beq IL_07fe IL_005e: ldloc.1 IL_005f: ldc.i4 0x17eb23f8 IL_0064: beq IL_04b6 IL_0069: ldloc.1 IL_006a: ldc.i4 0x18eb258b IL_006f: beq IL_04cb IL_0074: br IL_0a40 IL_0079: ldloc.1 IL_007a: ldc.i4 0x19ed65b5 IL_007f: bgt.un.s IL_00a7 IL_0081: ldloc.1 IL_0082: ldc.i4 0x18ed6422 IL_0087: beq IL_044d IL_008c: ldloc.1 IL_008d: ldc.i4 0x19eb271e IL_0092: beq IL_04e0 IL_0097: ldloc.1 IL_0098: ldc.i4 0x19ed65b5 IL_009d: beq IL_0438 IL_00a2: br IL_0a40 IL_00a7: ldloc.1 IL_00a8: ldc.i4 0x1aed6748 IL_00ad: bgt.un.s IL_00ca IL_00af: ldloc.1 IL_00b0: ldc.i4 0x1aeb28b1 IL_00b5: beq IL_04f5 IL_00ba: ldloc.1 IL_00bb: ldc.i4 0x1aed6748 IL_00c0: beq IL_0423 IL_00c5: br IL_0a40 IL_00ca: ldloc.1 IL_00cb: ldc.i4 0x1beb2a44 IL_00d0: beq IL_0462 IL_00d5: ldloc.1 IL_00d6: ldc.i4 0x1bed68db IL_00db: beq IL_040e IL_00e0: br IL_0a40 IL_00e5: ldloc.1 IL_00e6: ldc.i4 0x1fed6f27 IL_00eb: bgt.un.s IL_0159 IL_00ed: ldloc.1 IL_00ee: ldc.i4 0x1deb2d6a IL_00f3: bgt.un.s IL_011b IL_00f5: ldloc.1 IL_00f6: ldc.i4 0x1ceb2bd7 IL_00fb: beq IL_0477 IL_0100: ldloc.1 IL_0101: ldc.i4 0x1ced6a6e IL_0106: beq IL_03f9 IL_010b: ldloc.1 IL_010c: ldc.i4 0x1deb2d6a IL_0111: beq IL_048c IL_0116: br IL_0a40 IL_011b: ldloc.1 IL_011c: ldc.i4 0x1eeb2efd IL_0121: bgt.un.s IL_013e IL_0123: ldloc.1 IL_0124: ldc.i4 0x1ded6c01 IL_0129: beq IL_03e4 IL_012e: ldloc.1 IL_012f: ldc.i4 0x1eeb2efd IL_0134: beq IL_04a1 IL_0139: br IL_0a40 IL_013e: ldloc.1 IL_013f: ldc.i4 0x1eed6d94 IL_0144: beq IL_03cf IL_0149: ldloc.1 IL_014a: ldc.i4 0x1fed6f27 IL_014f: beq IL_03ba IL_0154: br IL_0a40 IL_0159: ldloc.1 IL_015a: ldc.i4 0x85f04e50 IL_015f: bgt.un.s IL_0187 IL_0161: ldloc.1 IL_0162: ldc.i4 0x20ed70ba IL_0167: beq IL_03a5 IL_016c: ldloc.1 IL_016d: ldc.i4 0x21ed724d IL_0172: beq IL_0390 IL_0177: ldloc.1 IL_0178: ldc.i4 0x85f04e50 IL_017d: beq IL_0630 IL_0182: br IL_0a40 IL_0187: ldloc.1 IL_0188: ldc.i4 0x86f04fe3 IL_018d: bgt.un.s IL_01aa IL_018f: ldloc.1 IL_0190: ldc.i4 0x86e383f0 IL_0195: beq IL_0717 IL_019a: ldloc.1 IL_019b: ldc.i4 0x86f04fe3 IL_01a0: beq IL_0645 IL_01a5: br IL_0a40 IL_01aa: ldloc.1 IL_01ab: ldc.i4 0x87e38583 IL_01b0: beq IL_0702 IL_01b5: ldloc.1 IL_01b6: ldc.i4 0x87f05176 IL_01bb: beq IL_0606 IL_01c0: br IL_0a40 IL_01c5: ldloc.1 IL_01c6: ldc.i4 0x8ce38d62 IL_01cb: bgt.un IL_02b0 IL_01d0: ldloc.1 IL_01d1: ldc.i4 0x8ae38a3c IL_01d6: bgt.un.s IL_0244 IL_01d8: ldloc.1 IL_01d9: ldc.i4 0x88f291a0 IL_01de: bgt.un.s IL_0206 IL_01e0: ldloc.1 IL_01e1: ldc.i4 0x88e38716 IL_01e6: beq IL_06ed IL_01eb: ldloc.1 IL_01ec: ldc.i4 0x88f05309 IL_01f1: beq IL_061b IL_01f6: ldloc.1 IL_01f7: ldc.i4 0x88f291a0 IL_01fc: beq IL_059d IL_0201: br IL_0a40 IL_0206: ldloc.1 IL_0207: ldc.i4 0x89f0549c IL_020c: bgt.un.s IL_0229 IL_020e: ldloc.1 IL_020f: ldc.i4 0x89e388a9 IL_0214: beq IL_06d8 IL_0219: ldloc.1 IL_021a: ldc.i4 0x89f0549c IL_021f: beq IL_0684 IL_0224: br IL_0a40 IL_0229: ldloc.1 IL_022a: ldc.i4 0x89f29333 IL_022f: beq IL_0588 IL_0234: ldloc.1 IL_0235: ldc.i4 0x8ae38a3c IL_023a: beq IL_076b IL_023f: br IL_0a40 IL_0244: ldloc.1 IL_0245: ldc.i4 0x8be38bcf IL_024a: bgt.un.s IL_0272 IL_024c: ldloc.1 IL_024d: ldc.i4 0x8af0562f IL_0252: beq IL_0699 IL_0257: ldloc.1 IL_0258: ldc.i4 0x8af294c6 IL_025d: beq IL_05c7 IL_0262: ldloc.1 IL_0263: ldc.i4 0x8be38bcf IL_0268: beq IL_0756 IL_026d: br IL_0a40 IL_0272: ldloc.1 IL_0273: ldc.i4 0x8bf29659 IL_0278: bgt.un.s IL_0295 IL_027a: ldloc.1 IL_027b: ldc.i4 0x8bf057c2 IL_0280: beq IL_065a IL_0285: ldloc.1 IL_0286: ldc.i4 0x8bf29659 IL_028b: beq IL_05b2 IL_0290: br IL_0a40 IL_0295: ldloc.1 IL_0296: ldc.i4 0x8ce14ecb IL_029b: beq IL_07aa IL_02a0: ldloc.1 IL_02a1: ldc.i4 0x8ce38d62 IL_02a6: beq IL_0741 IL_02ab: br IL_0a40 IL_02b0: ldloc.1 IL_02b1: ldc.i4 0x8ff29ca5 IL_02b6: bgt.un.s IL_0324 IL_02b8: ldloc.1 IL_02b9: ldc.i4 0x8de38ef5 IL_02be: bgt.un.s IL_02e6 IL_02c0: ldloc.1 IL_02c1: ldc.i4 0x8cf05955 IL_02c6: beq IL_066f IL_02cb: ldloc.1 IL_02cc: ldc.i4 0x8cf297ec IL_02d1: beq IL_0549 IL_02d6: ldloc.1 IL_02d7: ldc.i4 0x8de38ef5 IL_02dc: beq IL_072c IL_02e1: br IL_0a40 IL_02e6: ldloc.1 IL_02e7: ldc.i4 0x8ef29b12 IL_02ec: bgt.un.s IL_0309 IL_02ee: ldloc.1 IL_02ef: ldc.i4 0x8df2997f IL_02f4: beq IL_0534 IL_02f9: ldloc.1 IL_02fa: ldc.i4 0x8ef29b12 IL_02ff: beq IL_0573 IL_0304: br IL_0a40 IL_0309: ldloc.1 IL_030a: ldc.i4 0x8ff05e0e IL_030f: beq IL_06ae IL_0314: ldloc.1 IL_0315: ldc.i4 0x8ff29ca5 IL_031a: beq IL_055e IL_031f: br IL_0a40 IL_0324: ldloc.1 IL_0325: ldc.i4 0x91e39541 IL_032a: bgt.un.s IL_0352 IL_032c: ldloc.1 IL_032d: ldc.i4 0x90e393ae IL_0332: beq IL_0795 IL_0337: ldloc.1 IL_0338: ldc.i4 0x90f05fa1 IL_033d: beq IL_06c3 IL_0342: ldloc.1 IL_0343: ldc.i4 0x91e39541 IL_0348: beq IL_0780 IL_034d: br IL_0a40 IL_0352: ldloc.1 IL_0353: ldc.i4 0x95f2a617 IL_0358: bgt.un.s IL_0375 IL_035a: ldloc.1 IL_035b: ldc.i4 0x94f2a484 IL_0360: beq IL_05f1 IL_0365: ldloc.1 IL_0366: ldc.i4 0x95f2a617 IL_036b: beq IL_05dc IL_0370: br IL_0a40 IL_0375: ldloc.1 IL_0376: ldc.i4 0x98e5dedd IL_037b: beq IL_07d4 IL_0380: ldloc.1 IL_0381: ldc.i4 0x9901b55a IL_0386: beq IL_07e9 IL_038b: br IL_0a40 IL_0390: ldarg.0 IL_0391: ldstr "00" IL_0396: call "bool string.op_Equality(string, string)" IL_039b: brtrue IL_0813 IL_03a0: br IL_0a40 IL_03a5: ldarg.0 IL_03a6: ldstr "01" IL_03ab: call "bool string.op_Equality(string, string)" IL_03b0: brtrue IL_081e IL_03b5: br IL_0a40 IL_03ba: ldarg.0 IL_03bb: ldstr "02" IL_03c0: call "bool string.op_Equality(string, string)" IL_03c5: brtrue IL_0829 IL_03ca: br IL_0a40 IL_03cf: ldarg.0 IL_03d0: ldstr "03" IL_03d5: call "bool string.op_Equality(string, string)" IL_03da: brtrue IL_0834 IL_03df: br IL_0a40 IL_03e4: ldarg.0 IL_03e5: ldstr "04" IL_03ea: call "bool string.op_Equality(string, string)" IL_03ef: brtrue IL_083f IL_03f4: br IL_0a40 IL_03f9: ldarg.0 IL_03fa: ldstr "05" IL_03ff: call "bool string.op_Equality(string, string)" IL_0404: brtrue IL_084a IL_0409: br IL_0a40 IL_040e: ldarg.0 IL_040f: ldstr "06" IL_0414: call "bool string.op_Equality(string, string)" IL_0419: brtrue IL_0855 IL_041e: br IL_0a40 IL_0423: ldarg.0 IL_0424: ldstr "07" IL_0429: call "bool string.op_Equality(string, string)" IL_042e: brtrue IL_0860 IL_0433: br IL_0a40 IL_0438: ldarg.0 IL_0439: ldstr "08" IL_043e: call "bool string.op_Equality(string, string)" IL_0443: brtrue IL_086b IL_0448: br IL_0a40 IL_044d: ldarg.0 IL_044e: ldstr "09" IL_0453: call "bool string.op_Equality(string, string)" IL_0458: brtrue IL_0876 IL_045d: br IL_0a40 IL_0462: ldarg.0 IL_0463: ldstr "10" IL_0468: call "bool string.op_Equality(string, string)" IL_046d: brtrue IL_0881 IL_0472: br IL_0a40 IL_0477: ldarg.0 IL_0478: ldstr "11" IL_047d: call "bool string.op_Equality(string, string)" IL_0482: brtrue IL_088c IL_0487: br IL_0a40 IL_048c: ldarg.0 IL_048d: ldstr "12" IL_0492: call "bool string.op_Equality(string, string)" IL_0497: brtrue IL_0897 IL_049c: br IL_0a40 IL_04a1: ldarg.0 IL_04a2: ldstr "13" IL_04a7: call "bool string.op_Equality(string, string)" IL_04ac: brtrue IL_08a2 IL_04b1: br IL_0a40 IL_04b6: ldarg.0 IL_04b7: ldstr "14" IL_04bc: call "bool string.op_Equality(string, string)" IL_04c1: brtrue IL_08ad IL_04c6: br IL_0a40 IL_04cb: ldarg.0 IL_04cc: ldstr "15" IL_04d1: call "bool string.op_Equality(string, string)" IL_04d6: brtrue IL_08b8 IL_04db: br IL_0a40 IL_04e0: ldarg.0 IL_04e1: ldstr "16" IL_04e6: call "bool string.op_Equality(string, string)" IL_04eb: brtrue IL_08c3 IL_04f0: br IL_0a40 IL_04f5: ldarg.0 IL_04f6: ldstr "17" IL_04fb: call "bool string.op_Equality(string, string)" IL_0500: brtrue IL_08ce IL_0505: br IL_0a40 IL_050a: ldarg.0 IL_050b: ldstr "18" IL_0510: call "bool string.op_Equality(string, string)" IL_0515: brtrue IL_08d9 IL_051a: br IL_0a40 IL_051f: ldarg.0 IL_0520: ldstr "19" IL_0525: call "bool string.op_Equality(string, string)" IL_052a: brtrue IL_08e4 IL_052f: br IL_0a40 IL_0534: ldarg.0 IL_0535: ldstr "20" IL_053a: call "bool string.op_Equality(string, string)" IL_053f: brtrue IL_08ef IL_0544: br IL_0a40 IL_0549: ldarg.0 IL_054a: ldstr "21" IL_054f: call "bool string.op_Equality(string, string)" IL_0554: brtrue IL_08fa IL_0559: br IL_0a40 IL_055e: ldarg.0 IL_055f: ldstr "22" IL_0564: call "bool string.op_Equality(string, string)" IL_0569: brtrue IL_0905 IL_056e: br IL_0a40 IL_0573: ldarg.0 IL_0574: ldstr "23" IL_0579: call "bool string.op_Equality(string, string)" IL_057e: brtrue IL_0910 IL_0583: br IL_0a40 IL_0588: ldarg.0 IL_0589: ldstr "24" IL_058e: call "bool string.op_Equality(string, string)" IL_0593: brtrue IL_091b IL_0598: br IL_0a40 IL_059d: ldarg.0 IL_059e: ldstr "25" IL_05a3: call "bool string.op_Equality(string, string)" IL_05a8: brtrue IL_0926 IL_05ad: br IL_0a40 IL_05b2: ldarg.0 IL_05b3: ldstr "26" IL_05b8: call "bool string.op_Equality(string, string)" IL_05bd: brtrue IL_0931 IL_05c2: br IL_0a40 IL_05c7: ldarg.0 IL_05c8: ldstr "27" IL_05cd: call "bool string.op_Equality(string, string)" IL_05d2: brtrue IL_093c IL_05d7: br IL_0a40 IL_05dc: ldarg.0 IL_05dd: ldstr "28" IL_05e2: call "bool string.op_Equality(string, string)" IL_05e7: brtrue IL_0947 IL_05ec: br IL_0a40 IL_05f1: ldarg.0 IL_05f2: ldstr "29" IL_05f7: call "bool string.op_Equality(string, string)" IL_05fc: brtrue IL_0952 IL_0601: br IL_0a40 IL_0606: ldarg.0 IL_0607: ldstr "30" IL_060c: call "bool string.op_Equality(string, string)" IL_0611: brtrue IL_095d IL_0616: br IL_0a40 IL_061b: ldarg.0 IL_061c: ldstr "31" IL_0621: call "bool string.op_Equality(string, string)" IL_0626: brtrue IL_0968 IL_062b: br IL_0a40 IL_0630: ldarg.0 IL_0631: ldstr "32" IL_0636: call "bool string.op_Equality(string, string)" IL_063b: brtrue IL_0973 IL_0640: br IL_0a40 IL_0645: ldarg.0 IL_0646: ldstr "33" IL_064b: call "bool string.op_Equality(string, string)" IL_0650: brtrue IL_097e IL_0655: br IL_0a40 IL_065a: ldarg.0 IL_065b: ldstr "34" IL_0660: call "bool string.op_Equality(string, string)" IL_0665: brtrue IL_0989 IL_066a: br IL_0a40 IL_066f: ldarg.0 IL_0670: ldstr "35" IL_0675: call "bool string.op_Equality(string, string)" IL_067a: brtrue IL_0994 IL_067f: br IL_0a40 IL_0684: ldarg.0 IL_0685: ldstr "36" IL_068a: call "bool string.op_Equality(string, string)" IL_068f: brtrue IL_099f IL_0694: br IL_0a40 IL_0699: ldarg.0 IL_069a: ldstr "37" IL_069f: call "bool string.op_Equality(string, string)" IL_06a4: brtrue IL_09aa IL_06a9: br IL_0a40 IL_06ae: ldarg.0 IL_06af: ldstr "38" IL_06b4: call "bool string.op_Equality(string, string)" IL_06b9: brtrue IL_09b5 IL_06be: br IL_0a40 IL_06c3: ldarg.0 IL_06c4: ldstr "39" IL_06c9: call "bool string.op_Equality(string, string)" IL_06ce: brtrue IL_09c0 IL_06d3: br IL_0a40 IL_06d8: ldarg.0 IL_06d9: ldstr "40" IL_06de: call "bool string.op_Equality(string, string)" IL_06e3: brtrue IL_09c8 IL_06e8: br IL_0a40 IL_06ed: ldarg.0 IL_06ee: ldstr "41" IL_06f3: call "bool string.op_Equality(string, string)" IL_06f8: brtrue IL_09d0 IL_06fd: br IL_0a40 IL_0702: ldarg.0 IL_0703: ldstr "42" IL_0708: call "bool string.op_Equality(string, string)" IL_070d: brtrue IL_09d8 IL_0712: br IL_0a40 IL_0717: ldarg.0 IL_0718: ldstr "43" IL_071d: call "bool string.op_Equality(string, string)" IL_0722: brtrue IL_09e0 IL_0727: br IL_0a40 IL_072c: ldarg.0 IL_072d: ldstr "44" IL_0732: call "bool string.op_Equality(string, string)" IL_0737: brtrue IL_09e8 IL_073c: br IL_0a40 IL_0741: ldarg.0 IL_0742: ldstr "45" IL_0747: call "bool string.op_Equality(string, string)" IL_074c: brtrue IL_09f0 IL_0751: br IL_0a40 IL_0756: ldarg.0 IL_0757: ldstr "46" IL_075c: call "bool string.op_Equality(string, string)" IL_0761: brtrue IL_09f8 IL_0766: br IL_0a40 IL_076b: ldarg.0 IL_076c: ldstr "47" IL_0771: call "bool string.op_Equality(string, string)" IL_0776: brtrue IL_0a00 IL_077b: br IL_0a40 IL_0780: ldarg.0 IL_0781: ldstr "48" IL_0786: call "bool string.op_Equality(string, string)" IL_078b: brtrue IL_0a08 IL_0790: br IL_0a40 IL_0795: ldarg.0 IL_0796: ldstr "49" IL_079b: call "bool string.op_Equality(string, string)" IL_07a0: brtrue IL_0a10 IL_07a5: br IL_0a40 IL_07aa: ldarg.0 IL_07ab: ldstr "59" IL_07b0: call "bool string.op_Equality(string, string)" IL_07b5: brtrue IL_0a18 IL_07ba: br IL_0a40 IL_07bf: ldarg.0 IL_07c0: ldstr "69" IL_07c5: call "bool string.op_Equality(string, string)" IL_07ca: brtrue IL_0a20 IL_07cf: br IL_0a40 IL_07d4: ldarg.0 IL_07d5: ldstr "79" IL_07da: call "bool string.op_Equality(string, string)" IL_07df: brtrue IL_0a28 IL_07e4: br IL_0a40 IL_07e9: ldarg.0 IL_07ea: ldstr "89" IL_07ef: call "bool string.op_Equality(string, string)" IL_07f4: brtrue IL_0a30 IL_07f9: br IL_0a40 IL_07fe: ldarg.0 IL_07ff: ldstr "99" IL_0804: call "bool string.op_Equality(string, string)" IL_0809: brtrue IL_0a38 IL_080e: br IL_0a40 IL_0813: ldstr "00" IL_0818: stloc.0 IL_0819: br IL_0a46 IL_081e: ldstr "01" IL_0823: stloc.0 IL_0824: br IL_0a46 IL_0829: ldstr "02" IL_082e: stloc.0 IL_082f: br IL_0a46 IL_0834: ldstr "03" IL_0839: stloc.0 IL_083a: br IL_0a46 IL_083f: ldstr "04" IL_0844: stloc.0 IL_0845: br IL_0a46 IL_084a: ldstr "05" IL_084f: stloc.0 IL_0850: br IL_0a46 IL_0855: ldstr "06" IL_085a: stloc.0 IL_085b: br IL_0a46 IL_0860: ldstr "07" IL_0865: stloc.0 IL_0866: br IL_0a46 IL_086b: ldstr "08" IL_0870: stloc.0 IL_0871: br IL_0a46 IL_0876: ldstr "09" IL_087b: stloc.0 IL_087c: br IL_0a46 IL_0881: ldstr "10" IL_0886: stloc.0 IL_0887: br IL_0a46 IL_088c: ldstr "11" IL_0891: stloc.0 IL_0892: br IL_0a46 IL_0897: ldstr "12" IL_089c: stloc.0 IL_089d: br IL_0a46 IL_08a2: ldstr "13" IL_08a7: stloc.0 IL_08a8: br IL_0a46 IL_08ad: ldstr "14" IL_08b2: stloc.0 IL_08b3: br IL_0a46 IL_08b8: ldstr "15" IL_08bd: stloc.0 IL_08be: br IL_0a46 IL_08c3: ldstr "16" IL_08c8: stloc.0 IL_08c9: br IL_0a46 IL_08ce: ldstr "17" IL_08d3: stloc.0 IL_08d4: br IL_0a46 IL_08d9: ldstr "18" IL_08de: stloc.0 IL_08df: br IL_0a46 IL_08e4: ldstr "19" IL_08e9: stloc.0 IL_08ea: br IL_0a46 IL_08ef: ldstr "20" IL_08f4: stloc.0 IL_08f5: br IL_0a46 IL_08fa: ldstr "21" IL_08ff: stloc.0 IL_0900: br IL_0a46 IL_0905: ldstr "22" IL_090a: stloc.0 IL_090b: br IL_0a46 IL_0910: ldstr "23" IL_0915: stloc.0 IL_0916: br IL_0a46 IL_091b: ldstr "24" IL_0920: stloc.0 IL_0921: br IL_0a46 IL_0926: ldstr "25" IL_092b: stloc.0 IL_092c: br IL_0a46 IL_0931: ldstr "26" IL_0936: stloc.0 IL_0937: br IL_0a46 IL_093c: ldstr "27" IL_0941: stloc.0 IL_0942: br IL_0a46 IL_0947: ldstr "28" IL_094c: stloc.0 IL_094d: br IL_0a46 IL_0952: ldstr "29" IL_0957: stloc.0 IL_0958: br IL_0a46 IL_095d: ldstr "30" IL_0962: stloc.0 IL_0963: br IL_0a46 IL_0968: ldstr "31" IL_096d: stloc.0 IL_096e: br IL_0a46 IL_0973: ldstr "32" IL_0978: stloc.0 IL_0979: br IL_0a46 IL_097e: ldstr "33" IL_0983: stloc.0 IL_0984: br IL_0a46 IL_0989: ldstr "34" IL_098e: stloc.0 IL_098f: br IL_0a46 IL_0994: ldstr "35" IL_0999: stloc.0 IL_099a: br IL_0a46 IL_099f: ldstr "36" IL_09a4: stloc.0 IL_09a5: br IL_0a46 IL_09aa: ldstr "37" IL_09af: stloc.0 IL_09b0: br IL_0a46 IL_09b5: ldstr "38" IL_09ba: stloc.0 IL_09bb: br IL_0a46 IL_09c0: ldstr "39" IL_09c5: stloc.0 IL_09c6: br.s IL_0a46 IL_09c8: ldstr "40" IL_09cd: stloc.0 IL_09ce: br.s IL_0a46 IL_09d0: ldstr "41" IL_09d5: stloc.0 IL_09d6: br.s IL_0a46 IL_09d8: ldstr "42" IL_09dd: stloc.0 IL_09de: br.s IL_0a46 IL_09e0: ldstr "43" IL_09e5: stloc.0 IL_09e6: br.s IL_0a46 IL_09e8: ldstr "44" IL_09ed: stloc.0 IL_09ee: br.s IL_0a46 IL_09f0: ldstr "45" IL_09f5: stloc.0 IL_09f6: br.s IL_0a46 IL_09f8: ldstr "46" IL_09fd: stloc.0 IL_09fe: br.s IL_0a46 IL_0a00: ldstr "47" IL_0a05: stloc.0 IL_0a06: br.s IL_0a46 IL_0a08: ldstr "48" IL_0a0d: stloc.0 IL_0a0e: br.s IL_0a46 IL_0a10: ldstr "49" IL_0a15: stloc.0 IL_0a16: br.s IL_0a46 IL_0a18: ldstr "59" IL_0a1d: stloc.0 IL_0a1e: br.s IL_0a46 IL_0a20: ldstr "69" IL_0a25: stloc.0 IL_0a26: br.s IL_0a46 IL_0a28: ldstr "79" IL_0a2d: stloc.0 IL_0a2e: br.s IL_0a46 IL_0a30: ldstr "89" IL_0a35: stloc.0 IL_0a36: br.s IL_0a46 IL_0a38: ldstr "99" IL_0a3d: stloc.0 IL_0a3e: br.s IL_0a46 IL_0a40: ldstr "default" IL_0a45: stloc.0 IL_0a46: ldloc.0 IL_0a47: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void GetDriveType() { // Based on https://github.com/dotnet/runtime/blob/main/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs#L78-L327A // Buckets: 5, 3, 1, 3, 2, 2, 1, 1, 2, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 3, 2, 4, 1, 2, 3, 1, 2, 4, 3, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 10, 3, 2, 5, 1, 1, 3, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 2, 3, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("cddafs", "cddafs"); assert("cd9660", "cddafs"); assert("iso", "cddafs"); assert("isofs", "cddafs"); assert("iso9660", "cddafs"); assert("fuseiso", "cddafs"); assert("fuseiso9660", "cddafs"); assert("udf", "cddafs"); assert("umview-mod-umfuseiso9660", "cddafs"); assert("aafs", "aafs"); assert("adfs", "aafs"); assert("affs", "aafs"); assert("anoninode", "aafs"); assert("anon-inode FS", "aafs"); assert("apfs", "aafs"); assert("balloon-kvm-fs", "aafs"); assert("bdevfs", "aafs"); assert("befs", "aafs"); assert("bfs", "aafs"); assert("bootfs", "aafs"); assert("bpf_fs", "aafs"); assert("btrfs", "aafs"); assert("btrfs_test", "aafs"); assert("coh", "aafs"); assert("daxfs", "aafs"); assert("drvfs", "aafs"); assert("efivarfs", "aafs"); assert("efs", "aafs"); assert("exfat", "aafs"); assert("exofs", "aafs"); assert("ext", "aafs"); assert("ext2", "aafs"); assert("ext2_old", "aafs"); assert("ext3", "aafs"); assert("ext2/ext3", "aafs"); assert("ext4", "aafs"); assert("ext4dev", "aafs"); assert("f2fs", "aafs"); assert("fat", "aafs"); assert("fuseext2", "aafs"); assert("fusefat", "aafs"); assert("hfs", "aafs"); assert("hfs+", "aafs"); assert("hfsplus", "aafs"); assert("hfsx", "aafs"); assert("hostfs", "aafs"); assert("hpfs", "aafs"); assert("inodefs", "aafs"); assert("inotifyfs", "aafs"); assert("jbd", "aafs"); assert("jbd2", "aafs"); assert("jffs", "aafs"); assert("jffs2", "aafs"); assert("jfs", "aafs"); assert("lofs", "aafs"); assert("logfs", "aafs"); assert("lxfs", "aafs"); assert("minix (30 char.)", "aafs"); assert("minix v2 (30 char.)", "aafs"); assert("minix v2", "aafs"); assert("minix", "aafs"); assert("minix_old", "aafs"); assert("minix2", "aafs"); assert("minix2v2", "aafs"); assert("minix2 v2", "aafs"); assert("minix3", "aafs"); assert("mlfs", "aafs"); assert("msdos", "aafs"); assert("nilfs", "aafs"); assert("nsfs", "aafs"); assert("ntfs", "aafs"); assert("ntfs-3g", "aafs"); assert("ocfs2", "aafs"); assert("omfs", "aafs"); assert("overlay", "aafs"); assert("overlayfs", "aafs"); assert("pstorefs", "aafs"); assert("qnx4", "aafs"); assert("qnx6", "aafs"); assert("reiserfs", "aafs"); assert("rpc_pipefs", "aafs"); assert("sffs", "aafs"); assert("smackfs", "aafs"); assert("squashfs", "aafs"); assert("swap", "aafs"); assert("sysv", "aafs"); assert("sysv2", "aafs"); assert("sysv4", "aafs"); assert("tracefs", "aafs"); assert("ubifs", "aafs"); assert("ufs", "aafs"); assert("ufscigam", "aafs"); assert("ufs2", "aafs"); assert("umsdos", "aafs"); assert("umview-mod-umfuseext2", "aafs"); assert("v9fs", "aafs"); assert("vagrant", "aafs"); assert("vboxfs", "aafs"); assert("vxfs", "aafs"); assert("vxfs_olt", "aafs"); assert("vzfs", "aafs"); assert("wslfs", "aafs"); assert("xenix", "aafs"); assert("xfs", "aafs"); assert("xia", "aafs"); assert("xiafs", "aafs"); assert("xmount", "aafs"); assert("zfs", "aafs"); assert("zfs-fuse", "aafs"); assert("zsmallocfs", "aafs"); assert("9p", "9p"); assert("acfs", "9p"); assert("afp", "9p"); assert("afpfs", "9p"); assert("afs", "9p"); assert("aufs", "9p"); assert("autofs", "9p"); assert("autofs4", "9p"); assert("beaglefs", "9p"); assert("ceph", "9p"); assert("cifs", "9p"); assert("coda", "9p"); assert("coherent", "9p"); assert("curlftpfs", "9p"); assert("davfs2", "9p"); assert("dlm", "9p"); assert("ecryptfs", "9p"); assert("eCryptfs", "9p"); assert("fhgfs", "9p"); assert("flickrfs", "9p"); assert("ftp", "9p"); assert("fuse", "9p"); assert("fuseblk", "9p"); assert("fusedav", "9p"); assert("fusesmb", "9p"); assert("gfsgfs2", "9p"); assert("gfs/gfs2", "9p"); assert("gfs2", "9p"); assert("glusterfs-client", "9p"); assert("gmailfs", "9p"); assert("gpfs", "9p"); assert("ibrix", "9p"); assert("k-afs", "9p"); assert("kafs", "9p"); assert("kbfuse", "9p"); assert("ltspfs", "9p"); assert("lustre", "9p"); assert("ncp", "9p"); assert("ncpfs", "9p"); assert("nfs", "9p"); assert("nfs4", "9p"); assert("nfsd", "9p"); assert("novell", "9p"); assert("obexfs", "9p"); assert("panfs", "9p"); assert("prl_fs", "9p"); assert("s3ql", "9p"); assert("samba", "9p"); assert("smb", "9p"); assert("smb2", "9p"); assert("smbfs", "9p"); assert("snfs", "9p"); assert("sshfs", "9p"); assert("vmhgfs", "9p"); assert("webdav", "9p"); assert("wikipediafs", "9p"); assert("xenfs", "9p"); assert("anon_inode", "anon_inode"); assert("anon_inodefs", "anon_inode"); assert("aptfs", "anon_inode"); assert("avfs", "anon_inode"); assert("bdev", "anon_inode"); assert("binfmt_misc", "anon_inode"); assert("cgroup", "anon_inode"); assert("cgroupfs", "anon_inode"); assert("cgroup2fs", "anon_inode"); assert("configfs", "anon_inode"); assert("cpuset", "anon_inode"); assert("cramfs", "anon_inode"); assert("cramfs-wend", "anon_inode"); assert("cryptkeeper", "anon_inode"); assert("ctfs", "anon_inode"); assert("debugfs", "anon_inode"); assert("dev", "anon_inode"); assert("devfs", "anon_inode"); assert("devpts", "anon_inode"); assert("devtmpfs", "anon_inode"); assert("encfs", "anon_inode"); assert("fd", "anon_inode"); assert("fdesc", "anon_inode"); assert("fuse.gvfsd-fuse", "anon_inode"); assert("fusectl", "anon_inode"); assert("futexfs", "anon_inode"); assert("hugetlbfs", "anon_inode"); assert("libpam-encfs", "anon_inode"); assert("ibpam-mount", "anon_inode"); assert("mntfs", "anon_inode"); assert("mqueue", "anon_inode"); assert("mtpfs", "anon_inode"); assert("mythtvfs", "anon_inode"); assert("objfs", "anon_inode"); assert("openprom", "anon_inode"); assert("openpromfs", "anon_inode"); assert("pipefs", "anon_inode"); assert("plptools", "anon_inode"); assert("proc", "anon_inode"); assert("pstore", "anon_inode"); assert("pytagsfs", "anon_inode"); assert("ramfs", "anon_inode"); assert("rofs", "anon_inode"); assert("romfs", "anon_inode"); assert("rootfs", "anon_inode"); assert("securityfs", "anon_inode"); assert("selinux", "anon_inode"); assert("selinuxfs", "anon_inode"); assert("sharefs", "anon_inode"); assert("sockfs", "anon_inode"); assert("sysfs", "anon_inode"); assert("tmpfs", "anon_inode"); assert("udev", "anon_inode"); assert("usbdev", "anon_inode"); assert("usbdevfs", "anon_inode"); assert("gphotofs", "gphotofs"); assert("sdcardfs", "gphotofs"); assert("usbfs", "gphotofs"); assert("usbdevice", "gphotofs"); assert("vfat", "gphotofs"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { expected ??= input; if (C.M(input) != expected) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string fileSystemName) { switch (fileSystemName) { case "cddafs": case "cd9660": case "iso": case "isofs": case "iso9660": case "fuseiso": case "fuseiso9660": case "udf": case "umview-mod-umfuseiso9660": return "cddafs"; case "aafs": case "adfs": case "affs": case "anoninode": case "anon-inode FS": case "apfs": case "balloon-kvm-fs": case "bdevfs": case "befs": case "bfs": case "bootfs": case "bpf_fs": case "btrfs": case "btrfs_test": case "coh": case "daxfs": case "drvfs": case "efivarfs": case "efs": case "exfat": case "exofs": case "ext": case "ext2": case "ext2_old": case "ext3": case "ext2/ext3": case "ext4": case "ext4dev": case "f2fs": case "fat": case "fuseext2": case "fusefat": case "hfs": case "hfs+": case "hfsplus": case "hfsx": case "hostfs": case "hpfs": case "inodefs": case "inotifyfs": case "jbd": case "jbd2": case "jffs": case "jffs2": case "jfs": case "lofs": case "logfs": case "lxfs": case "minix (30 char.)": case "minix v2 (30 char.)": case "minix v2": case "minix": case "minix_old": case "minix2": case "minix2v2": case "minix2 v2": case "minix3": case "mlfs": case "msdos": case "nilfs": case "nsfs": case "ntfs": case "ntfs-3g": case "ocfs2": case "omfs": case "overlay": case "overlayfs": case "pstorefs": case "qnx4": case "qnx6": case "reiserfs": case "rpc_pipefs": case "sffs": case "smackfs": case "squashfs": case "swap": case "sysv": case "sysv2": case "sysv4": case "tracefs": case "ubifs": case "ufs": case "ufscigam": case "ufs2": case "umsdos": case "umview-mod-umfuseext2": case "v9fs": case "vagrant": case "vboxfs": case "vxfs": case "vxfs_olt": case "vzfs": case "wslfs": case "xenix": case "xfs": case "xia": case "xiafs": case "xmount": case "zfs": case "zfs-fuse": case "zsmallocfs": return "aafs"; case "9p": case "acfs": case "afp": case "afpfs": case "afs": case "aufs": case "autofs": case "autofs4": case "beaglefs": case "ceph": case "cifs": case "coda": case "coherent": case "curlftpfs": case "davfs2": case "dlm": case "ecryptfs": case "eCryptfs": case "fhgfs": case "flickrfs": case "ftp": case "fuse": case "fuseblk": case "fusedav": case "fusesmb": case "gfsgfs2": case "gfs/gfs2": case "gfs2": case "glusterfs-client": case "gmailfs": case "gpfs": case "ibrix": case "k-afs": case "kafs": case "kbfuse": case "ltspfs": case "lustre": case "ncp": case "ncpfs": case "nfs": case "nfs4": case "nfsd": case "novell": case "obexfs": case "panfs": case "prl_fs": case "s3ql": case "samba": case "smb": case "smb2": case "smbfs": case "snfs": case "sshfs": case "vmhgfs": case "webdav": case "wikipediafs": case "xenfs": return "9p"; case "anon_inode": case "anon_inodefs": case "aptfs": case "avfs": case "bdev": case "binfmt_misc": case "cgroup": case "cgroupfs": case "cgroup2fs": case "configfs": case "cpuset": case "cramfs": case "cramfs-wend": case "cryptkeeper": case "ctfs": case "debugfs": case "dev": case "devfs": case "devpts": case "devtmpfs": case "encfs": case "fd": case "fdesc": case "fuse.gvfsd-fuse": case "fusectl": case "futexfs": case "hugetlbfs": case "libpam-encfs": case "ibpam-mount": case "mntfs": case "mqueue": case "mtpfs": case "mythtvfs": case "objfs": case "openprom": case "openpromfs": case "pipefs": case "plptools": case "proc": case "pstore": case "pytagsfs": case "ramfs": case "rofs": case "romfs": case "rootfs": case "securityfs": case "selinux": case "selinuxfs": case "sharefs": case "sockfs": case "sysfs": case "tmpfs": case "udev": case "usbdev": case "usbdevfs": return "anon_inode"; case "gphotofs": case "sdcardfs": case "usbfs": case "usbdevice": case "vfat": return "gphotofs"; default: return "default"; } } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 8586 (0x218a) .maxstack 2 .locals init (uint V_0) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldc.i4 0x93254270 IL_000d: bgt.un IL_0777 IL_0012: ldloc.0 IL_0013: ldc.i4 0x38c6cc37 IL_0018: bgt.un IL_03be IL_001d: ldloc.0 IL_001e: ldc.i4 0x2065d503 IL_0023: bgt.un IL_01f3 IL_0028: ldloc.0 IL_0029: ldc.i4 0xe306532 IL_002e: bgt.un IL_0113 IL_0033: ldloc.0 IL_0034: ldc.i4 0x9cd23fb IL_0039: bgt.un.s IL_00a7 IL_003b: ldloc.0 IL_003c: ldc.i4 0x4a3c0d1 IL_0041: bgt.un.s IL_0069 IL_0043: ldloc.0 IL_0044: ldc.i4 0x1dcdad6 IL_0049: beq IL_12e1 IL_004e: ldloc.0 IL_004f: ldc.i4 0x3a1df42 IL_0054: beq IL_18c9 IL_0059: ldloc.0 IL_005a: ldc.i4 0x4a3c0d1 IL_005f: beq IL_20d3 IL_0064: br IL_2184 IL_0069: ldloc.0 IL_006a: ldc.i4 0x73ff364 IL_006f: bgt.un.s IL_008c IL_0071: ldloc.0 IL_0072: ldc.i4 0x4f8da09 IL_0077: beq IL_1470 IL_007c: ldloc.0 IL_007d: ldc.i4 0x73ff364 IL_0082: beq IL_1518 IL_0087: br IL_2184 IL_008c: ldloc.0 IL_008d: ldc.i4 0x8305bc0 IL_0092: beq IL_11d0 IL_0097: ldloc.0 IL_0098: ldc.i4 0x9cd23fb IL_009d: beq IL_11bb IL_00a2: br IL_2184 IL_00a7: ldloc.0 IL_00a8: ldc.i4 0xb177b39 IL_00ad: bgt.un.s IL_00d5 IL_00af: ldloc.0 IL_00b0: ldc.i4 0xa57b005 IL_00b5: beq IL_15ab IL_00ba: ldloc.0 IL_00bb: ldc.i4 0xaa0d1c1 IL_00c0: beq IL_1263 IL_00c5: ldloc.0 IL_00c6: ldc.i4 0xb177b39 IL_00cb: beq IL_1e1e IL_00d0: br IL_2184 IL_00d5: ldloc.0 IL_00d6: ldc.i4 0xd347e19 IL_00db: bgt.un.s IL_00f8 IL_00dd: ldloc.0 IL_00de: ldc.i4 0xb1a5699 IL_00e3: beq IL_1875 IL_00e8: ldloc.0 IL_00e9: ldc.i4 0xd347e19 IL_00ee: beq IL_20be IL_00f3: br IL_2184 IL_00f8: ldloc.0 IL_00f9: ldc.i4 0xdb92b7a IL_00fe: beq IL_202b IL_0103: ldloc.0 IL_0104: ldc.i4 0xe306532 IL_0109: beq IL_117c IL_010e: br IL_2184 IL_0113: ldloc.0 IL_0114: ldc.i4 0x14361444 IL_0119: bgt.un.s IL_0187 IL_011b: ldloc.0 IL_011c: ldc.i4 0x11854a78 IL_0121: bgt.un.s IL_0149 IL_0123: ldloc.0 IL_0124: ldc.i4 0xf3066c5 IL_0129: beq IL_11a6 IL_012e: ldloc.0 IL_012f: ldc.i4 0x1036061b IL_0134: beq IL_212a IL_0139: ldloc.0 IL_013a: ldc.i4 0x11854a78 IL_013f: beq IL_1aeb IL_0144: br IL_2184 IL_0149: ldloc.0 IL_014a: ldc.i4 0x1283563d IL_014f: bgt.un.s IL_016c IL_0151: ldloc.0 IL_0152: ldc.i4 0x11e3e89a IL_0157: beq IL_19ef IL_015c: ldloc.0 IL_015d: ldc.i4 0x1283563d IL_0162: beq IL_1ac1 IL_0167: br IL_2184 IL_016c: ldloc.0 IL_016d: ldc.i4 0x1312c917 IL_0172: beq IL_1239 IL_0177: ldloc.0 IL_0178: ldc.i4 0x14361444 IL_017d: beq IL_17cd IL_0182: br IL_2184 IL_0187: ldloc.0 IL_0188: ldc.i4 0x1c2d7204 IL_018d: bgt.un.s IL_01b5 IL_018f: ldloc.0 IL_0190: ldc.i4 0x194bd3e1 IL_0195: beq IL_1986 IL_019a: ldloc.0 IL_019b: ldc.i4 0x1b223d32 IL_01a0: beq IL_1c50 IL_01a5: ldloc.0 IL_01a6: ldc.i4 0x1c2d7204 IL_01ab: beq IL_16fb IL_01b0: br IL_2184 IL_01b5: ldloc.0 IL_01b6: ldc.i4 0x1d950792 IL_01bb: bgt.un.s IL_01d8 IL_01bd: ldloc.0 IL_01be: ldc.i4 0x1ca03ef2 IL_01c3: beq IL_1b2a IL_01c8: ldloc.0 IL_01c9: ldc.i4 0x1d950792 IL_01ce: beq IL_1b00 IL_01d3: br IL_2184 IL_01d8: ldloc.0 IL_01d9: ldc.i4 0x2032cda8 IL_01de: beq IL_20fd IL_01e3: ldloc.0 IL_01e4: ldc.i4 0x2065d503 IL_01e9: beq IL_1503 IL_01ee: br IL_2184 IL_01f3: ldloc.0 IL_01f4: ldc.i4 0x2a1ea797 IL_01f9: bgt.un IL_02de IL_01fe: ldloc.0 IL_01ff: ldc.i4 0x2520eead IL_0204: bgt.un.s IL_0272 IL_0206: ldloc.0 IL_0207: ldc.i4 0x2161f7c8 IL_020c: bgt.un.s IL_0234 IL_020e: ldloc.0 IL_020f: ldc.i4 0x20f48093 IL_0214: beq IL_1b69 IL_0219: ldloc.0 IL_021a: ldc.i4 0x2117f6c8 IL_021f: beq IL_1002 IL_0224: ldloc.0 IL_0225: ldc.i4 0x2161f7c8 IL_022a: beq IL_156c IL_022f: br IL_2184 IL_0234: ldloc.0 IL_0235: ldc.i4 0x2465d7a1 IL_023a: bgt.un.s IL_0257 IL_023c: ldloc.0 IL_023d: ldc.i4 0x22edfc61 IL_0242: beq IL_0fd8 IL_0247: ldloc.0 IL_0248: ldc.i4 0x2465d7a1 IL_024d: beq IL_1bd2 IL_0252: br IL_2184 IL_0257: ldloc.0 IL_0258: ldc.i4 0x24b9c5bb IL_025d: beq IL_130b IL_0262: ldloc.0 IL_0263: ldc.i4 0x2520eead IL_0268: beq IL_1f05 IL_026d: br IL_2184 IL_0272: ldloc.0 IL_0273: ldc.i4 0x277c5a36 IL_0278: bgt.un.s IL_02a0 IL_027a: ldloc.0 IL_027b: ldc.i4 0x2548e1fd IL_0280: beq IL_1dca IL_0285: ldloc.0 IL_0286: ldc.i4 0x27767257 IL_028b: beq IL_188a IL_0290: ldloc.0 IL_0291: ldc.i4 0x277c5a36 IL_0296: beq IL_14d9 IL_029b: br IL_2184 IL_02a0: ldloc.0 IL_02a1: ldc.i4 0x2a0e6591 IL_02a6: bgt.un.s IL_02c3 IL_02a8: ldloc.0 IL_02a9: ldc.i4 0x286b88ce IL_02ae: beq IL_1080 IL_02b3: ldloc.0 IL_02b4: ldc.i4 0x2a0e6591 IL_02b9: beq IL_2016 IL_02be: br IL_2184 IL_02c3: ldloc.0 IL_02c4: ldc.i4 0x2a1b6620 IL_02c9: beq IL_2157 IL_02ce: ldloc.0 IL_02cf: ldc.i4 0x2a1ea797 IL_02d4: beq IL_1971 IL_02d9: br IL_2184 IL_02de: ldloc.0 IL_02df: ldc.i4 0x315a74f8 IL_02e4: bgt.un.s IL_0352 IL_02e6: ldloc.0 IL_02e7: ldc.i4 0x2f4cca7c IL_02ec: bgt.un.s IL_0314 IL_02ee: ldloc.0 IL_02ef: ldc.i4 0x2a932d90 IL_02f4: beq IL_0f6f IL_02f9: ldloc.0 IL_02fa: ldc.i4 0x2c81f023 IL_02ff: beq IL_19da IL_0304: ldloc.0 IL_0305: ldc.i4 0x2f4cca7c IL_030a: beq IL_1908 IL_030f: br IL_2184 IL_0314: ldloc.0 IL_0315: ldc.i4 0x2fb5fb43 IL_031a: bgt.un.s IL_0337 IL_031c: ldloc.0 IL_031d: ldc.i4 0x2f5c2137 IL_0322: beq IL_1596 IL_0327: ldloc.0 IL_0328: ldc.i4 0x2fb5fb43 IL_032d: beq IL_167d IL_0332: br IL_2184 IL_0337: ldloc.0 IL_0338: ldc.i4 0x305d8a52 IL_033d: beq IL_178e IL_0342: ldloc.0 IL_0343: ldc.i4 0x315a74f8 IL_0348: beq IL_1191 IL_034d: br IL_2184 IL_0352: ldloc.0 IL_0353: ldc.i4 0x341798d6 IL_0358: bgt.un.s IL_0380 IL_035a: ldloc.0 IL_035b: ldc.i4 0x323d8177 IL_0360: beq IL_184b IL_0365: ldloc.0 IL_0366: ldc.i4 0x333d830a IL_036b: beq IL_1821 IL_0370: ldloc.0 IL_0371: ldc.i4 0x341798d6 IL_0376: beq IL_180c IL_037b: br IL_2184 IL_0380: ldloc.0 IL_0381: ldc.i4 0x35b53372 IL_0386: bgt.un.s IL_03a3 IL_0388: ldloc.0 IL_0389: ldc.i4 0x34bfd292 IL_038e: beq IL_1aac IL_0393: ldloc.0 IL_0394: ldc.i4 0x35b53372 IL_0399: beq IL_1710 IL_039e: br IL_2184 IL_03a3: ldloc.0 IL_03a4: ldc.i4 0x35c0eda3 IL_03a9: beq IL_1653 IL_03ae: ldloc.0 IL_03af: ldc.i4 0x38c6cc37 IL_03b4: beq IL_1485 IL_03b9: br IL_2184 IL_03be: ldloc.0 IL_03bf: ldc.i4 0x64ed874e IL_03c4: bgt.un IL_0594 IL_03c9: ldloc.0 IL_03ca: ldc.i4 0x4bfefd8c IL_03cf: bgt.un IL_04b4 IL_03d4: ldloc.0 IL_03d5: ldc.i4 0x455f7d3b IL_03da: bgt.un.s IL_0448 IL_03dc: ldloc.0 IL_03dd: ldc.i4 0x409a11e6 IL_03e2: bgt.un.s IL_040a IL_03e4: ldloc.0 IL_03e5: ldc.i4 0x3cbefaf8 IL_03ea: beq IL_10fe IL_03ef: ldloc.0 IL_03f0: ldc.i4 0x3db1994e IL_03f5: beq IL_1a58 IL_03fa: ldloc.0 IL_03fb: ldc.i4 0x409a11e6 IL_0400: beq IL_1581 IL_0405: br IL_2184 IL_040a: ldloc.0 IL_040b: ldc.i4 0x43473ee5 IL_0410: bgt.un.s IL_042d IL_0412: ldloc.0 IL_0413: ldc.i4 0x40ad1df2 IL_0418: beq IL_1e87 IL_041d: ldloc.0 IL_041e: ldc.i4 0x43473ee5 IL_0423: beq IL_1a04 IL_0428: br IL_2184 IL_042d: ldloc.0 IL_042e: ldc.i4 0x43dde827 IL_0433: beq IL_11e5 IL_0438: ldloc.0 IL_0439: ldc.i4 0x455f7d3b IL_043e: beq IL_18f3 IL_0443: br IL_2184 IL_0448: ldloc.0 IL_0449: ldc.i4 0x49dd7dcb IL_044e: bgt.un.s IL_0476 IL_0450: ldloc.0 IL_0451: ldc.i4 0x46d186b0 IL_0456: beq IL_17a3 IL_045b: ldloc.0 IL_045c: ldc.i4 0x474bacf2 IL_0461: beq IL_11fa IL_0466: ldloc.0 IL_0467: ldc.i4 0x49dd7dcb IL_046c: beq IL_0fc3 IL_0471: br IL_2184 IL_0476: ldloc.0 IL_0477: ldc.i4 0x4a74c64a IL_047c: bgt.un.s IL_0499 IL_047e: ldloc.0 IL_047f: ldc.i4 0x4a2124db IL_0484: beq IL_152d IL_0489: ldloc.0 IL_048a: ldc.i4 0x4a74c64a IL_048f: beq IL_1389 IL_0494: br IL_2184 IL_0499: ldloc.0 IL_049a: ldc.i4 0x4bdfa75f IL_049f: beq IL_19c5 IL_04a4: ldloc.0 IL_04a5: ldc.i4 0x4bfefd8c IL_04aa: beq IL_17f7 IL_04af: br IL_2184 IL_04b4: ldloc.0 IL_04b5: ldc.i4 0x5ae00ad0 IL_04ba: bgt.un.s IL_0528 IL_04bc: ldloc.0 IL_04bd: ldc.i4 0x53ca5aaf IL_04c2: bgt.un.s IL_04ea IL_04c4: ldloc.0 IL_04c5: ldc.i4 0x5078a99e IL_04ca: beq IL_0fed IL_04cf: ldloc.0 IL_04d0: ldc.i4 0x52ca591c IL_04d5: beq IL_1407 IL_04da: ldloc.0 IL_04db: ldc.i4 0x53ca5aaf IL_04e0: beq IL_1446 IL_04e5: br IL_2184 IL_04ea: ldloc.0 IL_04eb: ldc.i4 0x58bca78e IL_04f0: bgt.un.s IL_050d IL_04f2: ldloc.0 IL_04f3: ldc.i4 0x572a4188 IL_04f8: beq IL_12a2 IL_04fd: ldloc.0 IL_04fe: ldc.i4 0x58bca78e IL_0503: beq IL_0f84 IL_0508: br IL_2184 IL_050d: ldloc.0 IL_050e: ldc.i4 0x5a5f7d91 IL_0513: beq IL_0f30 IL_0518: ldloc.0 IL_0519: ldc.i4 0x5ae00ad0 IL_051e: beq IL_0fae IL_0523: br IL_2184 IL_0528: ldloc.0 IL_0529: ldc.i4 0x6063309a IL_052e: bgt.un.s IL_0556 IL_0530: ldloc.0 IL_0531: ldc.i4 0x5b72871c IL_0536: beq IL_13f2 IL_053b: ldloc.0 IL_053c: ldc.i4 0x5fede3ca IL_0541: beq IL_173a IL_0546: ldloc.0 IL_0547: ldc.i4 0x6063309a IL_054c: beq IL_1f98 IL_0551: br IL_2184 IL_0556: ldloc.0 IL_0557: ldc.i4 0x61f6c9d5 IL_055c: bgt.un.s IL_0579 IL_055e: ldloc.0 IL_055f: ldc.i4 0x61d89cab IL_0564: beq IL_2094 IL_0569: ldloc.0 IL_056a: ldc.i4 0x61f6c9d5 IL_056f: beq IL_0f5a IL_0574: br IL_2184 IL_0579: ldloc.0 IL_057a: ldc.i4 0x64e4818a IL_057f: beq IL_13b3 IL_0584: ldloc.0 IL_0585: ldc.i4 0x64ed874e IL_058a: beq IL_15d5 IL_058f: br IL_2184 IL_0594: ldloc.0 IL_0595: ldc.i4 0x7e34f956 IL_059a: bgt.un IL_067f IL_059f: ldloc.0 IL_05a0: ldc.i4 0x6b08265a IL_05a5: bgt.un.s IL_0613 IL_05a7: ldloc.0 IL_05a8: ldc.i4 0x69082334 IL_05ad: bgt.un.s IL_05d5 IL_05af: ldloc.0 IL_05b0: ldc.i4 0x65795313 IL_05b5: beq IL_1128 IL_05ba: ldloc.0 IL_05bb: ldc.i4 0x66f9fd96 IL_05c0: beq IL_1f44 IL_05c5: ldloc.0 IL_05c6: ldc.i4 0x69082334 IL_05cb: beq IL_1557 IL_05d0: br IL_2184 IL_05d5: ldloc.0 IL_05d6: ldc.i4 0x6922f347 IL_05db: bgt.un.s IL_05f8 IL_05dd: ldloc.0 IL_05de: ldc.i4 0x690dd584 IL_05e3: beq IL_10aa IL_05e8: ldloc.0 IL_05e9: ldc.i4 0x6922f347 IL_05ee: beq IL_1e5d IL_05f3: br IL_2184 IL_05f8: ldloc.0 IL_05f9: ldc.i4 0x6a103d13 IL_05fe: beq IL_1cce IL_0603: ldloc.0 IL_0604: ldc.i4 0x6b08265a IL_0609: beq IL_1542 IL_060e: br IL_2184 IL_0613: ldloc.0 IL_0614: ldc.i4 0x707a4a2f IL_0619: bgt.un.s IL_0641 IL_061b: ldloc.0 IL_061c: ldc.i4 0x6cab0635 IL_0621: beq IL_18b4 IL_0626: ldloc.0 IL_0627: ldc.i4 0x6fb5337e IL_062c: beq IL_106b IL_0631: ldloc.0 IL_0632: ldc.i4 0x707a4a2f IL_0637: beq IL_1947 IL_063c: br IL_2184 IL_0641: ldloc.0 IL_0642: ldc.i4 0x76564766 IL_0647: bgt.un.s IL_0664 IL_0649: ldloc.0 IL_064a: ldc.i4 0x727a797c IL_064f: beq IL_1431 IL_0654: ldloc.0 IL_0655: ldc.i4 0x76564766 IL_065a: beq IL_1e33 IL_065f: br IL_2184 IL_0664: ldloc.0 IL_0665: ldc.i4 0x76a68d74 IL_066a: beq IL_1167 IL_066f: ldloc.0 IL_0670: ldc.i4 0x7e34f956 IL_0675: beq IL_139e IL_067a: br IL_2184 IL_067f: ldloc.0 IL_0680: ldc.i4 0x83ce448e IL_0685: bgt.un.s IL_06f3 IL_0687: ldloc.0 IL_0688: ldc.i4 0x803babfe IL_068d: bgt.un.s IL_06b5 IL_068f: ldloc.0 IL_0690: ldc.i4 0x7e62165c IL_0695: beq IL_1860 IL_069a: ldloc.0 IL_069b: ldc.i4 0x7e762f73 IL_06a0: beq IL_191d IL_06a5: ldloc.0 IL_06a6: ldc.i4 0x803babfe IL_06ab: beq IL_12b7 IL_06b0: br IL_2184 IL_06b5: ldloc.0 IL_06b6: ldc.i4 0x81dd4224 IL_06bb: bgt.un.s IL_06d8 IL_06bd: ldloc.0 IL_06be: ldc.i4 0x8091e1ba IL_06c3: beq IL_16a7 IL_06c8: ldloc.0 IL_06c9: ldc.i4 0x81dd4224 IL_06ce: beq IL_1e72 IL_06d3: br IL_2184 IL_06d8: ldloc.0 IL_06d9: ldc.i4 0x82982bae IL_06de: beq IL_1eb1 IL_06e3: ldloc.0 IL_06e4: ldc.i4 0x83ce448e IL_06e9: beq IL_1bbd IL_06ee: br IL_2184 IL_06f3: ldloc.0 IL_06f4: ldc.i4 0x895f16b3 IL_06f9: bgt.un.s IL_0739 IL_06fb: ldloc.0 IL_06fc: ldc.i4 0x86e56312 IL_0701: bgt.un.s IL_071e IL_0703: ldloc.0 IL_0704: ldc.i4 0x8495dbf6 IL_0709: beq IL_207f IL_070e: ldloc.0 IL_070f: ldc.i4 0x86e56312 IL_0714: beq IL_1c3b IL_0719: br IL_2184 IL_071e: ldloc.0 IL_071f: ldc.i4 0x886d57ef IL_0724: beq IL_1c26 IL_0729: ldloc.0 IL_072a: ldc.i4 0x895f16b3 IL_072f: beq IL_1056 IL_0734: br IL_2184 IL_0739: ldloc.0 IL_073a: ldc.i4 0x89867abb IL_073f: bgt.un.s IL_075c IL_0741: ldloc.0 IL_0742: ldc.i4 0x8965390c IL_0747: beq IL_1fec IL_074c: ldloc.0 IL_074d: ldc.i4 0x89867abb IL_0752: beq IL_210c IL_0757: br IL_2184 IL_075c: ldloc.0 IL_075d: ldc.i4 0x8a546774 IL_0762: beq IL_1c65 IL_0767: ldloc.0 IL_0768: ldc.i4 0x93254270 IL_076d: beq IL_1335 IL_0772: br IL_2184 IL_0777: ldloc.0 IL_0778: ldc.i4 0xc6816b27 IL_077d: bgt.un IL_0b3b IL_0782: ldloc.0 IL_0783: ldc.i4 0xabd163b5 IL_0788: bgt.un IL_0958 IL_078d: ldloc.0 IL_078e: ldc.i4 0xa19e0b35 IL_0793: bgt.un IL_0878 IL_0798: ldloc.0 IL_0799: ldc.i4 0x9b727df3 IL_079e: bgt.un.s IL_080c IL_07a0: ldloc.0 IL_07a1: ldc.i4 0x95604137 IL_07a6: bgt.un.s IL_07ce IL_07a8: ldloc.0 IL_07a9: ldc.i4 0x937219ca IL_07ae: beq IL_0ef1 IL_07b3: ldloc.0 IL_07b4: ldc.i4 0x9472756b IL_07b9: beq IL_1ec6 IL_07be: ldloc.0 IL_07bf: ldc.i4 0x95604137 IL_07c4: beq IL_0f45 IL_07c9: br IL_2184 IL_07ce: ldloc.0 IL_07cf: ldc.i4 0x9888188f IL_07d4: bgt.un.s IL_07f1 IL_07d6: ldloc.0 IL_07d7: ldc.i4 0x96939bc6 IL_07dc: beq IL_17b8 IL_07e1: ldloc.0 IL_07e2: ldc.i4 0x9888188f IL_07e7: beq IL_195c IL_07ec: br IL_2184 IL_07f1: ldloc.0 IL_07f2: ldc.i4 0x992dbe8d IL_07f7: beq IL_1a6d IL_07fc: ldloc.0 IL_07fd: ldc.i4 0x9b727df3 IL_0802: beq IL_1224 IL_0807: br IL_2184 IL_080c: ldloc.0 IL_080d: ldc.i4 0x9f1949ce IL_0812: bgt.un.s IL_083a IL_0814: ldloc.0 IL_0815: ldc.i4 0x9b8cfbe6 IL_081a: beq IL_163e IL_081f: ldloc.0 IL_0820: ldc.i4 0x9d09dd0e IL_0825: beq IL_0f1b IL_082a: ldloc.0 IL_082b: ldc.i4 0x9f1949ce IL_0830: beq IL_20a9 IL_0835: br IL_2184 IL_083a: ldloc.0 IL_083b: ldc.i4 0xa0ae197d IL_0840: bgt.un.s IL_085d IL_0842: ldloc.0 IL_0843: ldc.i4 0x9f8d2aad IL_0848: beq IL_1bfc IL_084d: ldloc.0 IL_084e: ldc.i4 0xa0ae197d IL_0853: beq IL_206a IL_0858: br IL_2184 IL_085d: ldloc.0 IL_085e: ldc.i4 0xa1369482 IL_0863: beq IL_1692 IL_0868: ldloc.0 IL_0869: ldc.i4 0xa19e0b35 IL_086e: beq IL_1113 IL_0873: br IL_2184 IL_0878: ldloc.0 IL_0879: ldc.i4 0xa72856a7 IL_087e: bgt.un.s IL_08ec IL_0880: ldloc.0 IL_0881: ldc.i4 0xa45b7edf IL_0886: bgt.un.s IL_08ae IL_0888: ldloc.0 IL_0889: ldc.i4 0xa26d6489 IL_088e: beq IL_149a IL_0893: ldloc.0 IL_0894: ldc.i4 0xa445e39b IL_0899: beq IL_1ca4 IL_089e: ldloc.0 IL_089f: ldc.i4 0xa45b7edf IL_08a4: beq IL_15c0 IL_08a9: br IL_2184 IL_08ae: ldloc.0 IL_08af: ldc.i4 0xa6428622 IL_08b4: bgt.un.s IL_08d1 IL_08b6: ldloc.0 IL_08b7: ldc.i4 0xa517cc3f IL_08bc: beq IL_113d IL_08c1: ldloc.0 IL_08c2: ldc.i4 0xa6428622 IL_08c7: beq IL_1b54 IL_08cc: br IL_2184 IL_08d1: ldloc.0 IL_08d2: ldc.i4 0xa6d43b30 IL_08d7: beq IL_1278 IL_08dc: ldloc.0 IL_08dd: ldc.i4 0xa72856a7 IL_08e2: beq IL_1095 IL_08e7: br IL_2184 IL_08ec: ldloc.0 IL_08ed: ldc.i4 0xaa88ad61 IL_08f2: bgt.un.s IL_091a IL_08f4: ldloc.0 IL_08f5: ldc.i4 0xa7855456 IL_08fa: beq IL_1668 IL_08ff: ldloc.0 IL_0900: ldc.i4 0xa974f9e2 IL_0905: beq IL_1320 IL_090a: ldloc.0 IL_090b: ldc.i4 0xaa88ad61 IL_0910: beq IL_174f IL_0915: br IL_2184 IL_091a: ldloc.0 IL_091b: ldc.i4 0xaac796e8 IL_0920: bgt.un.s IL_093d IL_0922: ldloc.0 IL_0923: ldc.i4 0xaa8947f7 IL_0928: beq IL_1a97 IL_092d: ldloc.0 IL_092e: ldc.i4 0xaac796e8 IL_0933: beq IL_1edb IL_0938: br IL_2184 IL_093d: ldloc.0 IL_093e: ldc.i4 0xaaf89cf7 IL_0943: beq IL_20e8 IL_0948: ldloc.0 IL_0949: ldc.i4 0xabd163b5 IL_094e: beq IL_10e9 IL_0953: br IL_2184 IL_0958: ldloc.0 IL_0959: ldc.i4 0xbaa50aa9 IL_095e: bgt.un IL_0a43 IL_0963: ldloc.0 IL_0964: ldc.i4 0xb372c522 IL_0969: bgt.un.s IL_09d7 IL_096b: ldloc.0 IL_096c: ldc.i4 0xafa908eb IL_0971: bgt.un.s IL_0999 IL_0973: ldloc.0 IL_0974: ldc.i4 0xabdd3b18 IL_0979: beq IL_1ef0 IL_097e: ldloc.0 IL_097f: ldc.i4 0xac1855c9 IL_0984: beq IL_14c4 IL_0989: ldloc.0 IL_098a: ldc.i4 0xafa908eb IL_098f: beq IL_1c8f IL_0994: br IL_2184 IL_0999: ldloc.0 IL_099a: ldc.i4 0xb0ced153 IL_099f: bgt.un.s IL_09bc IL_09a1: ldloc.0 IL_09a2: ldc.i4 0xb0068fc4 IL_09a7: beq IL_2001 IL_09ac: ldloc.0 IL_09ad: ldc.i4 0xb0ced153 IL_09b2: beq IL_12cc IL_09b7: br IL_2184 IL_09bc: ldloc.0 IL_09bd: ldc.i4 0xb1ed8222 IL_09c2: beq IL_1fad IL_09c7: ldloc.0 IL_09c8: ldc.i4 0xb372c522 IL_09cd: beq IL_1d0d IL_09d2: br IL_2184 IL_09d7: ldloc.0 IL_09d8: ldc.i4 0xb867b0a7 IL_09dd: bgt.un.s IL_0a05 IL_09df: ldloc.0 IL_09e0: ldc.i4 0xb7a04f18 IL_09e5: beq IL_128d IL_09ea: ldloc.0 IL_09eb: ldc.i4 0xb7c1d5fe IL_09f0: beq IL_1152 IL_09f5: ldloc.0 IL_09f6: ldc.i4 0xb867b0a7 IL_09fb: beq IL_1f2f IL_0a00: br IL_2184 IL_0a05: ldloc.0 IL_0a06: ldc.i4 0xb9ca4931 IL_0a0b: bgt.un.s IL_0a28 IL_0a0d: ldloc.0 IL_0a0e: ldc.i4 0xb8ddd025 IL_0a13: beq IL_199b IL_0a18: ldloc.0 IL_0a19: ldc.i4 0xb9ca4931 IL_0a1e: beq IL_1e9c IL_0a23: br IL_2184 IL_0a28: ldloc.0 IL_0a29: ldc.i4 0xb9cc5c0b IL_0a2e: beq IL_1ddf IL_0a33: ldloc.0 IL_0a34: ldc.i4 0xbaa50aa9 IL_0a39: beq IL_1a82 IL_0a3e: br IL_2184 IL_0a43: ldloc.0 IL_0a44: ldc.i4 0xbf024ba2 IL_0a49: bgt.un.s IL_0ab7 IL_0a4b: ldloc.0 IL_0a4c: ldc.i4 0xbd5a7ac0 IL_0a51: bgt.un.s IL_0a79 IL_0a53: ldloc.0 IL_0a54: ldc.i4 0xbae65831 IL_0a59: beq IL_1629 IL_0a5e: ldloc.0 IL_0a5f: ldc.i4 0xbaeb1d00 IL_0a64: beq IL_1d61 IL_0a69: ldloc.0 IL_0a6a: ldc.i4 0xbd5a7ac0 IL_0a6f: beq IL_1764 IL_0a74: br IL_2184 IL_0a79: ldloc.0 IL_0a7a: ldc.i4 0xbe9c6125 IL_0a7f: bgt.un.s IL_0a9c IL_0a81: ldloc.0 IL_0a82: ldc.i4 0xbdd584ee IL_0a87: beq IL_1d4c IL_0a8c: ldloc.0 IL_0a8d: ldc.i4 0xbe9c6125 IL_0a92: beq IL_1f59 IL_0a97: br IL_2184 IL_0a9c: ldloc.0 IL_0a9d: ldc.i4 0xbef81d14 IL_0aa2: beq IL_120f IL_0aa7: ldloc.0 IL_0aa8: ldc.i4 0xbf024ba2 IL_0aad: beq IL_1da0 IL_0ab2: br IL_2184 IL_0ab7: ldloc.0 IL_0ab8: ldc.i4 0xc158896f IL_0abd: bgt.un.s IL_0afd IL_0abf: ldloc.0 IL_0ac0: ldc.i4 0xbfcdf9de IL_0ac5: bgt.un.s IL_0ae2 IL_0ac7: ldloc.0 IL_0ac8: ldc.i4 0xbf7ad191 IL_0acd: beq IL_1779 IL_0ad2: ldloc.0 IL_0ad3: ldc.i4 0xbfcdf9de IL_0ad8: beq IL_2040 IL_0add: br IL_2184 IL_0ae2: ldloc.0 IL_0ae3: ldc.i4 0xc0d01d2f IL_0ae8: beq IL_2148 IL_0aed: ldloc.0 IL_0aee: ldc.i4 0xc158896f IL_0af3: beq IL_0f99 IL_0af8: br IL_2184 IL_0afd: ldloc.0 IL_0afe: ldc.i4 0xc3cf479f IL_0b03: bgt.un.s IL_0b20 IL_0b05: ldloc.0 IL_0b06: ldc.i4 0xc2d30dbd IL_0b0b: beq IL_1b15 IL_0b10: ldloc.0 IL_0b11: ldc.i4 0xc3cf479f IL_0b16: beq IL_1017 IL_0b1b: br IL_2184 IL_0b20: ldloc.0 IL_0b21: ldc.i4 0xc4135709 IL_0b26: beq IL_1db5 IL_0b2b: ldloc.0 IL_0b2c: ldc.i4 0xc6816b27 IL_0b31: beq IL_145b IL_0b36: br IL_2184 IL_0b3b: ldloc.0 IL_0b3c: ldc.i4 0xec3e2fe1 IL_0b41: bgt.un IL_0d11 IL_0b46: ldloc.0 IL_0b47: ldc.i4 0xd6b51455 IL_0b4c: bgt.un IL_0c31 IL_0b51: ldloc.0 IL_0b52: ldc.i4 0xcc9a2e03 IL_0b57: bgt.un.s IL_0bc5 IL_0b59: ldloc.0 IL_0b5a: ldc.i4 0xc9f4640b IL_0b5f: bgt.un.s IL_0b87 IL_0b61: ldloc.0 IL_0b62: ldc.i4 0xc6eb64f6 IL_0b67: beq IL_134a IL_0b6c: ldloc.0 IL_0b6d: ldc.i4 0xc736a907 IL_0b72: beq IL_1041 IL_0b77: ldloc.0 IL_0b78: ldc.i4 0xc9f4640b IL_0b7d: beq IL_12f6 IL_0b82: br IL_2184 IL_0b87: ldloc.0 IL_0b88: ldc.i4 0xcc0d0856 IL_0b8d: bgt.un.s IL_0baa IL_0b8f: ldloc.0 IL_0b90: ldc.i4 0xcb416d65 IL_0b95: beq IL_1d22 IL_0b9a: ldloc.0 IL_0b9b: ldc.i4 0xcc0d0856 IL_0ba0: beq IL_15ff IL_0ba5: br IL_2184 IL_0baa: ldloc.0 IL_0bab: ldc.i4 0xcc6f4fe0 IL_0bb0: beq IL_1932 IL_0bb5: ldloc.0 IL_0bb6: ldc.i4 0xcc9a2e03 IL_0bbb: beq IL_1c7a IL_0bc0: br IL_2184 IL_0bc5: ldloc.0 IL_0bc6: ldc.i4 0xd05f1663 IL_0bcb: bgt.un.s IL_0bf3 IL_0bcd: ldloc.0 IL_0bce: ldc.i4 0xcd190185 IL_0bd3: beq IL_1d8b IL_0bd8: ldloc.0 IL_0bd9: ldc.i4 0xce0d0b7c IL_0bde: beq IL_1614 IL_0be3: ldloc.0 IL_0be4: ldc.i4 0xd05f1663 IL_0be9: beq IL_16bc IL_0bee: br IL_2184 IL_0bf3: ldloc.0 IL_0bf4: ldc.i4 0xd642d1b2 IL_0bf9: bgt.un.s IL_0c16 IL_0bfb: ldloc.0 IL_0bfc: ldc.i4 0xd55997bc IL_0c01: beq IL_1df4 IL_0c06: ldloc.0 IL_0c07: ldc.i4 0xd642d1b2 IL_0c0c: beq IL_1b3f IL_0c11: br IL_2184 IL_0c16: ldloc.0 IL_0c17: ldc.i4 0xd67d0512 IL_0c1c: beq IL_1374 IL_0c21: ldloc.0 IL_0c22: ldc.i4 0xd6b51455 IL_0c27: beq IL_1836 IL_0c2c: br IL_2184 IL_0c31: ldloc.0 IL_0c32: ldc.i4 0xe7009fb7 IL_0c37: bgt.un.s IL_0ca5 IL_0c39: ldloc.0 IL_0c3a: ldc.i4 0xe06f4684 IL_0c3f: bgt.un.s IL_0c67 IL_0c41: ldloc.0 IL_0c42: ldc.i4 0xda6a3615 IL_0c47: beq IL_1ba8 IL_0c4c: ldloc.0 IL_0c4d: ldc.i4 0xde091dac IL_0c52: beq IL_1e48 IL_0c57: ldloc.0 IL_0c58: ldc.i4 0xe06f4684 IL_0c5d: beq IL_141c IL_0c62: br IL_2184 IL_0c67: ldloc.0 IL_0c68: ldc.i4 0xe4b51449 IL_0c6d: bgt.un.s IL_0c8a IL_0c6f: ldloc.0 IL_0c70: ldc.i4 0xe482e420 IL_0c75: beq IL_15ea IL_0c7a: ldloc.0 IL_0c7b: ldc.i4 0xe4b51449 IL_0c80: beq IL_16e6 IL_0c85: br IL_2184 IL_0c8a: ldloc.0 IL_0c8b: ldc.i4 0xe600b237 IL_0c90: beq IL_1b93 IL_0c95: ldloc.0 IL_0c96: ldc.i4 0xe7009fb7 IL_0c9b: beq IL_135f IL_0ca0: br IL_2184 IL_0ca5: ldloc.0 IL_0ca6: ldc.i4 0xea4b9afc IL_0cab: bgt.un.s IL_0cd3 IL_0cad: ldloc.0 IL_0cae: ldc.i4 0xe8a3d0e1 IL_0cb3: beq IL_1ad6 IL_0cb8: ldloc.0 IL_0cb9: ldc.i4 0xe8cf3efe IL_0cbe: beq IL_1d37 IL_0cc3: ldloc.0 IL_0cc4: ldc.i4 0xea4b9afc IL_0cc9: beq IL_2055 IL_0cce: br IL_2184 IL_0cd3: ldloc.0 IL_0cd4: ldc.i4 0xebdb35fa IL_0cd9: bgt.un.s IL_0cf6 IL_0cdb: ldloc.0 IL_0cdc: ldc.i4 0xeacd5737 IL_0ce1: beq IL_1f1a IL_0ce6: ldloc.0 IL_0ce7: ldc.i4 0xebdb35fa IL_0cec: beq IL_13c8 IL_0cf1: br IL_2184 IL_0cf6: ldloc.0 IL_0cf7: ldc.i4 0xec3aca8d IL_0cfc: beq IL_1be7 IL_0d01: ldloc.0 IL_0d02: ldc.i4 0xec3e2fe1 IL_0d07: beq IL_1fc2 IL_0d0c: br IL_2184 IL_0d11: ldloc.0 IL_0d12: ldc.i4 0xf5e05a6b IL_0d17: bgt.un IL_0dfc IL_0d1c: ldloc.0 IL_0d1d: ldc.i4 0xf1e6c9c8 IL_0d22: bgt.un.s IL_0d90 IL_0d24: ldloc.0 IL_0d25: ldc.i4 0xee3feea8 IL_0d2a: bgt.un.s IL_0d52 IL_0d2c: ldloc.0 IL_0d2d: ldc.i4 0xeccec0be IL_0d32: beq IL_16d1 IL_0d37: ldloc.0 IL_0d38: ldc.i4 0xedb243f0 IL_0d3d: beq IL_124e IL_0d42: ldloc.0 IL_0d43: ldc.i4 0xee3feea8 IL_0d48: beq IL_189f IL_0d4d: br IL_2184 IL_0d52: ldloc.0 IL_0d53: ldc.i4 0xef81b6ca IL_0d58: bgt.un.s IL_0d75 IL_0d5a: ldloc.0 IL_0d5b: ldc.i4 0xeed17667 IL_0d60: beq IL_1e09 IL_0d65: ldloc.0 IL_0d66: ldc.i4 0xef81b6ca IL_0d6b: beq IL_14ee IL_0d70: br IL_2184 IL_0d75: ldloc.0 IL_0d76: ldc.i4 0xf1a689a6 IL_0d7b: beq IL_1c11 IL_0d80: ldloc.0 IL_0d81: ldc.i4 0xf1e6c9c8 IL_0d86: beq IL_1fd7 IL_0d8b: br IL_2184 IL_0d90: ldloc.0 IL_0d91: ldc.i4 0xf2c43079 IL_0d96: bgt.un.s IL_0dbe IL_0d98: ldloc.0 IL_0d99: ldc.i4 0xf24af6dc IL_0d9e: beq IL_1cb9 IL_0da3: ldloc.0 IL_0da4: ldc.i4 0xf2963331 IL_0da9: beq IL_1ce3 IL_0dae: ldloc.0 IL_0daf: ldc.i4 0xf2c43079 IL_0db4: beq IL_10bf IL_0db9: br IL_2184 IL_0dbe: ldloc.0 IL_0dbf: ldc.i4 0xf53166a8 IL_0dc4: bgt.un.s IL_0de1 IL_0dc6: ldloc.0 IL_0dc7: ldc.i4 0xf43f03a6 IL_0dcc: beq IL_1a43 IL_0dd1: ldloc.0 IL_0dd2: ldc.i4 0xf53166a8 IL_0dd7: beq IL_18de IL_0ddc: br IL_2184 IL_0de1: ldloc.0 IL_0de2: ldc.i4 0xf565000a IL_0de7: beq IL_1725 IL_0dec: ldloc.0 IL_0ded: ldc.i4 0xf5e05a6b IL_0df2: beq IL_102c IL_0df7: br IL_2184 IL_0dfc: ldloc.0 IL_0dfd: ldc.i4 0xf89e7910 IL_0e02: bgt.un.s IL_0e70 IL_0e04: ldloc.0 IL_0e05: ldc.i4 0xf68ddabd IL_0e0a: bgt.un.s IL_0e32 IL_0e0c: ldloc.0 IL_0e0d: ldc.i4 0xf61ee173 IL_0e12: beq IL_1f6e IL_0e17: ldloc.0 IL_0e18: ldc.i4 0xf68c7b31 IL_0e1d: beq IL_211b IL_0e22: ldloc.0 IL_0e23: ldc.i4 0xf68ddabd IL_0e28: beq IL_10d4 IL_0e2d: br IL_2184 IL_0e32: ldloc.0 IL_0e33: ldc.i4 0xf718ff34 IL_0e38: bgt.un.s IL_0e55 IL_0e3a: ldloc.0 IL_0e3b: ldc.i4 0xf6aeaa6e IL_0e40: beq IL_1a19 IL_0e45: ldloc.0 IL_0e46: ldc.i4 0xf718ff34 IL_0e4b: beq IL_1f83 IL_0e50: br IL_2184 IL_0e55: ldloc.0 IL_0e56: ldc.i4 0xf722ab01 IL_0e5b: beq IL_1a2e IL_0e60: ldloc.0 IL_0e61: ldc.i4 0xf89e7910 IL_0e66: beq IL_19b0 IL_0e6b: br IL_2184 IL_0e70: ldloc.0 IL_0e71: ldc.i4 0xf9c905c2 IL_0e76: bgt.un.s IL_0eb6 IL_0e78: ldloc.0 IL_0e79: ldc.i4 0xf93dc85c IL_0e7e: bgt.un.s IL_0e9b IL_0e80: ldloc.0 IL_0e81: ldc.i4 0xf91ad389 IL_0e86: beq IL_17e2 IL_0e8b: ldloc.0 IL_0e8c: ldc.i4 0xf93dc85c IL_0e91: beq IL_1cf8 IL_0e96: br IL_2184 IL_0e9b: ldloc.0 IL_0e9c: ldc.i4 0xf93f63c6 IL_0ea1: beq IL_13dd IL_0ea6: ldloc.0 IL_0ea7: ldc.i4 0xf9c905c2 IL_0eac: beq IL_2139 IL_0eb1: br IL_2184 IL_0eb6: ldloc.0 IL_0eb7: ldc.i4 0xfafbe318 IL_0ebc: bgt.un.s IL_0ed9 IL_0ebe: ldloc.0 IL_0ebf: ldc.i4 0xfa57fe02 IL_0ec4: beq IL_1b7e IL_0ec9: ldloc.0 IL_0eca: ldc.i4 0xfafbe318 IL_0ecf: beq IL_14af IL_0ed4: br IL_2184 IL_0ed9: ldloc.0 IL_0eda: ldc.i4 0xfb42d85f IL_0edf: beq IL_1d76 IL_0ee4: ldloc.0 IL_0ee5: ldc.i4 0xff1d7ceb IL_0eea: beq.s IL_0f06 IL_0eec: br IL_2184 IL_0ef1: ldarg.0 IL_0ef2: ldstr "cddafs" IL_0ef7: call "bool string.op_Equality(string, string)" IL_0efc: brtrue IL_2166 IL_0f01: br IL_2184 IL_0f06: ldarg.0 IL_0f07: ldstr "cd9660" IL_0f0c: call "bool string.op_Equality(string, string)" IL_0f11: brtrue IL_2166 IL_0f16: br IL_2184 IL_0f1b: ldarg.0 IL_0f1c: ldstr "iso" IL_0f21: call "bool string.op_Equality(string, string)" IL_0f26: brtrue IL_2166 IL_0f2b: br IL_2184 IL_0f30: ldarg.0 IL_0f31: ldstr "isofs" IL_0f36: call "bool string.op_Equality(string, string)" IL_0f3b: brtrue IL_2166 IL_0f40: br IL_2184 IL_0f45: ldarg.0 IL_0f46: ldstr "iso9660" IL_0f4b: call "bool string.op_Equality(string, string)" IL_0f50: brtrue IL_2166 IL_0f55: br IL_2184 IL_0f5a: ldarg.0 IL_0f5b: ldstr "fuseiso" IL_0f60: call "bool string.op_Equality(string, string)" IL_0f65: brtrue IL_2166 IL_0f6a: br IL_2184 IL_0f6f: ldarg.0 IL_0f70: ldstr "fuseiso9660" IL_0f75: call "bool string.op_Equality(string, string)" IL_0f7a: brtrue IL_2166 IL_0f7f: br IL_2184 IL_0f84: ldarg.0 IL_0f85: ldstr "udf" IL_0f8a: call "bool string.op_Equality(string, string)" IL_0f8f: brtrue IL_2166 IL_0f94: br IL_2184 IL_0f99: ldarg.0 IL_0f9a: ldstr "umview-mod-umfuseiso9660" IL_0f9f: call "bool string.op_Equality(string, string)" IL_0fa4: brtrue IL_2166 IL_0fa9: br IL_2184 IL_0fae: ldarg.0 IL_0faf: ldstr "aafs" IL_0fb4: call "bool string.op_Equality(string, string)" IL_0fb9: brtrue IL_216c IL_0fbe: br IL_2184 IL_0fc3: ldarg.0 IL_0fc4: ldstr "adfs" IL_0fc9: call "bool string.op_Equality(string, string)" IL_0fce: brtrue IL_216c IL_0fd3: br IL_2184 IL_0fd8: ldarg.0 IL_0fd9: ldstr "affs" IL_0fde: call "bool string.op_Equality(string, string)" IL_0fe3: brtrue IL_216c IL_0fe8: br IL_2184 IL_0fed: ldarg.0 IL_0fee: ldstr "anoninode" IL_0ff3: call "bool string.op_Equality(string, string)" IL_0ff8: brtrue IL_216c IL_0ffd: br IL_2184 IL_1002: ldarg.0 IL_1003: ldstr "anon-inode FS" IL_1008: call "bool string.op_Equality(string, string)" IL_100d: brtrue IL_216c IL_1012: br IL_2184 IL_1017: ldarg.0 IL_1018: ldstr "apfs" IL_101d: call "bool string.op_Equality(string, string)" IL_1022: brtrue IL_216c IL_1027: br IL_2184 IL_102c: ldarg.0 IL_102d: ldstr "balloon-kvm-fs" IL_1032: call "bool string.op_Equality(string, string)" IL_1037: brtrue IL_216c IL_103c: br IL_2184 IL_1041: ldarg.0 IL_1042: ldstr "bdevfs" IL_1047: call "bool string.op_Equality(string, string)" IL_104c: brtrue IL_216c IL_1051: br IL_2184 IL_1056: ldarg.0 IL_1057: ldstr "befs" IL_105c: call "bool string.op_Equality(string, string)" IL_1061: brtrue IL_216c IL_1066: br IL_2184 IL_106b: ldarg.0 IL_106c: ldstr "bfs" IL_1071: call "bool string.op_Equality(string, string)" IL_1076: brtrue IL_216c IL_107b: br IL_2184 IL_1080: ldarg.0 IL_1081: ldstr "bootfs" IL_1086: call "bool string.op_Equality(string, string)" IL_108b: brtrue IL_216c IL_1090: br IL_2184 IL_1095: ldarg.0 IL_1096: ldstr "bpf_fs" IL_109b: call "bool string.op_Equality(string, string)" IL_10a0: brtrue IL_216c IL_10a5: br IL_2184 IL_10aa: ldarg.0 IL_10ab: ldstr "btrfs" IL_10b0: call "bool string.op_Equality(string, string)" IL_10b5: brtrue IL_216c IL_10ba: br IL_2184 IL_10bf: ldarg.0 IL_10c0: ldstr "btrfs_test" IL_10c5: call "bool string.op_Equality(string, string)" IL_10ca: brtrue IL_216c IL_10cf: br IL_2184 IL_10d4: ldarg.0 IL_10d5: ldstr "coh" IL_10da: call "bool string.op_Equality(string, string)" IL_10df: brtrue IL_216c IL_10e4: br IL_2184 IL_10e9: ldarg.0 IL_10ea: ldstr "daxfs" IL_10ef: call "bool string.op_Equality(string, string)" IL_10f4: brtrue IL_216c IL_10f9: br IL_2184 IL_10fe: ldarg.0 IL_10ff: ldstr "drvfs" IL_1104: call "bool string.op_Equality(string, string)" IL_1109: brtrue IL_216c IL_110e: br IL_2184 IL_1113: ldarg.0 IL_1114: ldstr "efivarfs" IL_1119: call "bool string.op_Equality(string, string)" IL_111e: brtrue IL_216c IL_1123: br IL_2184 IL_1128: ldarg.0 IL_1129: ldstr "efs" IL_112e: call "bool string.op_Equality(string, string)" IL_1133: brtrue IL_216c IL_1138: br IL_2184 IL_113d: ldarg.0 IL_113e: ldstr "exfat" IL_1143: call "bool string.op_Equality(string, string)" IL_1148: brtrue IL_216c IL_114d: br IL_2184 IL_1152: ldarg.0 IL_1153: ldstr "exofs" IL_1158: call "bool string.op_Equality(string, string)" IL_115d: brtrue IL_216c IL_1162: br IL_2184 IL_1167: ldarg.0 IL_1168: ldstr "ext" IL_116d: call "bool string.op_Equality(string, string)" IL_1172: brtrue IL_216c IL_1177: br IL_2184 IL_117c: ldarg.0 IL_117d: ldstr "ext2" IL_1182: call "bool string.op_Equality(string, string)" IL_1187: brtrue IL_216c IL_118c: br IL_2184 IL_1191: ldarg.0 IL_1192: ldstr "ext2_old" IL_1197: call "bool string.op_Equality(string, string)" IL_119c: brtrue IL_216c IL_11a1: br IL_2184 IL_11a6: ldarg.0 IL_11a7: ldstr "ext3" IL_11ac: call "bool string.op_Equality(string, string)" IL_11b1: brtrue IL_216c IL_11b6: br IL_2184 IL_11bb: ldarg.0 IL_11bc: ldstr "ext2/ext3" IL_11c1: call "bool string.op_Equality(string, string)" IL_11c6: brtrue IL_216c IL_11cb: br IL_2184 IL_11d0: ldarg.0 IL_11d1: ldstr "ext4" IL_11d6: call "bool string.op_Equality(string, string)" IL_11db: brtrue IL_216c IL_11e0: br IL_2184 IL_11e5: ldarg.0 IL_11e6: ldstr "ext4dev" IL_11eb: call "bool string.op_Equality(string, string)" IL_11f0: brtrue IL_216c IL_11f5: br IL_2184 IL_11fa: ldarg.0 IL_11fb: ldstr "f2fs" IL_1200: call "bool string.op_Equality(string, string)" IL_1205: brtrue IL_216c IL_120a: br IL_2184 IL_120f: ldarg.0 IL_1210: ldstr "fat" IL_1215: call "bool string.op_Equality(string, string)" IL_121a: brtrue IL_216c IL_121f: br IL_2184 IL_1224: ldarg.0 IL_1225: ldstr "fuseext2" IL_122a: call "bool string.op_Equality(string, string)" IL_122f: brtrue IL_216c IL_1234: br IL_2184 IL_1239: ldarg.0 IL_123a: ldstr "fusefat" IL_123f: call "bool string.op_Equality(string, string)" IL_1244: brtrue IL_216c IL_1249: br IL_2184 IL_124e: ldarg.0 IL_124f: ldstr "hfs" IL_1254: call "bool string.op_Equality(string, string)" IL_1259: brtrue IL_216c IL_125e: br IL_2184 IL_1263: ldarg.0 IL_1264: ldstr "hfs+" IL_1269: call "bool string.op_Equality(string, string)" IL_126e: brtrue IL_216c IL_1273: br IL_2184 IL_1278: ldarg.0 IL_1279: ldstr "hfsplus" IL_127e: call "bool string.op_Equality(string, string)" IL_1283: brtrue IL_216c IL_1288: br IL_2184 IL_128d: ldarg.0 IL_128e: ldstr "hfsx" IL_1293: call "bool string.op_Equality(string, string)" IL_1298: brtrue IL_216c IL_129d: br IL_2184 IL_12a2: ldarg.0 IL_12a3: ldstr "hostfs" IL_12a8: call "bool string.op_Equality(string, string)" IL_12ad: brtrue IL_216c IL_12b2: br IL_2184 IL_12b7: ldarg.0 IL_12b8: ldstr "hpfs" IL_12bd: call "bool string.op_Equality(string, string)" IL_12c2: brtrue IL_216c IL_12c7: br IL_2184 IL_12cc: ldarg.0 IL_12cd: ldstr "inodefs" IL_12d2: call "bool string.op_Equality(string, string)" IL_12d7: brtrue IL_216c IL_12dc: br IL_2184 IL_12e1: ldarg.0 IL_12e2: ldstr "inotifyfs" IL_12e7: call "bool string.op_Equality(string, string)" IL_12ec: brtrue IL_216c IL_12f1: br IL_2184 IL_12f6: ldarg.0 IL_12f7: ldstr "jbd" IL_12fc: call "bool string.op_Equality(string, string)" IL_1301: brtrue IL_216c IL_1306: br IL_2184 IL_130b: ldarg.0 IL_130c: ldstr "jbd2" IL_1311: call "bool string.op_Equality(string, string)" IL_1316: brtrue IL_216c IL_131b: br IL_2184 IL_1320: ldarg.0 IL_1321: ldstr "jffs" IL_1326: call "bool string.op_Equality(string, string)" IL_132b: brtrue IL_216c IL_1330: br IL_2184 IL_1335: ldarg.0 IL_1336: ldstr "jffs2" IL_133b: call "bool string.op_Equality(string, string)" IL_1340: brtrue IL_216c IL_1345: br IL_2184 IL_134a: ldarg.0 IL_134b: ldstr "jfs" IL_1350: call "bool string.op_Equality(string, string)" IL_1355: brtrue IL_216c IL_135a: br IL_2184 IL_135f: ldarg.0 IL_1360: ldstr "lofs" IL_1365: call "bool string.op_Equality(string, string)" IL_136a: brtrue IL_216c IL_136f: br IL_2184 IL_1374: ldarg.0 IL_1375: ldstr "logfs" IL_137a: call "bool string.op_Equality(string, string)" IL_137f: brtrue IL_216c IL_1384: br IL_2184 IL_1389: ldarg.0 IL_138a: ldstr "lxfs" IL_138f: call "bool string.op_Equality(string, string)" IL_1394: brtrue IL_216c IL_1399: br IL_2184 IL_139e: ldarg.0 IL_139f: ldstr "minix (30 char.)" IL_13a4: call "bool string.op_Equality(string, string)" IL_13a9: brtrue IL_216c IL_13ae: br IL_2184 IL_13b3: ldarg.0 IL_13b4: ldstr "minix v2 (30 char.)" IL_13b9: call "bool string.op_Equality(string, string)" IL_13be: brtrue IL_216c IL_13c3: br IL_2184 IL_13c8: ldarg.0 IL_13c9: ldstr "minix v2" IL_13ce: call "bool string.op_Equality(string, string)" IL_13d3: brtrue IL_216c IL_13d8: br IL_2184 IL_13dd: ldarg.0 IL_13de: ldstr "minix" IL_13e3: call "bool string.op_Equality(string, string)" IL_13e8: brtrue IL_216c IL_13ed: br IL_2184 IL_13f2: ldarg.0 IL_13f3: ldstr "minix_old" IL_13f8: call "bool string.op_Equality(string, string)" IL_13fd: brtrue IL_216c IL_1402: br IL_2184 IL_1407: ldarg.0 IL_1408: ldstr "minix2" IL_140d: call "bool string.op_Equality(string, string)" IL_1412: brtrue IL_216c IL_1417: br IL_2184 IL_141c: ldarg.0 IL_141d: ldstr "minix2v2" IL_1422: call "bool string.op_Equality(string, string)" IL_1427: brtrue IL_216c IL_142c: br IL_2184 IL_1431: ldarg.0 IL_1432: ldstr "minix2 v2" IL_1437: call "bool string.op_Equality(string, string)" IL_143c: brtrue IL_216c IL_1441: br IL_2184 IL_1446: ldarg.0 IL_1447: ldstr "minix3" IL_144c: call "bool string.op_Equality(string, string)" IL_1451: brtrue IL_216c IL_1456: br IL_2184 IL_145b: ldarg.0 IL_145c: ldstr "mlfs" IL_1461: call "bool string.op_Equality(string, string)" IL_1466: brtrue IL_216c IL_146b: br IL_2184 IL_1470: ldarg.0 IL_1471: ldstr "msdos" IL_1476: call "bool string.op_Equality(string, string)" IL_147b: brtrue IL_216c IL_1480: br IL_2184 IL_1485: ldarg.0 IL_1486: ldstr "nilfs" IL_148b: call "bool string.op_Equality(string, string)" IL_1490: brtrue IL_216c IL_1495: br IL_2184 IL_149a: ldarg.0 IL_149b: ldstr "nsfs" IL_14a0: call "bool string.op_Equality(string, string)" IL_14a5: brtrue IL_216c IL_14aa: br IL_2184 IL_14af: ldarg.0 IL_14b0: ldstr "ntfs" IL_14b5: call "bool string.op_Equality(string, string)" IL_14ba: brtrue IL_216c IL_14bf: br IL_2184 IL_14c4: ldarg.0 IL_14c5: ldstr "ntfs-3g" IL_14ca: call "bool string.op_Equality(string, string)" IL_14cf: brtrue IL_216c IL_14d4: br IL_2184 IL_14d9: ldarg.0 IL_14da: ldstr "ocfs2" IL_14df: call "bool string.op_Equality(string, string)" IL_14e4: brtrue IL_216c IL_14e9: br IL_2184 IL_14ee: ldarg.0 IL_14ef: ldstr "omfs" IL_14f4: call "bool string.op_Equality(string, string)" IL_14f9: brtrue IL_216c IL_14fe: br IL_2184 IL_1503: ldarg.0 IL_1504: ldstr "overlay" IL_1509: call "bool string.op_Equality(string, string)" IL_150e: brtrue IL_216c IL_1513: br IL_2184 IL_1518: ldarg.0 IL_1519: ldstr "overlayfs" IL_151e: call "bool string.op_Equality(string, string)" IL_1523: brtrue IL_216c IL_1528: br IL_2184 IL_152d: ldarg.0 IL_152e: ldstr "pstorefs" IL_1533: call "bool string.op_Equality(string, string)" IL_1538: brtrue IL_216c IL_153d: br IL_2184 IL_1542: ldarg.0 IL_1543: ldstr "qnx4" IL_1548: call "bool string.op_Equality(string, string)" IL_154d: brtrue IL_216c IL_1552: br IL_2184 IL_1557: ldarg.0 IL_1558: ldstr "qnx6" IL_155d: call "bool string.op_Equality(string, string)" IL_1562: brtrue IL_216c IL_1567: br IL_2184 IL_156c: ldarg.0 IL_156d: ldstr "reiserfs" IL_1572: call "bool string.op_Equality(string, string)" IL_1577: brtrue IL_216c IL_157c: br IL_2184 IL_1581: ldarg.0 IL_1582: ldstr "rpc_pipefs" IL_1587: call "bool string.op_Equality(string, string)" IL_158c: brtrue IL_216c IL_1591: br IL_2184 IL_1596: ldarg.0 IL_1597: ldstr "sffs" IL_159c: call "bool string.op_Equality(string, string)" IL_15a1: brtrue IL_216c IL_15a6: br IL_2184 IL_15ab: ldarg.0 IL_15ac: ldstr "smackfs" IL_15b1: call "bool string.op_Equality(string, string)" IL_15b6: brtrue IL_216c IL_15bb: br IL_2184 IL_15c0: ldarg.0 IL_15c1: ldstr "squashfs" IL_15c6: call "bool string.op_Equality(string, string)" IL_15cb: brtrue IL_216c IL_15d0: br IL_2184 IL_15d5: ldarg.0 IL_15d6: ldstr "swap" IL_15db: call "bool string.op_Equality(string, string)" IL_15e0: brtrue IL_216c IL_15e5: br IL_2184 IL_15ea: ldarg.0 IL_15eb: ldstr "sysv" IL_15f0: call "bool string.op_Equality(string, string)" IL_15f5: brtrue IL_216c IL_15fa: br IL_2184 IL_15ff: ldarg.0 IL_1600: ldstr "sysv2" IL_1605: call "bool string.op_Equality(string, string)" IL_160a: brtrue IL_216c IL_160f: br IL_2184 IL_1614: ldarg.0 IL_1615: ldstr "sysv4" IL_161a: call "bool string.op_Equality(string, string)" IL_161f: brtrue IL_216c IL_1624: br IL_2184 IL_1629: ldarg.0 IL_162a: ldstr "tracefs" IL_162f: call "bool string.op_Equality(string, string)" IL_1634: brtrue IL_216c IL_1639: br IL_2184 IL_163e: ldarg.0 IL_163f: ldstr "ubifs" IL_1644: call "bool string.op_Equality(string, string)" IL_1649: brtrue IL_216c IL_164e: br IL_2184 IL_1653: ldarg.0 IL_1654: ldstr "ufs" IL_1659: call "bool string.op_Equality(string, string)" IL_165e: brtrue IL_216c IL_1663: br IL_2184 IL_1668: ldarg.0 IL_1669: ldstr "ufscigam" IL_166e: call "bool string.op_Equality(string, string)" IL_1673: brtrue IL_216c IL_1678: br IL_2184 IL_167d: ldarg.0 IL_167e: ldstr "ufs2" IL_1683: call "bool string.op_Equality(string, string)" IL_1688: brtrue IL_216c IL_168d: br IL_2184 IL_1692: ldarg.0 IL_1693: ldstr "umsdos" IL_1698: call "bool string.op_Equality(string, string)" IL_169d: brtrue IL_216c IL_16a2: br IL_2184 IL_16a7: ldarg.0 IL_16a8: ldstr "umview-mod-umfuseext2" IL_16ad: call "bool string.op_Equality(string, string)" IL_16b2: brtrue IL_216c IL_16b7: br IL_2184 IL_16bc: ldarg.0 IL_16bd: ldstr "v9fs" IL_16c2: call "bool string.op_Equality(string, string)" IL_16c7: brtrue IL_216c IL_16cc: br IL_2184 IL_16d1: ldarg.0 IL_16d2: ldstr "vagrant" IL_16d7: call "bool string.op_Equality(string, string)" IL_16dc: brtrue IL_216c IL_16e1: br IL_2184 IL_16e6: ldarg.0 IL_16e7: ldstr "vboxfs" IL_16ec: call "bool string.op_Equality(string, string)" IL_16f1: brtrue IL_216c IL_16f6: br IL_2184 IL_16fb: ldarg.0 IL_16fc: ldstr "vxfs" IL_1701: call "bool string.op_Equality(string, string)" IL_1706: brtrue IL_216c IL_170b: br IL_2184 IL_1710: ldarg.0 IL_1711: ldstr "vxfs_olt" IL_1716: call "bool string.op_Equality(string, string)" IL_171b: brtrue IL_216c IL_1720: br IL_2184 IL_1725: ldarg.0 IL_1726: ldstr "vzfs" IL_172b: call "bool string.op_Equality(string, string)" IL_1730: brtrue IL_216c IL_1735: br IL_2184 IL_173a: ldarg.0 IL_173b: ldstr "wslfs" IL_1740: call "bool string.op_Equality(string, string)" IL_1745: brtrue IL_216c IL_174a: br IL_2184 IL_174f: ldarg.0 IL_1750: ldstr "xenix" IL_1755: call "bool string.op_Equality(string, string)" IL_175a: brtrue IL_216c IL_175f: br IL_2184 IL_1764: ldarg.0 IL_1765: ldstr "xfs" IL_176a: call "bool string.op_Equality(string, string)" IL_176f: brtrue IL_216c IL_1774: br IL_2184 IL_1779: ldarg.0 IL_177a: ldstr "xia" IL_177f: call "bool string.op_Equality(string, string)" IL_1784: brtrue IL_216c IL_1789: br IL_2184 IL_178e: ldarg.0 IL_178f: ldstr "xiafs" IL_1794: call "bool string.op_Equality(string, string)" IL_1799: brtrue IL_216c IL_179e: br IL_2184 IL_17a3: ldarg.0 IL_17a4: ldstr "xmount" IL_17a9: call "bool string.op_Equality(string, string)" IL_17ae: brtrue IL_216c IL_17b3: br IL_2184 IL_17b8: ldarg.0 IL_17b9: ldstr "zfs" IL_17be: call "bool string.op_Equality(string, string)" IL_17c3: brtrue IL_216c IL_17c8: br IL_2184 IL_17cd: ldarg.0 IL_17ce: ldstr "zfs-fuse" IL_17d3: call "bool string.op_Equality(string, string)" IL_17d8: brtrue IL_216c IL_17dd: br IL_2184 IL_17e2: ldarg.0 IL_17e3: ldstr "zsmallocfs" IL_17e8: call "bool string.op_Equality(string, string)" IL_17ed: brtrue IL_216c IL_17f2: br IL_2184 IL_17f7: ldarg.0 IL_17f8: ldstr "9p" IL_17fd: call "bool string.op_Equality(string, string)" IL_1802: brtrue IL_2172 IL_1807: br IL_2184 IL_180c: ldarg.0 IL_180d: ldstr "acfs" IL_1812: call "bool string.op_Equality(string, string)" IL_1817: brtrue IL_2172 IL_181c: br IL_2184 IL_1821: ldarg.0 IL_1822: ldstr "afp" IL_1827: call "bool string.op_Equality(string, string)" IL_182c: brtrue IL_2172 IL_1831: br IL_2184 IL_1836: ldarg.0 IL_1837: ldstr "afpfs" IL_183c: call "bool string.op_Equality(string, string)" IL_1841: brtrue IL_2172 IL_1846: br IL_2184 IL_184b: ldarg.0 IL_184c: ldstr "afs" IL_1851: call "bool string.op_Equality(string, string)" IL_1856: brtrue IL_2172 IL_185b: br IL_2184 IL_1860: ldarg.0 IL_1861: ldstr "aufs" IL_1866: call "bool string.op_Equality(string, string)" IL_186b: brtrue IL_2172 IL_1870: br IL_2184 IL_1875: ldarg.0 IL_1876: ldstr "autofs" IL_187b: call "bool string.op_Equality(string, string)" IL_1880: brtrue IL_2172 IL_1885: br IL_2184 IL_188a: ldarg.0 IL_188b: ldstr "autofs4" IL_1890: call "bool string.op_Equality(string, string)" IL_1895: brtrue IL_2172 IL_189a: br IL_2184 IL_189f: ldarg.0 IL_18a0: ldstr "beaglefs" IL_18a5: call "bool string.op_Equality(string, string)" IL_18aa: brtrue IL_2172 IL_18af: br IL_2184 IL_18b4: ldarg.0 IL_18b5: ldstr "ceph" IL_18ba: call "bool string.op_Equality(string, string)" IL_18bf: brtrue IL_2172 IL_18c4: br IL_2184 IL_18c9: ldarg.0 IL_18ca: ldstr "cifs" IL_18cf: call "bool string.op_Equality(string, string)" IL_18d4: brtrue IL_2172 IL_18d9: br IL_2184 IL_18de: ldarg.0 IL_18df: ldstr "coda" IL_18e4: call "bool string.op_Equality(string, string)" IL_18e9: brtrue IL_2172 IL_18ee: br IL_2184 IL_18f3: ldarg.0 IL_18f4: ldstr "coherent" IL_18f9: call "bool string.op_Equality(string, string)" IL_18fe: brtrue IL_2172 IL_1903: br IL_2184 IL_1908: ldarg.0 IL_1909: ldstr "curlftpfs" IL_190e: call "bool string.op_Equality(string, string)" IL_1913: brtrue IL_2172 IL_1918: br IL_2184 IL_191d: ldarg.0 IL_191e: ldstr "davfs2" IL_1923: call "bool string.op_Equality(string, string)" IL_1928: brtrue IL_2172 IL_192d: br IL_2184 IL_1932: ldarg.0 IL_1933: ldstr "dlm" IL_1938: call "bool string.op_Equality(string, string)" IL_193d: brtrue IL_2172 IL_1942: br IL_2184 IL_1947: ldarg.0 IL_1948: ldstr "ecryptfs" IL_194d: call "bool string.op_Equality(string, string)" IL_1952: brtrue IL_2172 IL_1957: br IL_2184 IL_195c: ldarg.0 IL_195d: ldstr "eCryptfs" IL_1962: call "bool string.op_Equality(string, string)" IL_1967: brtrue IL_2172 IL_196c: br IL_2184 IL_1971: ldarg.0 IL_1972: ldstr "fhgfs" IL_1977: call "bool string.op_Equality(string, string)" IL_197c: brtrue IL_2172 IL_1981: br IL_2184 IL_1986: ldarg.0 IL_1987: ldstr "flickrfs" IL_198c: call "bool string.op_Equality(string, string)" IL_1991: brtrue IL_2172 IL_1996: br IL_2184 IL_199b: ldarg.0 IL_199c: ldstr "ftp" IL_19a1: call "bool string.op_Equality(string, string)" IL_19a6: brtrue IL_2172 IL_19ab: br IL_2184 IL_19b0: ldarg.0 IL_19b1: ldstr "fuse" IL_19b6: call "bool string.op_Equality(string, string)" IL_19bb: brtrue IL_2172 IL_19c0: br IL_2184 IL_19c5: ldarg.0 IL_19c6: ldstr "fuseblk" IL_19cb: call "bool string.op_Equality(string, string)" IL_19d0: brtrue IL_2172 IL_19d5: br IL_2184 IL_19da: ldarg.0 IL_19db: ldstr "fusedav" IL_19e0: call "bool string.op_Equality(string, string)" IL_19e5: brtrue IL_2172 IL_19ea: br IL_2184 IL_19ef: ldarg.0 IL_19f0: ldstr "fusesmb" IL_19f5: call "bool string.op_Equality(string, string)" IL_19fa: brtrue IL_2172 IL_19ff: br IL_2184 IL_1a04: ldarg.0 IL_1a05: ldstr "gfsgfs2" IL_1a0a: call "bool string.op_Equality(string, string)" IL_1a0f: brtrue IL_2172 IL_1a14: br IL_2184 IL_1a19: ldarg.0 IL_1a1a: ldstr "gfs/gfs2" IL_1a1f: call "bool string.op_Equality(string, string)" IL_1a24: brtrue IL_2172 IL_1a29: br IL_2184 IL_1a2e: ldarg.0 IL_1a2f: ldstr "gfs2" IL_1a34: call "bool string.op_Equality(string, string)" IL_1a39: brtrue IL_2172 IL_1a3e: br IL_2184 IL_1a43: ldarg.0 IL_1a44: ldstr "glusterfs-client" IL_1a49: call "bool string.op_Equality(string, string)" IL_1a4e: brtrue IL_2172 IL_1a53: br IL_2184 IL_1a58: ldarg.0 IL_1a59: ldstr "gmailfs" IL_1a5e: call "bool string.op_Equality(string, string)" IL_1a63: brtrue IL_2172 IL_1a68: br IL_2184 IL_1a6d: ldarg.0 IL_1a6e: ldstr "gpfs" IL_1a73: call "bool string.op_Equality(string, string)" IL_1a78: brtrue IL_2172 IL_1a7d: br IL_2184 IL_1a82: ldarg.0 IL_1a83: ldstr "ibrix" IL_1a88: call "bool string.op_Equality(string, string)" IL_1a8d: brtrue IL_2172 IL_1a92: br IL_2184 IL_1a97: ldarg.0 IL_1a98: ldstr "k-afs" IL_1a9d: call "bool string.op_Equality(string, string)" IL_1aa2: brtrue IL_2172 IL_1aa7: br IL_2184 IL_1aac: ldarg.0 IL_1aad: ldstr "kafs" IL_1ab2: call "bool string.op_Equality(string, string)" IL_1ab7: brtrue IL_2172 IL_1abc: br IL_2184 IL_1ac1: ldarg.0 IL_1ac2: ldstr "kbfuse" IL_1ac7: call "bool string.op_Equality(string, string)" IL_1acc: brtrue IL_2172 IL_1ad1: br IL_2184 IL_1ad6: ldarg.0 IL_1ad7: ldstr "ltspfs" IL_1adc: call "bool string.op_Equality(string, string)" IL_1ae1: brtrue IL_2172 IL_1ae6: br IL_2184 IL_1aeb: ldarg.0 IL_1aec: ldstr "lustre" IL_1af1: call "bool string.op_Equality(string, string)" IL_1af6: brtrue IL_2172 IL_1afb: br IL_2184 IL_1b00: ldarg.0 IL_1b01: ldstr "ncp" IL_1b06: call "bool string.op_Equality(string, string)" IL_1b0b: brtrue IL_2172 IL_1b10: br IL_2184 IL_1b15: ldarg.0 IL_1b16: ldstr "ncpfs" IL_1b1b: call "bool string.op_Equality(string, string)" IL_1b20: brtrue IL_2172 IL_1b25: br IL_2184 IL_1b2a: ldarg.0 IL_1b2b: ldstr "nfs" IL_1b30: call "bool string.op_Equality(string, string)" IL_1b35: brtrue IL_2172 IL_1b3a: br IL_2184 IL_1b3f: ldarg.0 IL_1b40: ldstr "nfs4" IL_1b45: call "bool string.op_Equality(string, string)" IL_1b4a: brtrue IL_2172 IL_1b4f: br IL_2184 IL_1b54: ldarg.0 IL_1b55: ldstr "nfsd" IL_1b5a: call "bool string.op_Equality(string, string)" IL_1b5f: brtrue IL_2172 IL_1b64: br IL_2184 IL_1b69: ldarg.0 IL_1b6a: ldstr "novell" IL_1b6f: call "bool string.op_Equality(string, string)" IL_1b74: brtrue IL_2172 IL_1b79: br IL_2184 IL_1b7e: ldarg.0 IL_1b7f: ldstr "obexfs" IL_1b84: call "bool string.op_Equality(string, string)" IL_1b89: brtrue IL_2172 IL_1b8e: br IL_2184 IL_1b93: ldarg.0 IL_1b94: ldstr "panfs" IL_1b99: call "bool string.op_Equality(string, string)" IL_1b9e: brtrue IL_2172 IL_1ba3: br IL_2184 IL_1ba8: ldarg.0 IL_1ba9: ldstr "prl_fs" IL_1bae: call "bool string.op_Equality(string, string)" IL_1bb3: brtrue IL_2172 IL_1bb8: br IL_2184 IL_1bbd: ldarg.0 IL_1bbe: ldstr "s3ql" IL_1bc3: call "bool string.op_Equality(string, string)" IL_1bc8: brtrue IL_2172 IL_1bcd: br IL_2184 IL_1bd2: ldarg.0 IL_1bd3: ldstr "samba" IL_1bd8: call "bool string.op_Equality(string, string)" IL_1bdd: brtrue IL_2172 IL_1be2: br IL_2184 IL_1be7: ldarg.0 IL_1be8: ldstr "smb" IL_1bed: call "bool string.op_Equality(string, string)" IL_1bf2: brtrue IL_2172 IL_1bf7: br IL_2184 IL_1bfc: ldarg.0 IL_1bfd: ldstr "smb2" IL_1c02: call "bool string.op_Equality(string, string)" IL_1c07: brtrue IL_2172 IL_1c0c: br IL_2184 IL_1c11: ldarg.0 IL_1c12: ldstr "smbfs" IL_1c17: call "bool string.op_Equality(string, string)" IL_1c1c: brtrue IL_2172 IL_1c21: br IL_2184 IL_1c26: ldarg.0 IL_1c27: ldstr "snfs" IL_1c2c: call "bool string.op_Equality(string, string)" IL_1c31: brtrue IL_2172 IL_1c36: br IL_2184 IL_1c3b: ldarg.0 IL_1c3c: ldstr "sshfs" IL_1c41: call "bool string.op_Equality(string, string)" IL_1c46: brtrue IL_2172 IL_1c4b: br IL_2184 IL_1c50: ldarg.0 IL_1c51: ldstr "vmhgfs" IL_1c56: call "bool string.op_Equality(string, string)" IL_1c5b: brtrue IL_2172 IL_1c60: br IL_2184 IL_1c65: ldarg.0 IL_1c66: ldstr "webdav" IL_1c6b: call "bool string.op_Equality(string, string)" IL_1c70: brtrue IL_2172 IL_1c75: br IL_2184 IL_1c7a: ldarg.0 IL_1c7b: ldstr "wikipediafs" IL_1c80: call "bool string.op_Equality(string, string)" IL_1c85: brtrue IL_2172 IL_1c8a: br IL_2184 IL_1c8f: ldarg.0 IL_1c90: ldstr "xenfs" IL_1c95: call "bool string.op_Equality(string, string)" IL_1c9a: brtrue IL_2172 IL_1c9f: br IL_2184 IL_1ca4: ldarg.0 IL_1ca5: ldstr "anon_inode" IL_1caa: call "bool string.op_Equality(string, string)" IL_1caf: brtrue IL_2178 IL_1cb4: br IL_2184 IL_1cb9: ldarg.0 IL_1cba: ldstr "anon_inodefs" IL_1cbf: call "bool string.op_Equality(string, string)" IL_1cc4: brtrue IL_2178 IL_1cc9: br IL_2184 IL_1cce: ldarg.0 IL_1ccf: ldstr "aptfs" IL_1cd4: call "bool string.op_Equality(string, string)" IL_1cd9: brtrue IL_2178 IL_1cde: br IL_2184 IL_1ce3: ldarg.0 IL_1ce4: ldstr "avfs" IL_1ce9: call "bool string.op_Equality(string, string)" IL_1cee: brtrue IL_2178 IL_1cf3: br IL_2184 IL_1cf8: ldarg.0 IL_1cf9: ldstr "bdev" IL_1cfe: call "bool string.op_Equality(string, string)" IL_1d03: brtrue IL_2178 IL_1d08: br IL_2184 IL_1d0d: ldarg.0 IL_1d0e: ldstr "binfmt_misc" IL_1d13: call "bool string.op_Equality(string, string)" IL_1d18: brtrue IL_2178 IL_1d1d: br IL_2184 IL_1d22: ldarg.0 IL_1d23: ldstr "cgroup" IL_1d28: call "bool string.op_Equality(string, string)" IL_1d2d: brtrue IL_2178 IL_1d32: br IL_2184 IL_1d37: ldarg.0 IL_1d38: ldstr "cgroupfs" IL_1d3d: call "bool string.op_Equality(string, string)" IL_1d42: brtrue IL_2178 IL_1d47: br IL_2184 IL_1d4c: ldarg.0 IL_1d4d: ldstr "cgroup2fs" IL_1d52: call "bool string.op_Equality(string, string)" IL_1d57: brtrue IL_2178 IL_1d5c: br IL_2184 IL_1d61: ldarg.0 IL_1d62: ldstr "configfs" IL_1d67: call "bool string.op_Equality(string, string)" IL_1d6c: brtrue IL_2178 IL_1d71: br IL_2184 IL_1d76: ldarg.0 IL_1d77: ldstr "cpuset" IL_1d7c: call "bool string.op_Equality(string, string)" IL_1d81: brtrue IL_2178 IL_1d86: br IL_2184 IL_1d8b: ldarg.0 IL_1d8c: ldstr "cramfs" IL_1d91: call "bool string.op_Equality(string, string)" IL_1d96: brtrue IL_2178 IL_1d9b: br IL_2184 IL_1da0: ldarg.0 IL_1da1: ldstr "cramfs-wend" IL_1da6: call "bool string.op_Equality(string, string)" IL_1dab: brtrue IL_2178 IL_1db0: br IL_2184 IL_1db5: ldarg.0 IL_1db6: ldstr "cryptkeeper" IL_1dbb: call "bool string.op_Equality(string, string)" IL_1dc0: brtrue IL_2178 IL_1dc5: br IL_2184 IL_1dca: ldarg.0 IL_1dcb: ldstr "ctfs" IL_1dd0: call "bool string.op_Equality(string, string)" IL_1dd5: brtrue IL_2178 IL_1dda: br IL_2184 IL_1ddf: ldarg.0 IL_1de0: ldstr "debugfs" IL_1de5: call "bool string.op_Equality(string, string)" IL_1dea: brtrue IL_2178 IL_1def: br IL_2184 IL_1df4: ldarg.0 IL_1df5: ldstr "dev" IL_1dfa: call "bool string.op_Equality(string, string)" IL_1dff: brtrue IL_2178 IL_1e04: br IL_2184 IL_1e09: ldarg.0 IL_1e0a: ldstr "devfs" IL_1e0f: call "bool string.op_Equality(string, string)" IL_1e14: brtrue IL_2178 IL_1e19: br IL_2184 IL_1e1e: ldarg.0 IL_1e1f: ldstr "devpts" IL_1e24: call "bool string.op_Equality(string, string)" IL_1e29: brtrue IL_2178 IL_1e2e: br IL_2184 IL_1e33: ldarg.0 IL_1e34: ldstr "devtmpfs" IL_1e39: call "bool string.op_Equality(string, string)" IL_1e3e: brtrue IL_2178 IL_1e43: br IL_2184 IL_1e48: ldarg.0 IL_1e49: ldstr "encfs" IL_1e4e: call "bool string.op_Equality(string, string)" IL_1e53: brtrue IL_2178 IL_1e58: br IL_2184 IL_1e5d: ldarg.0 IL_1e5e: ldstr "fd" IL_1e63: call "bool string.op_Equality(string, string)" IL_1e68: brtrue IL_2178 IL_1e6d: br IL_2184 IL_1e72: ldarg.0 IL_1e73: ldstr "fdesc" IL_1e78: call "bool string.op_Equality(string, string)" IL_1e7d: brtrue IL_2178 IL_1e82: br IL_2184 IL_1e87: ldarg.0 IL_1e88: ldstr "fuse.gvfsd-fuse" IL_1e8d: call "bool string.op_Equality(string, string)" IL_1e92: brtrue IL_2178 IL_1e97: br IL_2184 IL_1e9c: ldarg.0 IL_1e9d: ldstr "fusectl" IL_1ea2: call "bool string.op_Equality(string, string)" IL_1ea7: brtrue IL_2178 IL_1eac: br IL_2184 IL_1eb1: ldarg.0 IL_1eb2: ldstr "futexfs" IL_1eb7: call "bool string.op_Equality(string, string)" IL_1ebc: brtrue IL_2178 IL_1ec1: br IL_2184 IL_1ec6: ldarg.0 IL_1ec7: ldstr "hugetlbfs" IL_1ecc: call "bool string.op_Equality(string, string)" IL_1ed1: brtrue IL_2178 IL_1ed6: br IL_2184 IL_1edb: ldarg.0 IL_1edc: ldstr "libpam-encfs" IL_1ee1: call "bool string.op_Equality(string, string)" IL_1ee6: brtrue IL_2178 IL_1eeb: br IL_2184 IL_1ef0: ldarg.0 IL_1ef1: ldstr "ibpam-mount" IL_1ef6: call "bool string.op_Equality(string, string)" IL_1efb: brtrue IL_2178 IL_1f00: br IL_2184 IL_1f05: ldarg.0 IL_1f06: ldstr "mntfs" IL_1f0b: call "bool string.op_Equality(string, string)" IL_1f10: brtrue IL_2178 IL_1f15: br IL_2184 IL_1f1a: ldarg.0 IL_1f1b: ldstr "mqueue" IL_1f20: call "bool string.op_Equality(string, string)" IL_1f25: brtrue IL_2178 IL_1f2a: br IL_2184 IL_1f2f: ldarg.0 IL_1f30: ldstr "mtpfs" IL_1f35: call "bool string.op_Equality(string, string)" IL_1f3a: brtrue IL_2178 IL_1f3f: br IL_2184 IL_1f44: ldarg.0 IL_1f45: ldstr "mythtvfs" IL_1f4a: call "bool string.op_Equality(string, string)" IL_1f4f: brtrue IL_2178 IL_1f54: br IL_2184 IL_1f59: ldarg.0 IL_1f5a: ldstr "objfs" IL_1f5f: call "bool string.op_Equality(string, string)" IL_1f64: brtrue IL_2178 IL_1f69: br IL_2184 IL_1f6e: ldarg.0 IL_1f6f: ldstr "openprom" IL_1f74: call "bool string.op_Equality(string, string)" IL_1f79: brtrue IL_2178 IL_1f7e: br IL_2184 IL_1f83: ldarg.0 IL_1f84: ldstr "openpromfs" IL_1f89: call "bool string.op_Equality(string, string)" IL_1f8e: brtrue IL_2178 IL_1f93: br IL_2184 IL_1f98: ldarg.0 IL_1f99: ldstr "pipefs" IL_1f9e: call "bool string.op_Equality(string, string)" IL_1fa3: brtrue IL_2178 IL_1fa8: br IL_2184 IL_1fad: ldarg.0 IL_1fae: ldstr "plptools" IL_1fb3: call "bool string.op_Equality(string, string)" IL_1fb8: brtrue IL_2178 IL_1fbd: br IL_2184 IL_1fc2: ldarg.0 IL_1fc3: ldstr "proc" IL_1fc8: call "bool string.op_Equality(string, string)" IL_1fcd: brtrue IL_2178 IL_1fd2: br IL_2184 IL_1fd7: ldarg.0 IL_1fd8: ldstr "pstore" IL_1fdd: call "bool string.op_Equality(string, string)" IL_1fe2: brtrue IL_2178 IL_1fe7: br IL_2184 IL_1fec: ldarg.0 IL_1fed: ldstr "pytagsfs" IL_1ff2: call "bool string.op_Equality(string, string)" IL_1ff7: brtrue IL_2178 IL_1ffc: br IL_2184 IL_2001: ldarg.0 IL_2002: ldstr "ramfs" IL_2007: call "bool string.op_Equality(string, string)" IL_200c: brtrue IL_2178 IL_2011: br IL_2184 IL_2016: ldarg.0 IL_2017: ldstr "rofs" IL_201c: call "bool string.op_Equality(string, string)" IL_2021: brtrue IL_2178 IL_2026: br IL_2184 IL_202b: ldarg.0 IL_202c: ldstr "romfs" IL_2031: call "bool string.op_Equality(string, string)" IL_2036: brtrue IL_2178 IL_203b: br IL_2184 IL_2040: ldarg.0 IL_2041: ldstr "rootfs" IL_2046: call "bool string.op_Equality(string, string)" IL_204b: brtrue IL_2178 IL_2050: br IL_2184 IL_2055: ldarg.0 IL_2056: ldstr "securityfs" IL_205b: call "bool string.op_Equality(string, string)" IL_2060: brtrue IL_2178 IL_2065: br IL_2184 IL_206a: ldarg.0 IL_206b: ldstr "selinux" IL_2070: call "bool string.op_Equality(string, string)" IL_2075: brtrue IL_2178 IL_207a: br IL_2184 IL_207f: ldarg.0 IL_2080: ldstr "selinuxfs" IL_2085: call "bool string.op_Equality(string, string)" IL_208a: brtrue IL_2178 IL_208f: br IL_2184 IL_2094: ldarg.0 IL_2095: ldstr "sharefs" IL_209a: call "bool string.op_Equality(string, string)" IL_209f: brtrue IL_2178 IL_20a4: br IL_2184 IL_20a9: ldarg.0 IL_20aa: ldstr "sockfs" IL_20af: call "bool string.op_Equality(string, string)" IL_20b4: brtrue IL_2178 IL_20b9: br IL_2184 IL_20be: ldarg.0 IL_20bf: ldstr "sysfs" IL_20c4: call "bool string.op_Equality(string, string)" IL_20c9: brtrue IL_2178 IL_20ce: br IL_2184 IL_20d3: ldarg.0 IL_20d4: ldstr "tmpfs" IL_20d9: call "bool string.op_Equality(string, string)" IL_20de: brtrue IL_2178 IL_20e3: br IL_2184 IL_20e8: ldarg.0 IL_20e9: ldstr "udev" IL_20ee: call "bool string.op_Equality(string, string)" IL_20f3: brtrue IL_2178 IL_20f8: br IL_2184 IL_20fd: ldarg.0 IL_20fe: ldstr "usbdev" IL_2103: call "bool string.op_Equality(string, string)" IL_2108: brtrue.s IL_2178 IL_210a: br.s IL_2184 IL_210c: ldarg.0 IL_210d: ldstr "usbdevfs" IL_2112: call "bool string.op_Equality(string, string)" IL_2117: brtrue.s IL_2178 IL_2119: br.s IL_2184 IL_211b: ldarg.0 IL_211c: ldstr "gphotofs" IL_2121: call "bool string.op_Equality(string, string)" IL_2126: brtrue.s IL_217e IL_2128: br.s IL_2184 IL_212a: ldarg.0 IL_212b: ldstr "sdcardfs" IL_2130: call "bool string.op_Equality(string, string)" IL_2135: brtrue.s IL_217e IL_2137: br.s IL_2184 IL_2139: ldarg.0 IL_213a: ldstr "usbfs" IL_213f: call "bool string.op_Equality(string, string)" IL_2144: brtrue.s IL_217e IL_2146: br.s IL_2184 IL_2148: ldarg.0 IL_2149: ldstr "usbdevice" IL_214e: call "bool string.op_Equality(string, string)" IL_2153: brtrue.s IL_217e IL_2155: br.s IL_2184 IL_2157: ldarg.0 IL_2158: ldstr "vfat" IL_215d: call "bool string.op_Equality(string, string)" IL_2162: brtrue.s IL_217e IL_2164: br.s IL_2184 IL_2166: ldstr "cddafs" IL_216b: ret IL_216c: ldstr "aafs" IL_2171: ret IL_2172: ldstr "9p" IL_2177: ret IL_2178: ldstr "anon_inode" IL_217d: ret IL_217e: ldstr "gphotofs" IL_2183: ret IL_2184: ldstr "default" IL_2189: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void GetContents() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Formats.Asn1/src/System/Formats/Asn1/WellKnownOids.cs#L317-L419 // Buckets: 5, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 1, 1, 3, 2, 2, 1, 3, 3, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 var source = """ assert("1.2.840.113549.1.5.13"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "1.2.840.10040.4.1" => "1.2.840.10040.4.1", "1.2.840.10040.4.3" => "1.2.840.10040.4.3", "1.2.840.10045.2.1" => "1.2.840.10045.2.1", "1.2.840.10045.1.1" => "1.2.840.10045.1.1", "1.2.840.10045.1.2" => "1.2.840.10045.1.2", "1.2.840.10045.3.1.7" => "1.2.840.10045.3.1.7", "1.2.840.10045.4.1" => "1.2.840.10045.4.1", "1.2.840.10045.4.3.2" => "1.2.840.10045.4.3.2", "1.2.840.10045.4.3.3" => "1.2.840.10045.4.3.3", "1.2.840.10045.4.3.4" => "1.2.840.10045.4.3.4", "1.2.840.113549.1.1.1" => "1.2.840.113549.1.1.1", "1.2.840.113549.1.1.5" => "1.2.840.113549.1.1.5", "1.2.840.113549.1.1.7" => "1.2.840.113549.1.1.7", "1.2.840.113549.1.1.8" => "1.2.840.113549.1.1.8", "1.2.840.113549.1.1.9" => "1.2.840.113549.1.1.9", "1.2.840.113549.1.1.10" => "1.2.840.113549.1.1.10", "1.2.840.113549.1.1.11" => "1.2.840.113549.1.1.11", "1.2.840.113549.1.1.12" => "1.2.840.113549.1.1.12", "1.2.840.113549.1.1.13" => "1.2.840.113549.1.1.13", "1.2.840.113549.1.5.3" => "1.2.840.113549.1.5.3", "1.2.840.113549.1.5.10" => "1.2.840.113549.1.5.10", "1.2.840.113549.1.5.11" => "1.2.840.113549.1.5.11", "1.2.840.113549.1.5.12" => "1.2.840.113549.1.5.12", "1.2.840.113549.1.5.13" => "1.2.840.113549.1.5.13", "1.2.840.113549.1.7.1" => "1.2.840.113549.1.7.1", "1.2.840.113549.1.7.2" => "1.2.840.113549.1.7.2", "1.2.840.113549.1.7.3" => "1.2.840.113549.1.7.3", "1.2.840.113549.1.7.6" => "1.2.840.113549.1.7.6", "1.2.840.113549.1.9.1" => "1.2.840.113549.1.9.1", "1.2.840.113549.1.9.3" => "1.2.840.113549.1.9.3", "1.2.840.113549.1.9.4" => "1.2.840.113549.1.9.4", "1.2.840.113549.1.9.5" => "1.2.840.113549.1.9.5", "1.2.840.113549.1.9.6" => "1.2.840.113549.1.9.6", "1.2.840.113549.1.9.7" => "1.2.840.113549.1.9.7", "1.2.840.113549.1.9.14" => "1.2.840.113549.1.9.14", "1.2.840.113549.1.9.15" => "1.2.840.113549.1.9.15", "1.2.840.113549.1.9.16.1.4" => "1.2.840.113549.1.9.16.1.4", "1.2.840.113549.1.9.16.2.12" => "1.2.840.113549.1.9.16.2.12", "1.2.840.113549.1.9.16.2.14" => "1.2.840.113549.1.9.16.2.14", "1.2.840.113549.1.9.16.2.47" => "1.2.840.113549.1.9.16.2.47", "1.2.840.113549.1.9.20" => "1.2.840.113549.1.9.20", "1.2.840.113549.1.9.21" => "1.2.840.113549.1.9.21", "1.2.840.113549.1.9.22.1" => "1.2.840.113549.1.9.22.1", "1.2.840.113549.1.12.1.3" => "1.2.840.113549.1.12.1.3", "1.2.840.113549.1.12.1.5" => "1.2.840.113549.1.12.1.5", "1.2.840.113549.1.12.1.6" => "1.2.840.113549.1.12.1.6", "1.2.840.113549.1.12.10.1.1" => "1.2.840.113549.1.12.10.1.1", "1.2.840.113549.1.12.10.1.2" => "1.2.840.113549.1.12.10.1.2", "1.2.840.113549.1.12.10.1.3" => "1.2.840.113549.1.12.10.1.3", "1.2.840.113549.1.12.10.1.5" => "1.2.840.113549.1.12.10.1.5", "1.2.840.113549.1.12.10.1.6" => "1.2.840.113549.1.12.10.1.6", "1.2.840.113549.2.5" => "1.2.840.113549.2.5", "1.2.840.113549.2.7" => "1.2.840.113549.2.7", "1.2.840.113549.2.9" => "1.2.840.113549.2.9", "1.2.840.113549.2.10" => "1.2.840.113549.2.10", "1.2.840.113549.2.11" => "1.2.840.113549.2.11", "1.2.840.113549.3.2" => "1.2.840.113549.3.2", "1.2.840.113549.3.7" => "1.2.840.113549.3.7", "1.3.6.1.4.1.311.17.1" => "1.3.6.1.4.1.311.17.1", "1.3.6.1.4.1.311.17.3.20" => "1.3.6.1.4.1.311.17.3.20", "1.3.6.1.4.1.311.20.2.3" => "1.3.6.1.4.1.311.20.2.3", "1.3.6.1.4.1.311.88.2.1" => "1.3.6.1.4.1.311.88.2.1", "1.3.6.1.4.1.311.88.2.2" => "1.3.6.1.4.1.311.88.2.2", "1.3.6.1.5.5.7.3.1" => "1.3.6.1.5.5.7.3.1", "1.3.6.1.5.5.7.3.2" => "1.3.6.1.5.5.7.3.2", "1.3.6.1.5.5.7.3.3" => "1.3.6.1.5.5.7.3.3", "1.3.6.1.5.5.7.3.4" => "1.3.6.1.5.5.7.3.4", "1.3.6.1.5.5.7.3.8" => "1.3.6.1.5.5.7.3.8", "1.3.6.1.5.5.7.3.9" => "1.3.6.1.5.5.7.3.9", "1.3.6.1.5.5.7.6.2" => "1.3.6.1.5.5.7.6.2", "1.3.6.1.5.5.7.48.1" => "1.3.6.1.5.5.7.48.1", "1.3.6.1.5.5.7.48.1.2" => "1.3.6.1.5.5.7.48.1.2", "1.3.6.1.5.5.7.48.2" => "1.3.6.1.5.5.7.48.2", "1.3.14.3.2.26" => "1.3.14.3.2.26", "1.3.14.3.2.7" => "1.3.14.3.2.7", "1.3.132.0.34" => "1.3.132.0.34", "1.3.132.0.35" => "1.3.132.0.35", "2.5.4.3" => "2.5.4.3", "2.5.4.5" => "2.5.4.5", "2.5.4.6" => "2.5.4.6", "2.5.4.7" => "2.5.4.7", "2.5.4.8" => "2.5.4.8", "2.5.4.10" => "2.5.4.10", "2.5.4.11" => "2.5.4.11", "2.5.4.97" => "2.5.4.97", "2.5.29.14" => "2.5.29.14", "2.5.29.15" => "2.5.29.15", "2.5.29.17" => "2.5.29.17", "2.5.29.19" => "2.5.29.19", "2.5.29.20" => "2.5.29.20", "2.5.29.35" => "2.5.29.35", "2.16.840.1.101.3.4.1.2" => "2.16.840.1.101.3.4.1.2", "2.16.840.1.101.3.4.1.22" => "2.16.840.1.101.3.4.1.22", "2.16.840.1.101.3.4.1.42" => "2.16.840.1.101.3.4.1.42", "2.16.840.1.101.3.4.2.1" => "2.16.840.1.101.3.4.2.1", "2.16.840.1.101.3.4.2.2" => "2.16.840.1.101.3.4.2.2", "2.16.840.1.101.3.4.2.3" => "2.16.840.1.101.3.4.2.3", "2.23.140.1.2.1" => "2.23.140.1.2.1", "2.23.140.1.2.2" => "2.23.140.1.2.2", _ => "default", }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 3704 (0xe78) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_0e70 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.7 IL_000f: sub IL_0010: switch ( IL_0234, IL_0262, IL_0287, IL_0e70, IL_0e70, IL_020d, IL_08c0, IL_02bd, IL_0e70, IL_0e70, IL_006a, IL_01ac, IL_00a5, IL_00dc, IL_0117, IL_01e7, IL_0179, IL_0e70, IL_0672, IL_0146) IL_0065: br IL_0e70 IL_006a: ldarg.0 IL_006b: ldc.i4.s 16 IL_006d: call "char string.this[int].get" IL_0072: stloc.2 IL_0073: ldloc.2 IL_0074: ldc.i4.s 49 IL_0076: sub IL_0077: switch ( IL_02db, IL_0355, IL_0330, IL_038a, IL_0e70, IL_0e70, IL_0e70, IL_039f, IL_03b4) IL_00a0: br IL_0e70 IL_00a5: ldarg.0 IL_00a6: ldc.i4.s 18 IL_00a8: call "char string.this[int].get" IL_00ad: stloc.2 IL_00ae: ldloc.2 IL_00af: ldc.i4.s 48 IL_00b1: sub IL_00b2: switch ( IL_041d, IL_0432, IL_03de, IL_03f3, IL_0408, IL_0e70, IL_0e70, IL_03c9) IL_00d7: br IL_0e70 IL_00dc: ldarg.0 IL_00dd: ldc.i4.s 19 IL_00df: call "char string.this[int].get" IL_00e4: stloc.2 IL_00e5: ldloc.2 IL_00e6: ldc.i4.s 49 IL_00e8: sub IL_00e9: switch ( IL_0447, IL_0535, IL_0500, IL_057f, IL_048c, IL_055a, IL_04b1, IL_04d6, IL_04eb) IL_0112: br IL_0e70 IL_0117: ldarg.0 IL_0118: ldc.i4.s 20 IL_011a: call "char string.this[int].get" IL_011f: stloc.2 IL_0120: ldloc.2 IL_0121: ldc.i4.s 48 IL_0123: sub IL_0124: switch ( IL_0594, IL_05c9, IL_05fe, IL_0623, IL_0648, IL_065d) IL_0141: br IL_0e70 IL_0146: ldarg.0 IL_0147: ldc.i4.s 25 IL_0149: call "char string.this[int].get" IL_014e: stloc.2 IL_014f: ldloc.2 IL_0150: ldc.i4.s 49 IL_0152: sub IL_0153: switch ( IL_06d6, IL_0687, IL_06eb, IL_06ac, IL_0700, IL_0715, IL_06c1) IL_0174: br IL_0e70 IL_0179: ldarg.0 IL_017a: ldc.i4.s 22 IL_017c: call "char string.this[int].get" IL_0181: stloc.2 IL_0182: ldloc.2 IL_0183: ldc.i4.s 48 IL_0185: sub IL_0186: switch ( IL_077e, IL_072a, IL_0793, IL_073f, IL_0e70, IL_0754, IL_0769) IL_01a7: br IL_0e70 IL_01ac: ldarg.0 IL_01ad: ldc.i4.s 17 IL_01af: call "char string.this[int].get" IL_01b4: stloc.2 IL_01b5: ldloc.2 IL_01b6: ldc.i4.s 49 IL_01b8: sub IL_01b9: switch ( IL_082c, IL_0807, IL_0e70, IL_0e70, IL_07b8, IL_0e70, IL_07cd, IL_0e70, IL_07f2) IL_01e2: br IL_0e70 IL_01e7: ldarg.0 IL_01e8: ldc.i4.s 16 IL_01ea: call "char string.this[int].get" IL_01ef: stloc.2 IL_01f0: ldloc.2 IL_01f1: ldc.i4.s 46 IL_01f3: beq IL_087b IL_01f8: ldloc.2 IL_01f9: ldc.i4.s 50 IL_01fb: beq IL_0841 IL_0200: ldloc.2 IL_0201: ldc.i4.s 56 IL_0203: beq IL_0856 IL_0208: br IL_0e70 IL_020d: ldarg.0 IL_020e: ldc.i4.s 11 IL_0210: call "char string.this[int].get" IL_0215: stloc.2 IL_0216: ldloc.2 IL_0217: ldc.i4.s 52 IL_0219: sub IL_021a: switch ( IL_08ea, IL_08ff, IL_0e70, IL_08d5) IL_022f: br IL_0e70 IL_0234: ldarg.0 IL_0235: ldc.i4.6 IL_0236: call "char string.this[int].get" IL_023b: stloc.2 IL_023c: ldloc.2 IL_023d: ldc.i4.s 51 IL_023f: sub IL_0240: switch ( IL_0914, IL_0e70, IL_0929, IL_093e, IL_0953, IL_0968) IL_025d: br IL_0e70 IL_0262: ldarg.0 IL_0263: ldc.i4.7 IL_0264: call "char string.this[int].get" IL_0269: stloc.2 IL_026a: ldloc.2 IL_026b: ldc.i4.s 48 IL_026d: beq IL_097d IL_0272: ldloc.2 IL_0273: ldc.i4.s 49 IL_0275: beq IL_0992 IL_027a: ldloc.2 IL_027b: ldc.i4.s 55 IL_027d: beq IL_09a7 IL_0282: br IL_0e70 IL_0287: ldarg.0 IL_0288: ldc.i4.8 IL_0289: call "char string.this[int].get" IL_028e: stloc.2 IL_028f: ldloc.2 IL_0290: ldc.i4.s 48 IL_0292: beq IL_0a20 IL_0297: ldloc.2 IL_0298: ldc.i4.s 52 IL_029a: sub IL_029b: switch ( IL_09bc, IL_09d1, IL_0e70, IL_09f6, IL_0e70, IL_0a0b) IL_02b8: br IL_0e70 IL_02bd: ldarg.0 IL_02be: ldc.i4.s 13 IL_02c0: call "char string.this[int].get" IL_02c5: stloc.2 IL_02c6: ldloc.2 IL_02c7: ldc.i4.s 49 IL_02c9: beq IL_0a35 IL_02ce: ldloc.2 IL_02cf: ldc.i4.s 50 IL_02d1: beq IL_0a4a IL_02d6: br IL_0e70 IL_02db: ldarg.0 IL_02dc: ldstr "1.2.840.10040.4.1" IL_02e1: call "bool string.op_Equality(string, string)" IL_02e6: brtrue IL_0a5f IL_02eb: ldarg.0 IL_02ec: ldstr "1.2.840.10045.2.1" IL_02f1: call "bool string.op_Equality(string, string)" IL_02f6: brtrue IL_0a75 IL_02fb: ldarg.0 IL_02fc: ldstr "1.2.840.10045.1.1" IL_0301: call "bool string.op_Equality(string, string)" IL_0306: brtrue IL_0a80 IL_030b: ldarg.0 IL_030c: ldstr "1.2.840.10045.4.1" IL_0311: call "bool string.op_Equality(string, string)" IL_0316: brtrue IL_0aa1 IL_031b: ldarg.0 IL_031c: ldstr "1.3.6.1.5.5.7.3.1" IL_0321: call "bool string.op_Equality(string, string)" IL_0326: brtrue IL_0d14 IL_032b: br IL_0e70 IL_0330: ldarg.0 IL_0331: ldstr "1.2.840.10040.4.3" IL_0336: call "bool string.op_Equality(string, string)" IL_033b: brtrue IL_0a6a IL_0340: ldarg.0 IL_0341: ldstr "1.3.6.1.5.5.7.3.3" IL_0346: call "bool string.op_Equality(string, string)" IL_034b: brtrue IL_0d2a IL_0350: br IL_0e70 IL_0355: ldarg.0 IL_0356: ldstr "1.2.840.10045.1.2" IL_035b: call "bool string.op_Equality(string, string)" IL_0360: brtrue IL_0a8b IL_0365: ldarg.0 IL_0366: ldstr "1.3.6.1.5.5.7.3.2" IL_036b: call "bool string.op_Equality(string, string)" IL_0370: brtrue IL_0d1f IL_0375: ldarg.0 IL_0376: ldstr "1.3.6.1.5.5.7.6.2" IL_037b: call "bool string.op_Equality(string, string)" IL_0380: brtrue IL_0d56 IL_0385: br IL_0e70 IL_038a: ldarg.0 IL_038b: ldstr "1.3.6.1.5.5.7.3.4" IL_0390: call "bool string.op_Equality(string, string)" IL_0395: brtrue IL_0d35 IL_039a: br IL_0e70 IL_039f: ldarg.0 IL_03a0: ldstr "1.3.6.1.5.5.7.3.8" IL_03a5: call "bool string.op_Equality(string, string)" IL_03aa: brtrue IL_0d40 IL_03af: br IL_0e70 IL_03b4: ldarg.0 IL_03b5: ldstr "1.3.6.1.5.5.7.3.9" IL_03ba: call "bool string.op_Equality(string, string)" IL_03bf: brtrue IL_0d4b IL_03c4: br IL_0e70 IL_03c9: ldarg.0 IL_03ca: ldstr "1.2.840.10045.3.1.7" IL_03cf: call "bool string.op_Equality(string, string)" IL_03d4: brtrue IL_0a96 IL_03d9: br IL_0e70 IL_03de: ldarg.0 IL_03df: ldstr "1.2.840.10045.4.3.2" IL_03e4: call "bool string.op_Equality(string, string)" IL_03e9: brtrue IL_0aac IL_03ee: br IL_0e70 IL_03f3: ldarg.0 IL_03f4: ldstr "1.2.840.10045.4.3.3" IL_03f9: call "bool string.op_Equality(string, string)" IL_03fe: brtrue IL_0ab7 IL_0403: br IL_0e70 IL_0408: ldarg.0 IL_0409: ldstr "1.2.840.10045.4.3.4" IL_040e: call "bool string.op_Equality(string, string)" IL_0413: brtrue IL_0ac2 IL_0418: br IL_0e70 IL_041d: ldarg.0 IL_041e: ldstr "1.2.840.113549.2.10" IL_0423: call "bool string.op_Equality(string, string)" IL_0428: brtrue IL_0cb1 IL_042d: br IL_0e70 IL_0432: ldarg.0 IL_0433: ldstr "1.2.840.113549.2.11" IL_0438: call "bool string.op_Equality(string, string)" IL_043d: brtrue IL_0cbc IL_0442: br IL_0e70 IL_0447: ldarg.0 IL_0448: ldstr "1.2.840.113549.1.1.1" IL_044d: call "bool string.op_Equality(string, string)" IL_0452: brtrue IL_0acd IL_0457: ldarg.0 IL_0458: ldstr "1.2.840.113549.1.7.1" IL_045d: call "bool string.op_Equality(string, string)" IL_0462: brtrue IL_0b67 IL_0467: ldarg.0 IL_0468: ldstr "1.2.840.113549.1.9.1" IL_046d: call "bool string.op_Equality(string, string)" IL_0472: brtrue IL_0b93 IL_0477: ldarg.0 IL_0478: ldstr "1.3.6.1.4.1.311.17.1" IL_047d: call "bool string.op_Equality(string, string)" IL_0482: brtrue IL_0cdd IL_0487: br IL_0e70 IL_048c: ldarg.0 IL_048d: ldstr "1.2.840.113549.1.1.5" IL_0492: call "bool string.op_Equality(string, string)" IL_0497: brtrue IL_0ad8 IL_049c: ldarg.0 IL_049d: ldstr "1.2.840.113549.1.9.5" IL_04a2: call "bool string.op_Equality(string, string)" IL_04a7: brtrue IL_0bb4 IL_04ac: br IL_0e70 IL_04b1: ldarg.0 IL_04b2: ldstr "1.2.840.113549.1.1.7" IL_04b7: call "bool string.op_Equality(string, string)" IL_04bc: brtrue IL_0ae3 IL_04c1: ldarg.0 IL_04c2: ldstr "1.2.840.113549.1.9.7" IL_04c7: call "bool string.op_Equality(string, string)" IL_04cc: brtrue IL_0bca IL_04d1: br IL_0e70 IL_04d6: ldarg.0 IL_04d7: ldstr "1.2.840.113549.1.1.8" IL_04dc: call "bool string.op_Equality(string, string)" IL_04e1: brtrue IL_0aee IL_04e6: br IL_0e70 IL_04eb: ldarg.0 IL_04ec: ldstr "1.2.840.113549.1.1.9" IL_04f1: call "bool string.op_Equality(string, string)" IL_04f6: brtrue IL_0af9 IL_04fb: br IL_0e70 IL_0500: ldarg.0 IL_0501: ldstr "1.2.840.113549.1.5.3" IL_0506: call "bool string.op_Equality(string, string)" IL_050b: brtrue IL_0b30 IL_0510: ldarg.0 IL_0511: ldstr "1.2.840.113549.1.7.3" IL_0516: call "bool string.op_Equality(string, string)" IL_051b: brtrue IL_0b7d IL_0520: ldarg.0 IL_0521: ldstr "1.2.840.113549.1.9.3" IL_0526: call "bool string.op_Equality(string, string)" IL_052b: brtrue IL_0b9e IL_0530: br IL_0e70 IL_0535: ldarg.0 IL_0536: ldstr "1.2.840.113549.1.7.2" IL_053b: call "bool string.op_Equality(string, string)" IL_0540: brtrue IL_0b72 IL_0545: ldarg.0 IL_0546: ldstr "1.3.6.1.5.5.7.48.1.2" IL_054b: call "bool string.op_Equality(string, string)" IL_0550: brtrue IL_0d6c IL_0555: br IL_0e70 IL_055a: ldarg.0 IL_055b: ldstr "1.2.840.113549.1.7.6" IL_0560: call "bool string.op_Equality(string, string)" IL_0565: brtrue IL_0b88 IL_056a: ldarg.0 IL_056b: ldstr "1.2.840.113549.1.9.6" IL_0570: call "bool string.op_Equality(string, string)" IL_0575: brtrue IL_0bbf IL_057a: br IL_0e70 IL_057f: ldarg.0 IL_0580: ldstr "1.2.840.113549.1.9.4" IL_0585: call "bool string.op_Equality(string, string)" IL_058a: brtrue IL_0ba9 IL_058f: br IL_0e70 IL_0594: ldarg.0 IL_0595: ldstr "1.2.840.113549.1.1.10" IL_059a: call "bool string.op_Equality(string, string)" IL_059f: brtrue IL_0b04 IL_05a4: ldarg.0 IL_05a5: ldstr "1.2.840.113549.1.5.10" IL_05aa: call "bool string.op_Equality(string, string)" IL_05af: brtrue IL_0b3b IL_05b4: ldarg.0 IL_05b5: ldstr "1.2.840.113549.1.9.20" IL_05ba: call "bool string.op_Equality(string, string)" IL_05bf: brtrue IL_0c17 IL_05c4: br IL_0e70 IL_05c9: ldarg.0 IL_05ca: ldstr "1.2.840.113549.1.1.11" IL_05cf: call "bool string.op_Equality(string, string)" IL_05d4: brtrue IL_0b0f IL_05d9: ldarg.0 IL_05da: ldstr "1.2.840.113549.1.5.11" IL_05df: call "bool string.op_Equality(string, string)" IL_05e4: brtrue IL_0b46 IL_05e9: ldarg.0 IL_05ea: ldstr "1.2.840.113549.1.9.21" IL_05ef: call "bool string.op_Equality(string, string)" IL_05f4: brtrue IL_0c22 IL_05f9: br IL_0e70 IL_05fe: ldarg.0 IL_05ff: ldstr "1.2.840.113549.1.1.12" IL_0604: call "bool string.op_Equality(string, string)" IL_0609: brtrue IL_0b1a IL_060e: ldarg.0 IL_060f: ldstr "1.2.840.113549.1.5.12" IL_0614: call "bool string.op_Equality(string, string)" IL_0619: brtrue IL_0b51 IL_061e: br IL_0e70 IL_0623: ldarg.0 IL_0624: ldstr "1.2.840.113549.1.1.13" IL_0629: call "bool string.op_Equality(string, string)" IL_062e: brtrue IL_0b25 IL_0633: ldarg.0 IL_0634: ldstr "1.2.840.113549.1.5.13" IL_0639: call "bool string.op_Equality(string, string)" IL_063e: brtrue IL_0b5c IL_0643: br IL_0e70 IL_0648: ldarg.0 IL_0649: ldstr "1.2.840.113549.1.9.14" IL_064e: call "bool string.op_Equality(string, string)" IL_0653: brtrue IL_0bd5 IL_0658: br IL_0e70 IL_065d: ldarg.0 IL_065e: ldstr "1.2.840.113549.1.9.15" IL_0663: call "bool string.op_Equality(string, string)" IL_0668: brtrue IL_0be0 IL_066d: br IL_0e70 IL_0672: ldarg.0 IL_0673: ldstr "1.2.840.113549.1.9.16.1.4" IL_0678: call "bool string.op_Equality(string, string)" IL_067d: brtrue IL_0beb IL_0682: br IL_0e70 IL_0687: ldarg.0 IL_0688: ldstr "1.2.840.113549.1.9.16.2.12" IL_068d: call "bool string.op_Equality(string, string)" IL_0692: brtrue IL_0bf6 IL_0697: ldarg.0 IL_0698: ldstr "1.2.840.113549.1.12.10.1.2" IL_069d: call "bool string.op_Equality(string, string)" IL_06a2: brtrue IL_0c64 IL_06a7: br IL_0e70 IL_06ac: ldarg.0 IL_06ad: ldstr "1.2.840.113549.1.9.16.2.14" IL_06b2: call "bool string.op_Equality(string, string)" IL_06b7: brtrue IL_0c01 IL_06bc: br IL_0e70 IL_06c1: ldarg.0 IL_06c2: ldstr "1.2.840.113549.1.9.16.2.47" IL_06c7: call "bool string.op_Equality(string, string)" IL_06cc: brtrue IL_0c0c IL_06d1: br IL_0e70 IL_06d6: ldarg.0 IL_06d7: ldstr "1.2.840.113549.1.12.10.1.1" IL_06dc: call "bool string.op_Equality(string, string)" IL_06e1: brtrue IL_0c59 IL_06e6: br IL_0e70 IL_06eb: ldarg.0 IL_06ec: ldstr "1.2.840.113549.1.12.10.1.3" IL_06f1: call "bool string.op_Equality(string, string)" IL_06f6: brtrue IL_0c6f IL_06fb: br IL_0e70 IL_0700: ldarg.0 IL_0701: ldstr "1.2.840.113549.1.12.10.1.5" IL_0706: call "bool string.op_Equality(string, string)" IL_070b: brtrue IL_0c7a IL_0710: br IL_0e70 IL_0715: ldarg.0 IL_0716: ldstr "1.2.840.113549.1.12.10.1.6" IL_071b: call "bool string.op_Equality(string, string)" IL_0720: brtrue IL_0c85 IL_0725: br IL_0e70 IL_072a: ldarg.0 IL_072b: ldstr "1.2.840.113549.1.9.22.1" IL_0730: call "bool string.op_Equality(string, string)" IL_0735: brtrue IL_0c2d IL_073a: br IL_0e70 IL_073f: ldarg.0 IL_0740: ldstr "1.2.840.113549.1.12.1.3" IL_0745: call "bool string.op_Equality(string, string)" IL_074a: brtrue IL_0c38 IL_074f: br IL_0e70 IL_0754: ldarg.0 IL_0755: ldstr "1.2.840.113549.1.12.1.5" IL_075a: call "bool string.op_Equality(string, string)" IL_075f: brtrue IL_0c43 IL_0764: br IL_0e70 IL_0769: ldarg.0 IL_076a: ldstr "1.2.840.113549.1.12.1.6" IL_076f: call "bool string.op_Equality(string, string)" IL_0774: brtrue IL_0c4e IL_0779: br IL_0e70 IL_077e: ldarg.0 IL_077f: ldstr "1.3.6.1.4.1.311.17.3.20" IL_0784: call "bool string.op_Equality(string, string)" IL_0789: brtrue IL_0ce8 IL_078e: br IL_0e70 IL_0793: ldarg.0 IL_0794: ldstr "2.16.840.1.101.3.4.1.22" IL_0799: call "bool string.op_Equality(string, string)" IL_079e: brtrue IL_0e38 IL_07a3: ldarg.0 IL_07a4: ldstr "2.16.840.1.101.3.4.1.42" IL_07a9: call "bool string.op_Equality(string, string)" IL_07ae: brtrue IL_0e40 IL_07b3: br IL_0e70 IL_07b8: ldarg.0 IL_07b9: ldstr "1.2.840.113549.2.5" IL_07be: call "bool string.op_Equality(string, string)" IL_07c3: brtrue IL_0c90 IL_07c8: br IL_0e70 IL_07cd: ldarg.0 IL_07ce: ldstr "1.2.840.113549.2.7" IL_07d3: call "bool string.op_Equality(string, string)" IL_07d8: brtrue IL_0c9b IL_07dd: ldarg.0 IL_07de: ldstr "1.2.840.113549.3.7" IL_07e3: call "bool string.op_Equality(string, string)" IL_07e8: brtrue IL_0cd2 IL_07ed: br IL_0e70 IL_07f2: ldarg.0 IL_07f3: ldstr "1.2.840.113549.2.9" IL_07f8: call "bool string.op_Equality(string, string)" IL_07fd: brtrue IL_0ca6 IL_0802: br IL_0e70 IL_0807: ldarg.0 IL_0808: ldstr "1.2.840.113549.3.2" IL_080d: call "bool string.op_Equality(string, string)" IL_0812: brtrue IL_0cc7 IL_0817: ldarg.0 IL_0818: ldstr "1.3.6.1.5.5.7.48.2" IL_081d: call "bool string.op_Equality(string, string)" IL_0822: brtrue IL_0d77 IL_0827: br IL_0e70 IL_082c: ldarg.0 IL_082d: ldstr "1.3.6.1.5.5.7.48.1" IL_0832: call "bool string.op_Equality(string, string)" IL_0837: brtrue IL_0d61 IL_083c: br IL_0e70 IL_0841: ldarg.0 IL_0842: ldstr "1.3.6.1.4.1.311.20.2.3" IL_0847: call "bool string.op_Equality(string, string)" IL_084c: brtrue IL_0cf3 IL_0851: br IL_0e70 IL_0856: ldarg.0 IL_0857: ldstr "1.3.6.1.4.1.311.88.2.1" IL_085c: call "bool string.op_Equality(string, string)" IL_0861: brtrue IL_0cfe IL_0866: ldarg.0 IL_0867: ldstr "1.3.6.1.4.1.311.88.2.2" IL_086c: call "bool string.op_Equality(string, string)" IL_0871: brtrue IL_0d09 IL_0876: br IL_0e70 IL_087b: ldarg.0 IL_087c: ldstr "2.16.840.1.101.3.4.1.2" IL_0881: call "bool string.op_Equality(string, string)" IL_0886: brtrue IL_0e30 IL_088b: ldarg.0 IL_088c: ldstr "2.16.840.1.101.3.4.2.1" IL_0891: call "bool string.op_Equality(string, string)" IL_0896: brtrue IL_0e48 IL_089b: ldarg.0 IL_089c: ldstr "2.16.840.1.101.3.4.2.2" IL_08a1: call "bool string.op_Equality(string, string)" IL_08a6: brtrue IL_0e50 IL_08ab: ldarg.0 IL_08ac: ldstr "2.16.840.1.101.3.4.2.3" IL_08b1: call "bool string.op_Equality(string, string)" IL_08b6: brtrue IL_0e58 IL_08bb: br IL_0e70 IL_08c0: ldarg.0 IL_08c1: ldstr "1.3.14.3.2.26" IL_08c6: call "bool string.op_Equality(string, string)" IL_08cb: brtrue IL_0d82 IL_08d0: br IL_0e70 IL_08d5: ldarg.0 IL_08d6: ldstr "1.3.14.3.2.7" IL_08db: call "bool string.op_Equality(string, string)" IL_08e0: brtrue IL_0d8d IL_08e5: br IL_0e70 IL_08ea: ldarg.0 IL_08eb: ldstr "1.3.132.0.34" IL_08f0: call "bool string.op_Equality(string, string)" IL_08f5: brtrue IL_0d98 IL_08fa: br IL_0e70 IL_08ff: ldarg.0 IL_0900: ldstr "1.3.132.0.35" IL_0905: call "bool string.op_Equality(string, string)" IL_090a: brtrue IL_0da3 IL_090f: br IL_0e70 IL_0914: ldarg.0 IL_0915: ldstr "2.5.4.3" IL_091a: call "bool string.op_Equality(string, string)" IL_091f: brtrue IL_0dae IL_0924: br IL_0e70 IL_0929: ldarg.0 IL_092a: ldstr "2.5.4.5" IL_092f: call "bool string.op_Equality(string, string)" IL_0934: brtrue IL_0db9 IL_0939: br IL_0e70 IL_093e: ldarg.0 IL_093f: ldstr "2.5.4.6" IL_0944: call "bool string.op_Equality(string, string)" IL_0949: brtrue IL_0dc4 IL_094e: br IL_0e70 IL_0953: ldarg.0 IL_0954: ldstr "2.5.4.7" IL_0959: call "bool string.op_Equality(string, string)" IL_095e: brtrue IL_0dcf IL_0963: br IL_0e70 IL_0968: ldarg.0 IL_0969: ldstr "2.5.4.8" IL_096e: call "bool string.op_Equality(string, string)" IL_0973: brtrue IL_0dda IL_0978: br IL_0e70 IL_097d: ldarg.0 IL_097e: ldstr "2.5.4.10" IL_0983: call "bool string.op_Equality(string, string)" IL_0988: brtrue IL_0de5 IL_098d: br IL_0e70 IL_0992: ldarg.0 IL_0993: ldstr "2.5.4.11" IL_0998: call "bool string.op_Equality(string, string)" IL_099d: brtrue IL_0df0 IL_09a2: br IL_0e70 IL_09a7: ldarg.0 IL_09a8: ldstr "2.5.4.97" IL_09ad: call "bool string.op_Equality(string, string)" IL_09b2: brtrue IL_0df8 IL_09b7: br IL_0e70 IL_09bc: ldarg.0 IL_09bd: ldstr "2.5.29.14" IL_09c2: call "bool string.op_Equality(string, string)" IL_09c7: brtrue IL_0e00 IL_09cc: br IL_0e70 IL_09d1: ldarg.0 IL_09d2: ldstr "2.5.29.15" IL_09d7: call "bool string.op_Equality(string, string)" IL_09dc: brtrue IL_0e08 IL_09e1: ldarg.0 IL_09e2: ldstr "2.5.29.35" IL_09e7: call "bool string.op_Equality(string, string)" IL_09ec: brtrue IL_0e28 IL_09f1: br IL_0e70 IL_09f6: ldarg.0 IL_09f7: ldstr "2.5.29.17" IL_09fc: call "bool string.op_Equality(string, string)" IL_0a01: brtrue IL_0e10 IL_0a06: br IL_0e70 IL_0a0b: ldarg.0 IL_0a0c: ldstr "2.5.29.19" IL_0a11: call "bool string.op_Equality(string, string)" IL_0a16: brtrue IL_0e18 IL_0a1b: br IL_0e70 IL_0a20: ldarg.0 IL_0a21: ldstr "2.5.29.20" IL_0a26: call "bool string.op_Equality(string, string)" IL_0a2b: brtrue IL_0e20 IL_0a30: br IL_0e70 IL_0a35: ldarg.0 IL_0a36: ldstr "2.23.140.1.2.1" IL_0a3b: call "bool string.op_Equality(string, string)" IL_0a40: brtrue IL_0e60 IL_0a45: br IL_0e70 IL_0a4a: ldarg.0 IL_0a4b: ldstr "2.23.140.1.2.2" IL_0a50: call "bool string.op_Equality(string, string)" IL_0a55: brtrue IL_0e68 IL_0a5a: br IL_0e70 IL_0a5f: ldstr "1.2.840.10040.4.1" IL_0a64: stloc.0 IL_0a65: br IL_0e76 IL_0a6a: ldstr "1.2.840.10040.4.3" IL_0a6f: stloc.0 IL_0a70: br IL_0e76 IL_0a75: ldstr "1.2.840.10045.2.1" IL_0a7a: stloc.0 IL_0a7b: br IL_0e76 IL_0a80: ldstr "1.2.840.10045.1.1" IL_0a85: stloc.0 IL_0a86: br IL_0e76 IL_0a8b: ldstr "1.2.840.10045.1.2" IL_0a90: stloc.0 IL_0a91: br IL_0e76 IL_0a96: ldstr "1.2.840.10045.3.1.7" IL_0a9b: stloc.0 IL_0a9c: br IL_0e76 IL_0aa1: ldstr "1.2.840.10045.4.1" IL_0aa6: stloc.0 IL_0aa7: br IL_0e76 IL_0aac: ldstr "1.2.840.10045.4.3.2" IL_0ab1: stloc.0 IL_0ab2: br IL_0e76 IL_0ab7: ldstr "1.2.840.10045.4.3.3" IL_0abc: stloc.0 IL_0abd: br IL_0e76 IL_0ac2: ldstr "1.2.840.10045.4.3.4" IL_0ac7: stloc.0 IL_0ac8: br IL_0e76 IL_0acd: ldstr "1.2.840.113549.1.1.1" IL_0ad2: stloc.0 IL_0ad3: br IL_0e76 IL_0ad8: ldstr "1.2.840.113549.1.1.5" IL_0add: stloc.0 IL_0ade: br IL_0e76 IL_0ae3: ldstr "1.2.840.113549.1.1.7" IL_0ae8: stloc.0 IL_0ae9: br IL_0e76 IL_0aee: ldstr "1.2.840.113549.1.1.8" IL_0af3: stloc.0 IL_0af4: br IL_0e76 IL_0af9: ldstr "1.2.840.113549.1.1.9" IL_0afe: stloc.0 IL_0aff: br IL_0e76 IL_0b04: ldstr "1.2.840.113549.1.1.10" IL_0b09: stloc.0 IL_0b0a: br IL_0e76 IL_0b0f: ldstr "1.2.840.113549.1.1.11" IL_0b14: stloc.0 IL_0b15: br IL_0e76 IL_0b1a: ldstr "1.2.840.113549.1.1.12" IL_0b1f: stloc.0 IL_0b20: br IL_0e76 IL_0b25: ldstr "1.2.840.113549.1.1.13" IL_0b2a: stloc.0 IL_0b2b: br IL_0e76 IL_0b30: ldstr "1.2.840.113549.1.5.3" IL_0b35: stloc.0 IL_0b36: br IL_0e76 IL_0b3b: ldstr "1.2.840.113549.1.5.10" IL_0b40: stloc.0 IL_0b41: br IL_0e76 IL_0b46: ldstr "1.2.840.113549.1.5.11" IL_0b4b: stloc.0 IL_0b4c: br IL_0e76 IL_0b51: ldstr "1.2.840.113549.1.5.12" IL_0b56: stloc.0 IL_0b57: br IL_0e76 IL_0b5c: ldstr "1.2.840.113549.1.5.13" IL_0b61: stloc.0 IL_0b62: br IL_0e76 IL_0b67: ldstr "1.2.840.113549.1.7.1" IL_0b6c: stloc.0 IL_0b6d: br IL_0e76 IL_0b72: ldstr "1.2.840.113549.1.7.2" IL_0b77: stloc.0 IL_0b78: br IL_0e76 IL_0b7d: ldstr "1.2.840.113549.1.7.3" IL_0b82: stloc.0 IL_0b83: br IL_0e76 IL_0b88: ldstr "1.2.840.113549.1.7.6" IL_0b8d: stloc.0 IL_0b8e: br IL_0e76 IL_0b93: ldstr "1.2.840.113549.1.9.1" IL_0b98: stloc.0 IL_0b99: br IL_0e76 IL_0b9e: ldstr "1.2.840.113549.1.9.3" IL_0ba3: stloc.0 IL_0ba4: br IL_0e76 IL_0ba9: ldstr "1.2.840.113549.1.9.4" IL_0bae: stloc.0 IL_0baf: br IL_0e76 IL_0bb4: ldstr "1.2.840.113549.1.9.5" IL_0bb9: stloc.0 IL_0bba: br IL_0e76 IL_0bbf: ldstr "1.2.840.113549.1.9.6" IL_0bc4: stloc.0 IL_0bc5: br IL_0e76 IL_0bca: ldstr "1.2.840.113549.1.9.7" IL_0bcf: stloc.0 IL_0bd0: br IL_0e76 IL_0bd5: ldstr "1.2.840.113549.1.9.14" IL_0bda: stloc.0 IL_0bdb: br IL_0e76 IL_0be0: ldstr "1.2.840.113549.1.9.15" IL_0be5: stloc.0 IL_0be6: br IL_0e76 IL_0beb: ldstr "1.2.840.113549.1.9.16.1.4" IL_0bf0: stloc.0 IL_0bf1: br IL_0e76 IL_0bf6: ldstr "1.2.840.113549.1.9.16.2.12" IL_0bfb: stloc.0 IL_0bfc: br IL_0e76 IL_0c01: ldstr "1.2.840.113549.1.9.16.2.14" IL_0c06: stloc.0 IL_0c07: br IL_0e76 IL_0c0c: ldstr "1.2.840.113549.1.9.16.2.47" IL_0c11: stloc.0 IL_0c12: br IL_0e76 IL_0c17: ldstr "1.2.840.113549.1.9.20" IL_0c1c: stloc.0 IL_0c1d: br IL_0e76 IL_0c22: ldstr "1.2.840.113549.1.9.21" IL_0c27: stloc.0 IL_0c28: br IL_0e76 IL_0c2d: ldstr "1.2.840.113549.1.9.22.1" IL_0c32: stloc.0 IL_0c33: br IL_0e76 IL_0c38: ldstr "1.2.840.113549.1.12.1.3" IL_0c3d: stloc.0 IL_0c3e: br IL_0e76 IL_0c43: ldstr "1.2.840.113549.1.12.1.5" IL_0c48: stloc.0 IL_0c49: br IL_0e76 IL_0c4e: ldstr "1.2.840.113549.1.12.1.6" IL_0c53: stloc.0 IL_0c54: br IL_0e76 IL_0c59: ldstr "1.2.840.113549.1.12.10.1.1" IL_0c5e: stloc.0 IL_0c5f: br IL_0e76 IL_0c64: ldstr "1.2.840.113549.1.12.10.1.2" IL_0c69: stloc.0 IL_0c6a: br IL_0e76 IL_0c6f: ldstr "1.2.840.113549.1.12.10.1.3" IL_0c74: stloc.0 IL_0c75: br IL_0e76 IL_0c7a: ldstr "1.2.840.113549.1.12.10.1.5" IL_0c7f: stloc.0 IL_0c80: br IL_0e76 IL_0c85: ldstr "1.2.840.113549.1.12.10.1.6" IL_0c8a: stloc.0 IL_0c8b: br IL_0e76 IL_0c90: ldstr "1.2.840.113549.2.5" IL_0c95: stloc.0 IL_0c96: br IL_0e76 IL_0c9b: ldstr "1.2.840.113549.2.7" IL_0ca0: stloc.0 IL_0ca1: br IL_0e76 IL_0ca6: ldstr "1.2.840.113549.2.9" IL_0cab: stloc.0 IL_0cac: br IL_0e76 IL_0cb1: ldstr "1.2.840.113549.2.10" IL_0cb6: stloc.0 IL_0cb7: br IL_0e76 IL_0cbc: ldstr "1.2.840.113549.2.11" IL_0cc1: stloc.0 IL_0cc2: br IL_0e76 IL_0cc7: ldstr "1.2.840.113549.3.2" IL_0ccc: stloc.0 IL_0ccd: br IL_0e76 IL_0cd2: ldstr "1.2.840.113549.3.7" IL_0cd7: stloc.0 IL_0cd8: br IL_0e76 IL_0cdd: ldstr "1.3.6.1.4.1.311.17.1" IL_0ce2: stloc.0 IL_0ce3: br IL_0e76 IL_0ce8: ldstr "1.3.6.1.4.1.311.17.3.20" IL_0ced: stloc.0 IL_0cee: br IL_0e76 IL_0cf3: ldstr "1.3.6.1.4.1.311.20.2.3" IL_0cf8: stloc.0 IL_0cf9: br IL_0e76 IL_0cfe: ldstr "1.3.6.1.4.1.311.88.2.1" IL_0d03: stloc.0 IL_0d04: br IL_0e76 IL_0d09: ldstr "1.3.6.1.4.1.311.88.2.2" IL_0d0e: stloc.0 IL_0d0f: br IL_0e76 IL_0d14: ldstr "1.3.6.1.5.5.7.3.1" IL_0d19: stloc.0 IL_0d1a: br IL_0e76 IL_0d1f: ldstr "1.3.6.1.5.5.7.3.2" IL_0d24: stloc.0 IL_0d25: br IL_0e76 IL_0d2a: ldstr "1.3.6.1.5.5.7.3.3" IL_0d2f: stloc.0 IL_0d30: br IL_0e76 IL_0d35: ldstr "1.3.6.1.5.5.7.3.4" IL_0d3a: stloc.0 IL_0d3b: br IL_0e76 IL_0d40: ldstr "1.3.6.1.5.5.7.3.8" IL_0d45: stloc.0 IL_0d46: br IL_0e76 IL_0d4b: ldstr "1.3.6.1.5.5.7.3.9" IL_0d50: stloc.0 IL_0d51: br IL_0e76 IL_0d56: ldstr "1.3.6.1.5.5.7.6.2" IL_0d5b: stloc.0 IL_0d5c: br IL_0e76 IL_0d61: ldstr "1.3.6.1.5.5.7.48.1" IL_0d66: stloc.0 IL_0d67: br IL_0e76 IL_0d6c: ldstr "1.3.6.1.5.5.7.48.1.2" IL_0d71: stloc.0 IL_0d72: br IL_0e76 IL_0d77: ldstr "1.3.6.1.5.5.7.48.2" IL_0d7c: stloc.0 IL_0d7d: br IL_0e76 IL_0d82: ldstr "1.3.14.3.2.26" IL_0d87: stloc.0 IL_0d88: br IL_0e76 IL_0d8d: ldstr "1.3.14.3.2.7" IL_0d92: stloc.0 IL_0d93: br IL_0e76 IL_0d98: ldstr "1.3.132.0.34" IL_0d9d: stloc.0 IL_0d9e: br IL_0e76 IL_0da3: ldstr "1.3.132.0.35" IL_0da8: stloc.0 IL_0da9: br IL_0e76 IL_0dae: ldstr "2.5.4.3" IL_0db3: stloc.0 IL_0db4: br IL_0e76 IL_0db9: ldstr "2.5.4.5" IL_0dbe: stloc.0 IL_0dbf: br IL_0e76 IL_0dc4: ldstr "2.5.4.6" IL_0dc9: stloc.0 IL_0dca: br IL_0e76 IL_0dcf: ldstr "2.5.4.7" IL_0dd4: stloc.0 IL_0dd5: br IL_0e76 IL_0dda: ldstr "2.5.4.8" IL_0ddf: stloc.0 IL_0de0: br IL_0e76 IL_0de5: ldstr "2.5.4.10" IL_0dea: stloc.0 IL_0deb: br IL_0e76 IL_0df0: ldstr "2.5.4.11" IL_0df5: stloc.0 IL_0df6: br.s IL_0e76 IL_0df8: ldstr "2.5.4.97" IL_0dfd: stloc.0 IL_0dfe: br.s IL_0e76 IL_0e00: ldstr "2.5.29.14" IL_0e05: stloc.0 IL_0e06: br.s IL_0e76 IL_0e08: ldstr "2.5.29.15" IL_0e0d: stloc.0 IL_0e0e: br.s IL_0e76 IL_0e10: ldstr "2.5.29.17" IL_0e15: stloc.0 IL_0e16: br.s IL_0e76 IL_0e18: ldstr "2.5.29.19" IL_0e1d: stloc.0 IL_0e1e: br.s IL_0e76 IL_0e20: ldstr "2.5.29.20" IL_0e25: stloc.0 IL_0e26: br.s IL_0e76 IL_0e28: ldstr "2.5.29.35" IL_0e2d: stloc.0 IL_0e2e: br.s IL_0e76 IL_0e30: ldstr "2.16.840.1.101.3.4.1.2" IL_0e35: stloc.0 IL_0e36: br.s IL_0e76 IL_0e38: ldstr "2.16.840.1.101.3.4.1.22" IL_0e3d: stloc.0 IL_0e3e: br.s IL_0e76 IL_0e40: ldstr "2.16.840.1.101.3.4.1.42" IL_0e45: stloc.0 IL_0e46: br.s IL_0e76 IL_0e48: ldstr "2.16.840.1.101.3.4.2.1" IL_0e4d: stloc.0 IL_0e4e: br.s IL_0e76 IL_0e50: ldstr "2.16.840.1.101.3.4.2.2" IL_0e55: stloc.0 IL_0e56: br.s IL_0e76 IL_0e58: ldstr "2.16.840.1.101.3.4.2.3" IL_0e5d: stloc.0 IL_0e5e: br.s IL_0e76 IL_0e60: ldstr "2.23.140.1.2.1" IL_0e65: stloc.0 IL_0e66: br.s IL_0e76 IL_0e68: ldstr "2.23.140.1.2.2" IL_0e6d: stloc.0 IL_0e6e: br.s IL_0e76 IL_0e70: ldstr "default" IL_0e75: stloc.0 IL_0e76: ldloc.0 IL_0e77: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 4692 (0x1254) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x77c08b8d IL_000d: bgt.un IL_030b IL_0012: ldloc.1 IL_0013: ldc.i4 0x3343070f IL_0018: bgt.un IL_0188 IL_001d: ldloc.1 IL_001e: ldc.i4 0x23070056 IL_0023: bgt.un IL_00d8 IL_0028: ldloc.1 IL_0029: ldc.i4 0x1bd19c31 IL_002e: bgt.un.s IL_0084 IL_0030: ldloc.1 IL_0031: ldc.i4 0xafcddca IL_0036: bgt.un.s IL_005e IL_0038: ldloc.1 IL_0039: ldc.i4 0x7fcd911 IL_003e: beq IL_0c6d IL_0043: ldloc.1 IL_0044: ldc.i4 0x9fcdc37 IL_0049: beq IL_0c82 IL_004e: ldloc.1 IL_004f: ldc.i4 0xafcddca IL_0054: beq IL_0c97 IL_0059: br IL_124c IL_005e: ldloc.1 IL_005f: ldc.i4 0xbfcdf5d IL_0064: beq IL_0cac IL_0069: ldloc.1 IL_006a: ldc.i4 0x11089fa9 IL_006f: beq IL_094f IL_0074: ldloc.1 IL_0075: ldc.i4 0x1bd19c31 IL_007a: beq IL_0646 IL_007f: br IL_124c IL_0084: ldloc.1 IL_0085: ldc.i4 0x1e6ebeee IL_008a: bgt.un.s IL_00b2 IL_008c: ldloc.1 IL_008d: ldc.i4 0x1c6ebbc8 IL_0092: beq IL_061c IL_0097: ldloc.1 IL_0098: ldc.i4 0x1d3018af IL_009d: beq IL_069a IL_00a2: ldloc.1 IL_00a3: ldc.i4 0x1e6ebeee IL_00a8: beq IL_0631 IL_00ad: br IL_124c IL_00b2: ldloc.1 IL_00b3: ldc.i4 0x1fdb884c IL_00b8: beq IL_0742 IL_00bd: ldloc.1 IL_00be: ldc.i4 0x20db89df IL_00c3: beq IL_072d IL_00c8: ldloc.1 IL_00c9: ldc.i4 0x23070056 IL_00ce: beq IL_06c4 IL_00d3: br IL_124c IL_00d8: ldloc.1 IL_00d9: ldc.i4 0x281396fb IL_00de: bgt.un.s IL_0134 IL_00e0: ldloc.1 IL_00e1: ldc.i4 0x25db91be IL_00e6: bgt.un.s IL_010e IL_00e8: ldloc.1 IL_00e9: ldc.i4 0x23db8e98 IL_00ee: beq IL_0703 IL_00f3: ldloc.1 IL_00f4: ldc.i4 0x240701e9 IL_00f9: beq IL_06af IL_00fe: ldloc.1 IL_00ff: ldc.i4 0x25db91be IL_0104: beq IL_0718 IL_0109: br IL_124c IL_010e: ldloc.1 IL_010f: ldc.i4 0x2607050f IL_0114: beq IL_06d9 IL_0119: ldloc.1 IL_011a: ldc.i4 0x27db94e4 IL_011f: beq IL_06ee IL_0124: ldloc.1 IL_0125: ldc.i4 0x281396fb IL_012a: beq IL_0b1d IL_012f: br IL_124c IL_0134: ldloc.1 IL_0135: ldc.i4 0x3085083d IL_013a: bgt.un.s IL_0162 IL_013c: ldloc.1 IL_013d: ldc.i4 0x2913988e IL_0142: beq IL_0b32 IL_0147: ldloc.1 IL_0148: ldc.i4 0x2f8506aa IL_014d: beq IL_0c43 IL_0152: ldloc.1 IL_0153: ldc.i4 0x3085083d IL_0158: beq IL_0c58 IL_015d: br IL_124c IL_0162: ldloc.1 IL_0163: ldc.i4 0x3243057c IL_0168: beq IL_0b9b IL_016d: ldloc.1 IL_016e: ldc.i4 0x332fa045 IL_0173: beq IL_0c19 IL_0178: ldloc.1 IL_0179: ldc.i4 0x3343070f IL_017e: beq IL_0bb0 IL_0183: br IL_124c IL_0188: ldloc.1 IL_0189: ldc.i4 0x4f59e06b IL_018e: bgt.un IL_0243 IL_0193: ldloc.1 IL_0194: ldc.i4 0x3c43153a IL_0199: bgt.un.s IL_01ef IL_019b: ldloc.1 IL_019c: ldc.i4 0x3b26d12c IL_01a1: bgt.un.s IL_01c9 IL_01a3: ldloc.1 IL_01a4: ldc.i4 0x36430bc8 IL_01a9: beq IL_0b86 IL_01ae: ldloc.1 IL_01af: ldc.i4 0x38f1086c IL_01b4: beq IL_0d00 IL_01b9: ldloc.1 IL_01ba: ldc.i4 0x3b26d12c IL_01bf: beq IL_0979 IL_01c4: br IL_124c IL_01c9: ldloc.1 IL_01ca: ldc.i4 0x3b4313a7 IL_01cf: beq IL_0b47 IL_01d4: ldloc.1 IL_01d5: ldc.i4 0x3c26d2bf IL_01da: beq IL_0964 IL_01df: ldloc.1 IL_01e0: ldc.i4 0x3c43153a IL_01e5: beq IL_0b5c IL_01ea: br IL_124c IL_01ef: ldloc.1 IL_01f0: ldc.i4 0x4804a7c1 IL_01f5: bgt.un.s IL_021d IL_01f7: ldloc.1 IL_01f8: ldc.i4 0x3d4316cd IL_01fd: beq IL_0b71 IL_0202: ldloc.1 IL_0203: ldc.i4 0x4704a62e IL_0208: beq IL_0ceb IL_020d: ldloc.1 IL_020e: ldc.i4 0x4804a7c1 IL_0213: beq IL_0cd6 IL_0218: br IL_124c IL_021d: ldloc.1 IL_021e: ldc.i4 0x4e59ded8 IL_0223: beq IL_07c0 IL_0228: ldloc.1 IL_0229: ldc.i4 0x4e5d1dcc IL_022e: beq IL_0bef IL_0233: ldloc.1 IL_0234: ldc.i4 0x4f59e06b IL_0239: beq IL_07d5 IL_023e: br IL_124c IL_0243: ldloc.1 IL_0244: ldc.i4 0x595ddeb5 IL_0249: bgt.un.s IL_029f IL_024b: ldloc.1 IL_024c: ldc.i4 0x5159e391 IL_0251: bgt.un.s IL_0279 IL_0253: ldloc.1 IL_0254: ldc.i4 0x4ff97a7f IL_0259: beq IL_0af3 IL_025e: ldloc.1 IL_025f: ldc.i4 0x5059e1fe IL_0264: beq IL_07ea IL_0269: ldloc.1 IL_026a: ldc.i4 0x5159e391 IL_026f: beq IL_07ff IL_0274: br IL_124c IL_0279: ldloc.1 IL_027a: ldc.i4 0x53118aff IL_027f: beq IL_0b08 IL_0284: ldloc.1 IL_0285: ldc.i4 0x565dd9fc IL_028a: beq IL_065b IL_028f: ldloc.1 IL_0290: ldc.i4 0x595ddeb5 IL_0295: beq IL_0670 IL_029a: br IL_124c IL_029f: ldloc.1 IL_02a0: ldc.i4 0x6b2c3ae9 IL_02a5: bgt.un.s IL_02cd IL_02a7: ldloc.1 IL_02a8: ldc.i4 0x5a004a99 IL_02ad: beq IL_0685 IL_02b2: ldloc.1 IL_02b3: ldc.i4 0x69d0cb33 IL_02b8: beq IL_0d93 IL_02bd: ldloc.1 IL_02be: ldc.i4 0x6b2c3ae9 IL_02c3: beq IL_0910 IL_02c8: br IL_124c IL_02cd: ldloc.1 IL_02ce: ldc.i4 0x777b7fe3 IL_02d3: bgt.un.s IL_02f0 IL_02d5: ldloc.1 IL_02d6: ldc.i4 0x747ce41c IL_02db: beq IL_0bda IL_02e0: ldloc.1 IL_02e1: ldc.i4 0x777b7fe3 IL_02e6: beq IL_0e11 IL_02eb: br IL_124c IL_02f0: ldloc.1 IL_02f1: ldc.i4 0x777ce8d5 IL_02f6: beq IL_0c04 IL_02fb: ldloc.1 IL_02fc: ldc.i4 0x77c08b8d IL_0301: beq IL_0bc5 IL_0306: br IL_124c IL_030b: ldloc.1 IL_030c: ldc.i4 0xafe050dc IL_0311: bgt.un IL_0499 IL_0316: ldloc.1 IL_0317: ldc.i4 0x95ab4e75 IL_031c: bgt.un IL_03d1 IL_0321: ldloc.1 IL_0322: ldc.i4 0x8048ce1e IL_0327: bgt.un.s IL_037d IL_0329: ldloc.1 IL_032a: ldc.i4 0x7becd51b IL_032f: bgt.un.s IL_0357 IL_0331: ldloc.1 IL_0332: ldc.i4 0x787b8176 IL_0337: beq IL_0e26 IL_033c: ldloc.1 IL_033d: ldc.i4 0x7aecd388 IL_0342: beq IL_083e IL_0347: ldloc.1 IL_0348: ldc.i4 0x7becd51b IL_034d: beq IL_0829 IL_0352: br IL_124c IL_0357: ldloc.1 IL_0358: ldc.i4 0x7cecd6ae IL_035d: beq IL_0814 IL_0362: ldloc.1 IL_0363: ldc.i4 0x7fecdb67 IL_0368: beq IL_0853 IL_036d: ldloc.1 IL_036e: ldc.i4 0x8048ce1e IL_0373: beq IL_0ab4 IL_0378: br IL_124c IL_037d: ldloc.1 IL_037e: ldc.i4 0x93ab4b4f IL_0383: bgt.un.s IL_03ab IL_0385: ldloc.1 IL_0386: ldc.i4 0x8548d5fd IL_038b: beq IL_0ac9 IL_0390: ldloc.1 IL_0391: ldc.i4 0x92ab49bc IL_0396: beq IL_0757 IL_039b: ldloc.1 IL_039c: ldc.i4 0x93ab4b4f IL_03a1: beq IL_076c IL_03a6: br IL_124c IL_03ab: ldloc.1 IL_03ac: ldc.i4 0x94ab4ce2 IL_03b1: beq IL_0781 IL_03b6: ldloc.1 IL_03b7: ldc.i4 0x94af9293 IL_03bc: beq IL_0da8 IL_03c1: ldloc.1 IL_03c2: ldc.i4 0x95ab4e75 IL_03c7: beq IL_0796 IL_03cc: br IL_124c IL_03d1: ldloc.1 IL_03d2: ldc.i4 0xa401384d IL_03d7: bgt.un.s IL_042d IL_03d9: ldloc.1 IL_03da: ldc.i4 0x9e012edb IL_03df: bgt.un.s IL_0407 IL_03e1: ldloc.1 IL_03e2: ldc.i4 0x9a7462aa IL_03e7: beq IL_0c2e IL_03ec: ldloc.1 IL_03ed: ldc.i4 0x9cbea9b5 IL_03f2: beq IL_0dbd IL_03f7: ldloc.1 IL_03f8: ldc.i4 0x9e012edb IL_03fd: beq IL_0925 IL_0402: br IL_124c IL_0407: ldloc.1 IL_0408: ldc.i4 0xa2882d34 IL_040d: beq IL_0a8a IL_0412: ldloc.1 IL_0413: ldc.i4 0xa3882ec7 IL_0418: beq IL_0a9f IL_041d: ldloc.1 IL_041e: ldc.i4 0xa401384d IL_0423: beq IL_093a IL_0428: br IL_124c IL_042d: ldloc.1 IL_042e: ldc.i4 0xace04c23 IL_0433: bgt.un.s IL_045b IL_0435: ldloc.1 IL_0436: ldc.i4 0xabd2b2a0 IL_043b: beq IL_09cd IL_0440: ldloc.1 IL_0441: ldc.i4 0xabe04a90 IL_0446: beq IL_08a7 IL_044b: ldloc.1 IL_044c: ldc.i4 0xace04c23 IL_0451: beq IL_0892 IL_0456: br IL_124c IL_045b: ldloc.1 IL_045c: ldc.i4 0xaed2b759 IL_0461: bgt.un.s IL_047e IL_0463: ldloc.1 IL_0464: ldc.i4 0xade04db6 IL_0469: beq IL_08d1 IL_046e: ldloc.1 IL_046f: ldc.i4 0xaed2b759 IL_0474: beq IL_09b8 IL_0479: br IL_124c IL_047e: ldloc.1 IL_047f: ldc.i4 0xaee04f49 IL_0484: beq IL_08bc IL_0489: ldloc.1 IL_048a: ldc.i4 0xafe050dc IL_048f: beq IL_0868 IL_0494: br IL_124c IL_0499: ldloc.1 IL_049a: ldc.i4 0xdc91c9af IL_049f: bgt.un IL_0554 IL_04a4: ldloc.1 IL_04a5: ldc.i4 0xd007f6d9 IL_04aa: bgt.un.s IL_0500 IL_04ac: ldloc.1 IL_04ad: ldc.i4 0xc61f5d38 IL_04b2: bgt.un.s IL_04da IL_04b4: ldloc.1 IL_04b5: ldc.i4 0xb0d2ba7f IL_04ba: beq IL_09a3 IL_04bf: ldloc.1 IL_04c0: ldc.i4 0xb1e05402 IL_04c5: beq IL_087d IL_04ca: ldloc.1 IL_04cb: ldc.i4 0xc61f5d38 IL_04d0: beq IL_08e6 IL_04d5: br IL_124c IL_04da: ldloc.1 IL_04db: ldc.i4 0xc71f5ecb IL_04e0: beq IL_08fb IL_04e5: ldloc.1 IL_04e6: ldc.i4 0xcf05b6af IL_04eb: beq IL_0d7e IL_04f0: ldloc.1 IL_04f1: ldc.i4 0xd007f6d9 IL_04f6: beq IL_0d69 IL_04fb: br IL_124c IL_0500: ldloc.1 IL_0501: ldc.i4 0xd30a3a29 IL_0506: bgt.un.s IL_052e IL_0508: ldloc.1 IL_0509: ldc.i4 0xd10a3703 IL_050e: beq IL_0d3f IL_0513: ldloc.1 IL_0514: ldc.i4 0xd20a3896 IL_0519: beq IL_0d15 IL_051e: ldloc.1 IL_051f: ldc.i4 0xd30a3a29 IL_0524: beq IL_0d2a IL_0529: br IL_124c IL_052e: ldloc.1 IL_052f: ldc.i4 0xd53b501e IL_0534: beq IL_07ab IL_0539: ldloc.1 IL_053a: ldc.i4 0xdc6685e0 IL_053f: beq IL_098e IL_0544: ldloc.1 IL_0545: ldc.i4 0xdc91c9af IL_054a: beq IL_0dd2 IL_054f: br IL_124c IL_0554: ldloc.1 IL_0555: ldc.i4 0xe0252800 IL_055a: bgt.un.s IL_05b0 IL_055c: ldloc.1 IL_055d: ldc.i4 0xde91ccd5 IL_0562: bgt.un.s IL_058a IL_0564: ldloc.1 IL_0565: ldc.i4 0xdd91cb42 IL_056a: beq IL_0de7 IL_056f: ldloc.1 IL_0570: ldc.i4 0xde178c28 IL_0575: beq IL_09e2 IL_057a: ldloc.1 IL_057b: ldc.i4 0xde91ccd5 IL_0580: beq IL_0dfc IL_0585: br IL_124c IL_058a: ldloc.1 IL_058b: ldc.i4 0xdf0a4d0d IL_0590: beq IL_0d54 IL_0595: ldloc.1 IL_0596: ldc.i4 0xe0178f4e IL_059b: beq IL_0a0c IL_05a0: ldloc.1 IL_05a1: ldc.i4 0xe0252800 IL_05a6: beq IL_0a4b IL_05ab: br IL_124c IL_05b0: ldloc.1 IL_05b1: ldc.i4 0xe2252b26 IL_05b6: bgt.un.s IL_05de IL_05b8: ldloc.1 IL_05b9: ldc.i4 0xe11790e1 IL_05be: beq IL_09f7 IL_05c3: ldloc.1 IL_05c4: ldc.i4 0xe2179274 IL_05c9: beq IL_0a21 IL_05ce: ldloc.1 IL_05cf: ldc.i4 0xe2252b26 IL_05d4: beq IL_0a60 IL_05d9: br IL_124c IL_05de: ldloc.1 IL_05df: ldc.i4 0xec253ae4 IL_05e4: bgt.un.s IL_0601 IL_05e6: ldloc.1 IL_05e7: ldc.i4 0xe517972d IL_05ec: beq IL_0a36 IL_05f1: ldloc.1 IL_05f2: ldc.i4 0xec253ae4 IL_05f7: beq IL_0a75 IL_05fc: br IL_124c IL_0601: ldloc.1 IL_0602: ldc.i4 0xf9eeda43 IL_0607: beq IL_0ade IL_060c: ldloc.1 IL_060d: ldc.i4 0xfcfcc7c0 IL_0612: beq IL_0cc1 IL_0617: br IL_124c IL_061c: ldarg.0 IL_061d: ldstr "1.2.840.10040.4.1" IL_0622: call "bool string.op_Equality(string, string)" IL_0627: brtrue IL_0e3b IL_062c: br IL_124c IL_0631: ldarg.0 IL_0632: ldstr "1.2.840.10040.4.3" IL_0637: call "bool string.op_Equality(string, string)" IL_063c: brtrue IL_0e46 IL_0641: br IL_124c IL_0646: ldarg.0 IL_0647: ldstr "1.2.840.10045.2.1" IL_064c: call "bool string.op_Equality(string, string)" IL_0651: brtrue IL_0e51 IL_0656: br IL_124c IL_065b: ldarg.0 IL_065c: ldstr "1.2.840.10045.1.1" IL_0661: call "bool string.op_Equality(string, string)" IL_0666: brtrue IL_0e5c IL_066b: br IL_124c IL_0670: ldarg.0 IL_0671: ldstr "1.2.840.10045.1.2" IL_0676: call "bool string.op_Equality(string, string)" IL_067b: brtrue IL_0e67 IL_0680: br IL_124c IL_0685: ldarg.0 IL_0686: ldstr "1.2.840.10045.3.1.7" IL_068b: call "bool string.op_Equality(string, string)" IL_0690: brtrue IL_0e72 IL_0695: br IL_124c IL_069a: ldarg.0 IL_069b: ldstr "1.2.840.10045.4.1" IL_06a0: call "bool string.op_Equality(string, string)" IL_06a5: brtrue IL_0e7d IL_06aa: br IL_124c IL_06af: ldarg.0 IL_06b0: ldstr "1.2.840.10045.4.3.2" IL_06b5: call "bool string.op_Equality(string, string)" IL_06ba: brtrue IL_0e88 IL_06bf: br IL_124c IL_06c4: ldarg.0 IL_06c5: ldstr "1.2.840.10045.4.3.3" IL_06ca: call "bool string.op_Equality(string, string)" IL_06cf: brtrue IL_0e93 IL_06d4: br IL_124c IL_06d9: ldarg.0 IL_06da: ldstr "1.2.840.10045.4.3.4" IL_06df: call "bool string.op_Equality(string, string)" IL_06e4: brtrue IL_0e9e IL_06e9: br IL_124c IL_06ee: ldarg.0 IL_06ef: ldstr "1.2.840.113549.1.1.1" IL_06f4: call "bool string.op_Equality(string, string)" IL_06f9: brtrue IL_0ea9 IL_06fe: br IL_124c IL_0703: ldarg.0 IL_0704: ldstr "1.2.840.113549.1.1.5" IL_0709: call "bool string.op_Equality(string, string)" IL_070e: brtrue IL_0eb4 IL_0713: br IL_124c IL_0718: ldarg.0 IL_0719: ldstr "1.2.840.113549.1.1.7" IL_071e: call "bool string.op_Equality(string, string)" IL_0723: brtrue IL_0ebf IL_0728: br IL_124c IL_072d: ldarg.0 IL_072e: ldstr "1.2.840.113549.1.1.8" IL_0733: call "bool string.op_Equality(string, string)" IL_0738: brtrue IL_0eca IL_073d: br IL_124c IL_0742: ldarg.0 IL_0743: ldstr "1.2.840.113549.1.1.9" IL_0748: call "bool string.op_Equality(string, string)" IL_074d: brtrue IL_0ed5 IL_0752: br IL_124c IL_0757: ldarg.0 IL_0758: ldstr "1.2.840.113549.1.1.10" IL_075d: call "bool string.op_Equality(string, string)" IL_0762: brtrue IL_0ee0 IL_0767: br IL_124c IL_076c: ldarg.0 IL_076d: ldstr "1.2.840.113549.1.1.11" IL_0772: call "bool string.op_Equality(string, string)" IL_0777: brtrue IL_0eeb IL_077c: br IL_124c IL_0781: ldarg.0 IL_0782: ldstr "1.2.840.113549.1.1.12" IL_0787: call "bool string.op_Equality(string, string)" IL_078c: brtrue IL_0ef6 IL_0791: br IL_124c IL_0796: ldarg.0 IL_0797: ldstr "1.2.840.113549.1.1.13" IL_079c: call "bool string.op_Equality(string, string)" IL_07a1: brtrue IL_0f01 IL_07a6: br IL_124c IL_07ab: ldarg.0 IL_07ac: ldstr "1.2.840.113549.1.5.3" IL_07b1: call "bool string.op_Equality(string, string)" IL_07b6: brtrue IL_0f0c IL_07bb: br IL_124c IL_07c0: ldarg.0 IL_07c1: ldstr "1.2.840.113549.1.5.10" IL_07c6: call "bool string.op_Equality(string, string)" IL_07cb: brtrue IL_0f17 IL_07d0: br IL_124c IL_07d5: ldarg.0 IL_07d6: ldstr "1.2.840.113549.1.5.11" IL_07db: call "bool string.op_Equality(string, string)" IL_07e0: brtrue IL_0f22 IL_07e5: br IL_124c IL_07ea: ldarg.0 IL_07eb: ldstr "1.2.840.113549.1.5.12" IL_07f0: call "bool string.op_Equality(string, string)" IL_07f5: brtrue IL_0f2d IL_07fa: br IL_124c IL_07ff: ldarg.0 IL_0800: ldstr "1.2.840.113549.1.5.13" IL_0805: call "bool string.op_Equality(string, string)" IL_080a: brtrue IL_0f38 IL_080f: br IL_124c IL_0814: ldarg.0 IL_0815: ldstr "1.2.840.113549.1.7.1" IL_081a: call "bool string.op_Equality(string, string)" IL_081f: brtrue IL_0f43 IL_0824: br IL_124c IL_0829: ldarg.0 IL_082a: ldstr "1.2.840.113549.1.7.2" IL_082f: call "bool string.op_Equality(string, string)" IL_0834: brtrue IL_0f4e IL_0839: br IL_124c IL_083e: ldarg.0 IL_083f: ldstr "1.2.840.113549.1.7.3" IL_0844: call "bool string.op_Equality(string, string)" IL_0849: brtrue IL_0f59 IL_084e: br IL_124c IL_0853: ldarg.0 IL_0854: ldstr "1.2.840.113549.1.7.6" IL_0859: call "bool string.op_Equality(string, string)" IL_085e: brtrue IL_0f64 IL_0863: br IL_124c IL_0868: ldarg.0 IL_0869: ldstr "1.2.840.113549.1.9.1" IL_086e: call "bool string.op_Equality(string, string)" IL_0873: brtrue IL_0f6f IL_0878: br IL_124c IL_087d: ldarg.0 IL_087e: ldstr "1.2.840.113549.1.9.3" IL_0883: call "bool string.op_Equality(string, string)" IL_0888: brtrue IL_0f7a IL_088d: br IL_124c IL_0892: ldarg.0 IL_0893: ldstr "1.2.840.113549.1.9.4" IL_0898: call "bool string.op_Equality(string, string)" IL_089d: brtrue IL_0f85 IL_08a2: br IL_124c IL_08a7: ldarg.0 IL_08a8: ldstr "1.2.840.113549.1.9.5" IL_08ad: call "bool string.op_Equality(string, string)" IL_08b2: brtrue IL_0f90 IL_08b7: br IL_124c IL_08bc: ldarg.0 IL_08bd: ldstr "1.2.840.113549.1.9.6" IL_08c2: call "bool string.op_Equality(string, string)" IL_08c7: brtrue IL_0f9b IL_08cc: br IL_124c IL_08d1: ldarg.0 IL_08d2: ldstr "1.2.840.113549.1.9.7" IL_08d7: call "bool string.op_Equality(string, string)" IL_08dc: brtrue IL_0fa6 IL_08e1: br IL_124c IL_08e6: ldarg.0 IL_08e7: ldstr "1.2.840.113549.1.9.14" IL_08ec: call "bool string.op_Equality(string, string)" IL_08f1: brtrue IL_0fb1 IL_08f6: br IL_124c IL_08fb: ldarg.0 IL_08fc: ldstr "1.2.840.113549.1.9.15" IL_0901: call "bool string.op_Equality(string, string)" IL_0906: brtrue IL_0fbc IL_090b: br IL_124c IL_0910: ldarg.0 IL_0911: ldstr "1.2.840.113549.1.9.16.1.4" IL_0916: call "bool string.op_Equality(string, string)" IL_091b: brtrue IL_0fc7 IL_0920: br IL_124c IL_0925: ldarg.0 IL_0926: ldstr "1.2.840.113549.1.9.16.2.12" IL_092b: call "bool string.op_Equality(string, string)" IL_0930: brtrue IL_0fd2 IL_0935: br IL_124c IL_093a: ldarg.0 IL_093b: ldstr "1.2.840.113549.1.9.16.2.14" IL_0940: call "bool string.op_Equality(string, string)" IL_0945: brtrue IL_0fdd IL_094a: br IL_124c IL_094f: ldarg.0 IL_0950: ldstr "1.2.840.113549.1.9.16.2.47" IL_0955: call "bool string.op_Equality(string, string)" IL_095a: brtrue IL_0fe8 IL_095f: br IL_124c IL_0964: ldarg.0 IL_0965: ldstr "1.2.840.113549.1.9.20" IL_096a: call "bool string.op_Equality(string, string)" IL_096f: brtrue IL_0ff3 IL_0974: br IL_124c IL_0979: ldarg.0 IL_097a: ldstr "1.2.840.113549.1.9.21" IL_097f: call "bool string.op_Equality(string, string)" IL_0984: brtrue IL_0ffe IL_0989: br IL_124c IL_098e: ldarg.0 IL_098f: ldstr "1.2.840.113549.1.9.22.1" IL_0994: call "bool string.op_Equality(string, string)" IL_0999: brtrue IL_1009 IL_099e: br IL_124c IL_09a3: ldarg.0 IL_09a4: ldstr "1.2.840.113549.1.12.1.3" IL_09a9: call "bool string.op_Equality(string, string)" IL_09ae: brtrue IL_1014 IL_09b3: br IL_124c IL_09b8: ldarg.0 IL_09b9: ldstr "1.2.840.113549.1.12.1.5" IL_09be: call "bool string.op_Equality(string, string)" IL_09c3: brtrue IL_101f IL_09c8: br IL_124c IL_09cd: ldarg.0 IL_09ce: ldstr "1.2.840.113549.1.12.1.6" IL_09d3: call "bool string.op_Equality(string, string)" IL_09d8: brtrue IL_102a IL_09dd: br IL_124c IL_09e2: ldarg.0 IL_09e3: ldstr "1.2.840.113549.1.12.10.1.1" IL_09e8: call "bool string.op_Equality(string, string)" IL_09ed: brtrue IL_1035 IL_09f2: br IL_124c IL_09f7: ldarg.0 IL_09f8: ldstr "1.2.840.113549.1.12.10.1.2" IL_09fd: call "bool string.op_Equality(string, string)" IL_0a02: brtrue IL_1040 IL_0a07: br IL_124c IL_0a0c: ldarg.0 IL_0a0d: ldstr "1.2.840.113549.1.12.10.1.3" IL_0a12: call "bool string.op_Equality(string, string)" IL_0a17: brtrue IL_104b IL_0a1c: br IL_124c IL_0a21: ldarg.0 IL_0a22: ldstr "1.2.840.113549.1.12.10.1.5" IL_0a27: call "bool string.op_Equality(string, string)" IL_0a2c: brtrue IL_1056 IL_0a31: br IL_124c IL_0a36: ldarg.0 IL_0a37: ldstr "1.2.840.113549.1.12.10.1.6" IL_0a3c: call "bool string.op_Equality(string, string)" IL_0a41: brtrue IL_1061 IL_0a46: br IL_124c IL_0a4b: ldarg.0 IL_0a4c: ldstr "1.2.840.113549.2.5" IL_0a51: call "bool string.op_Equality(string, string)" IL_0a56: brtrue IL_106c IL_0a5b: br IL_124c IL_0a60: ldarg.0 IL_0a61: ldstr "1.2.840.113549.2.7" IL_0a66: call "bool string.op_Equality(string, string)" IL_0a6b: brtrue IL_1077 IL_0a70: br IL_124c IL_0a75: ldarg.0 IL_0a76: ldstr "1.2.840.113549.2.9" IL_0a7b: call "bool string.op_Equality(string, string)" IL_0a80: brtrue IL_1082 IL_0a85: br IL_124c IL_0a8a: ldarg.0 IL_0a8b: ldstr "1.2.840.113549.2.10" IL_0a90: call "bool string.op_Equality(string, string)" IL_0a95: brtrue IL_108d IL_0a9a: br IL_124c IL_0a9f: ldarg.0 IL_0aa0: ldstr "1.2.840.113549.2.11" IL_0aa5: call "bool string.op_Equality(string, string)" IL_0aaa: brtrue IL_1098 IL_0aaf: br IL_124c IL_0ab4: ldarg.0 IL_0ab5: ldstr "1.2.840.113549.3.2" IL_0aba: call "bool string.op_Equality(string, string)" IL_0abf: brtrue IL_10a3 IL_0ac4: br IL_124c IL_0ac9: ldarg.0 IL_0aca: ldstr "1.2.840.113549.3.7" IL_0acf: call "bool string.op_Equality(string, string)" IL_0ad4: brtrue IL_10ae IL_0ad9: br IL_124c IL_0ade: ldarg.0 IL_0adf: ldstr "1.3.6.1.4.1.311.17.1" IL_0ae4: call "bool string.op_Equality(string, string)" IL_0ae9: brtrue IL_10b9 IL_0aee: br IL_124c IL_0af3: ldarg.0 IL_0af4: ldstr "1.3.6.1.4.1.311.17.3.20" IL_0af9: call "bool string.op_Equality(string, string)" IL_0afe: brtrue IL_10c4 IL_0b03: br IL_124c IL_0b08: ldarg.0 IL_0b09: ldstr "1.3.6.1.4.1.311.20.2.3" IL_0b0e: call "bool string.op_Equality(string, string)" IL_0b13: brtrue IL_10cf IL_0b18: br IL_124c IL_0b1d: ldarg.0 IL_0b1e: ldstr "1.3.6.1.4.1.311.88.2.1" IL_0b23: call "bool string.op_Equality(string, string)" IL_0b28: brtrue IL_10da IL_0b2d: br IL_124c IL_0b32: ldarg.0 IL_0b33: ldstr "1.3.6.1.4.1.311.88.2.2" IL_0b38: call "bool string.op_Equality(string, string)" IL_0b3d: brtrue IL_10e5 IL_0b42: br IL_124c IL_0b47: ldarg.0 IL_0b48: ldstr "1.3.6.1.5.5.7.3.1" IL_0b4d: call "bool string.op_Equality(string, string)" IL_0b52: brtrue IL_10f0 IL_0b57: br IL_124c IL_0b5c: ldarg.0 IL_0b5d: ldstr "1.3.6.1.5.5.7.3.2" IL_0b62: call "bool string.op_Equality(string, string)" IL_0b67: brtrue IL_10fb IL_0b6c: br IL_124c IL_0b71: ldarg.0 IL_0b72: ldstr "1.3.6.1.5.5.7.3.3" IL_0b77: call "bool string.op_Equality(string, string)" IL_0b7c: brtrue IL_1106 IL_0b81: br IL_124c IL_0b86: ldarg.0 IL_0b87: ldstr "1.3.6.1.5.5.7.3.4" IL_0b8c: call "bool string.op_Equality(string, string)" IL_0b91: brtrue IL_1111 IL_0b96: br IL_124c IL_0b9b: ldarg.0 IL_0b9c: ldstr "1.3.6.1.5.5.7.3.8" IL_0ba1: call "bool string.op_Equality(string, string)" IL_0ba6: brtrue IL_111c IL_0bab: br IL_124c IL_0bb0: ldarg.0 IL_0bb1: ldstr "1.3.6.1.5.5.7.3.9" IL_0bb6: call "bool string.op_Equality(string, string)" IL_0bbb: brtrue IL_1127 IL_0bc0: br IL_124c IL_0bc5: ldarg.0 IL_0bc6: ldstr "1.3.6.1.5.5.7.6.2" IL_0bcb: call "bool string.op_Equality(string, string)" IL_0bd0: brtrue IL_1132 IL_0bd5: br IL_124c IL_0bda: ldarg.0 IL_0bdb: ldstr "1.3.6.1.5.5.7.48.1" IL_0be0: call "bool string.op_Equality(string, string)" IL_0be5: brtrue IL_113d IL_0bea: br IL_124c IL_0bef: ldarg.0 IL_0bf0: ldstr "1.3.6.1.5.5.7.48.1.2" IL_0bf5: call "bool string.op_Equality(string, string)" IL_0bfa: brtrue IL_1148 IL_0bff: br IL_124c IL_0c04: ldarg.0 IL_0c05: ldstr "1.3.6.1.5.5.7.48.2" IL_0c0a: call "bool string.op_Equality(string, string)" IL_0c0f: brtrue IL_1153 IL_0c14: br IL_124c IL_0c19: ldarg.0 IL_0c1a: ldstr "1.3.14.3.2.26" IL_0c1f: call "bool string.op_Equality(string, string)" IL_0c24: brtrue IL_115e IL_0c29: br IL_124c IL_0c2e: ldarg.0 IL_0c2f: ldstr "1.3.14.3.2.7" IL_0c34: call "bool string.op_Equality(string, string)" IL_0c39: brtrue IL_1169 IL_0c3e: br IL_124c IL_0c43: ldarg.0 IL_0c44: ldstr "1.3.132.0.34" IL_0c49: call "bool string.op_Equality(string, string)" IL_0c4e: brtrue IL_1174 IL_0c53: br IL_124c IL_0c58: ldarg.0 IL_0c59: ldstr "1.3.132.0.35" IL_0c5e: call "bool string.op_Equality(string, string)" IL_0c63: brtrue IL_117f IL_0c68: br IL_124c IL_0c6d: ldarg.0 IL_0c6e: ldstr "2.5.4.3" IL_0c73: call "bool string.op_Equality(string, string)" IL_0c78: brtrue IL_118a IL_0c7d: br IL_124c IL_0c82: ldarg.0 IL_0c83: ldstr "2.5.4.5" IL_0c88: call "bool string.op_Equality(string, string)" IL_0c8d: brtrue IL_1195 IL_0c92: br IL_124c IL_0c97: ldarg.0 IL_0c98: ldstr "2.5.4.6" IL_0c9d: call "bool string.op_Equality(string, string)" IL_0ca2: brtrue IL_11a0 IL_0ca7: br IL_124c IL_0cac: ldarg.0 IL_0cad: ldstr "2.5.4.7" IL_0cb2: call "bool string.op_Equality(string, string)" IL_0cb7: brtrue IL_11ab IL_0cbc: br IL_124c IL_0cc1: ldarg.0 IL_0cc2: ldstr "2.5.4.8" IL_0cc7: call "bool string.op_Equality(string, string)" IL_0ccc: brtrue IL_11b6 IL_0cd1: br IL_124c IL_0cd6: ldarg.0 IL_0cd7: ldstr "2.5.4.10" IL_0cdc: call "bool string.op_Equality(string, string)" IL_0ce1: brtrue IL_11c1 IL_0ce6: br IL_124c IL_0ceb: ldarg.0 IL_0cec: ldstr "2.5.4.11" IL_0cf1: call "bool string.op_Equality(string, string)" IL_0cf6: brtrue IL_11cc IL_0cfb: br IL_124c IL_0d00: ldarg.0 IL_0d01: ldstr "2.5.4.97" IL_0d06: call "bool string.op_Equality(string, string)" IL_0d0b: brtrue IL_11d4 IL_0d10: br IL_124c IL_0d15: ldarg.0 IL_0d16: ldstr "2.5.29.14" IL_0d1b: call "bool string.op_Equality(string, string)" IL_0d20: brtrue IL_11dc IL_0d25: br IL_124c IL_0d2a: ldarg.0 IL_0d2b: ldstr "2.5.29.15" IL_0d30: call "bool string.op_Equality(string, string)" IL_0d35: brtrue IL_11e4 IL_0d3a: br IL_124c IL_0d3f: ldarg.0 IL_0d40: ldstr "2.5.29.17" IL_0d45: call "bool string.op_Equality(string, string)" IL_0d4a: brtrue IL_11ec IL_0d4f: br IL_124c IL_0d54: ldarg.0 IL_0d55: ldstr "2.5.29.19" IL_0d5a: call "bool string.op_Equality(string, string)" IL_0d5f: brtrue IL_11f4 IL_0d64: br IL_124c IL_0d69: ldarg.0 IL_0d6a: ldstr "2.5.29.20" IL_0d6f: call "bool string.op_Equality(string, string)" IL_0d74: brtrue IL_11fc IL_0d79: br IL_124c IL_0d7e: ldarg.0 IL_0d7f: ldstr "2.5.29.35" IL_0d84: call "bool string.op_Equality(string, string)" IL_0d89: brtrue IL_1204 IL_0d8e: br IL_124c IL_0d93: ldarg.0 IL_0d94: ldstr "2.16.840.1.101.3.4.1.2" IL_0d99: call "bool string.op_Equality(string, string)" IL_0d9e: brtrue IL_120c IL_0da3: br IL_124c IL_0da8: ldarg.0 IL_0da9: ldstr "2.16.840.1.101.3.4.1.22" IL_0dae: call "bool string.op_Equality(string, string)" IL_0db3: brtrue IL_1214 IL_0db8: br IL_124c IL_0dbd: ldarg.0 IL_0dbe: ldstr "2.16.840.1.101.3.4.1.42" IL_0dc3: call "bool string.op_Equality(string, string)" IL_0dc8: brtrue IL_121c IL_0dcd: br IL_124c IL_0dd2: ldarg.0 IL_0dd3: ldstr "2.16.840.1.101.3.4.2.1" IL_0dd8: call "bool string.op_Equality(string, string)" IL_0ddd: brtrue IL_1224 IL_0de2: br IL_124c IL_0de7: ldarg.0 IL_0de8: ldstr "2.16.840.1.101.3.4.2.2" IL_0ded: call "bool string.op_Equality(string, string)" IL_0df2: brtrue IL_122c IL_0df7: br IL_124c IL_0dfc: ldarg.0 IL_0dfd: ldstr "2.16.840.1.101.3.4.2.3" IL_0e02: call "bool string.op_Equality(string, string)" IL_0e07: brtrue IL_1234 IL_0e0c: br IL_124c IL_0e11: ldarg.0 IL_0e12: ldstr "2.23.140.1.2.1" IL_0e17: call "bool string.op_Equality(string, string)" IL_0e1c: brtrue IL_123c IL_0e21: br IL_124c IL_0e26: ldarg.0 IL_0e27: ldstr "2.23.140.1.2.2" IL_0e2c: call "bool string.op_Equality(string, string)" IL_0e31: brtrue IL_1244 IL_0e36: br IL_124c IL_0e3b: ldstr "1.2.840.10040.4.1" IL_0e40: stloc.0 IL_0e41: br IL_1252 IL_0e46: ldstr "1.2.840.10040.4.3" IL_0e4b: stloc.0 IL_0e4c: br IL_1252 IL_0e51: ldstr "1.2.840.10045.2.1" IL_0e56: stloc.0 IL_0e57: br IL_1252 IL_0e5c: ldstr "1.2.840.10045.1.1" IL_0e61: stloc.0 IL_0e62: br IL_1252 IL_0e67: ldstr "1.2.840.10045.1.2" IL_0e6c: stloc.0 IL_0e6d: br IL_1252 IL_0e72: ldstr "1.2.840.10045.3.1.7" IL_0e77: stloc.0 IL_0e78: br IL_1252 IL_0e7d: ldstr "1.2.840.10045.4.1" IL_0e82: stloc.0 IL_0e83: br IL_1252 IL_0e88: ldstr "1.2.840.10045.4.3.2" IL_0e8d: stloc.0 IL_0e8e: br IL_1252 IL_0e93: ldstr "1.2.840.10045.4.3.3" IL_0e98: stloc.0 IL_0e99: br IL_1252 IL_0e9e: ldstr "1.2.840.10045.4.3.4" IL_0ea3: stloc.0 IL_0ea4: br IL_1252 IL_0ea9: ldstr "1.2.840.113549.1.1.1" IL_0eae: stloc.0 IL_0eaf: br IL_1252 IL_0eb4: ldstr "1.2.840.113549.1.1.5" IL_0eb9: stloc.0 IL_0eba: br IL_1252 IL_0ebf: ldstr "1.2.840.113549.1.1.7" IL_0ec4: stloc.0 IL_0ec5: br IL_1252 IL_0eca: ldstr "1.2.840.113549.1.1.8" IL_0ecf: stloc.0 IL_0ed0: br IL_1252 IL_0ed5: ldstr "1.2.840.113549.1.1.9" IL_0eda: stloc.0 IL_0edb: br IL_1252 IL_0ee0: ldstr "1.2.840.113549.1.1.10" IL_0ee5: stloc.0 IL_0ee6: br IL_1252 IL_0eeb: ldstr "1.2.840.113549.1.1.11" IL_0ef0: stloc.0 IL_0ef1: br IL_1252 IL_0ef6: ldstr "1.2.840.113549.1.1.12" IL_0efb: stloc.0 IL_0efc: br IL_1252 IL_0f01: ldstr "1.2.840.113549.1.1.13" IL_0f06: stloc.0 IL_0f07: br IL_1252 IL_0f0c: ldstr "1.2.840.113549.1.5.3" IL_0f11: stloc.0 IL_0f12: br IL_1252 IL_0f17: ldstr "1.2.840.113549.1.5.10" IL_0f1c: stloc.0 IL_0f1d: br IL_1252 IL_0f22: ldstr "1.2.840.113549.1.5.11" IL_0f27: stloc.0 IL_0f28: br IL_1252 IL_0f2d: ldstr "1.2.840.113549.1.5.12" IL_0f32: stloc.0 IL_0f33: br IL_1252 IL_0f38: ldstr "1.2.840.113549.1.5.13" IL_0f3d: stloc.0 IL_0f3e: br IL_1252 IL_0f43: ldstr "1.2.840.113549.1.7.1" IL_0f48: stloc.0 IL_0f49: br IL_1252 IL_0f4e: ldstr "1.2.840.113549.1.7.2" IL_0f53: stloc.0 IL_0f54: br IL_1252 IL_0f59: ldstr "1.2.840.113549.1.7.3" IL_0f5e: stloc.0 IL_0f5f: br IL_1252 IL_0f64: ldstr "1.2.840.113549.1.7.6" IL_0f69: stloc.0 IL_0f6a: br IL_1252 IL_0f6f: ldstr "1.2.840.113549.1.9.1" IL_0f74: stloc.0 IL_0f75: br IL_1252 IL_0f7a: ldstr "1.2.840.113549.1.9.3" IL_0f7f: stloc.0 IL_0f80: br IL_1252 IL_0f85: ldstr "1.2.840.113549.1.9.4" IL_0f8a: stloc.0 IL_0f8b: br IL_1252 IL_0f90: ldstr "1.2.840.113549.1.9.5" IL_0f95: stloc.0 IL_0f96: br IL_1252 IL_0f9b: ldstr "1.2.840.113549.1.9.6" IL_0fa0: stloc.0 IL_0fa1: br IL_1252 IL_0fa6: ldstr "1.2.840.113549.1.9.7" IL_0fab: stloc.0 IL_0fac: br IL_1252 IL_0fb1: ldstr "1.2.840.113549.1.9.14" IL_0fb6: stloc.0 IL_0fb7: br IL_1252 IL_0fbc: ldstr "1.2.840.113549.1.9.15" IL_0fc1: stloc.0 IL_0fc2: br IL_1252 IL_0fc7: ldstr "1.2.840.113549.1.9.16.1.4" IL_0fcc: stloc.0 IL_0fcd: br IL_1252 IL_0fd2: ldstr "1.2.840.113549.1.9.16.2.12" IL_0fd7: stloc.0 IL_0fd8: br IL_1252 IL_0fdd: ldstr "1.2.840.113549.1.9.16.2.14" IL_0fe2: stloc.0 IL_0fe3: br IL_1252 IL_0fe8: ldstr "1.2.840.113549.1.9.16.2.47" IL_0fed: stloc.0 IL_0fee: br IL_1252 IL_0ff3: ldstr "1.2.840.113549.1.9.20" IL_0ff8: stloc.0 IL_0ff9: br IL_1252 IL_0ffe: ldstr "1.2.840.113549.1.9.21" IL_1003: stloc.0 IL_1004: br IL_1252 IL_1009: ldstr "1.2.840.113549.1.9.22.1" IL_100e: stloc.0 IL_100f: br IL_1252 IL_1014: ldstr "1.2.840.113549.1.12.1.3" IL_1019: stloc.0 IL_101a: br IL_1252 IL_101f: ldstr "1.2.840.113549.1.12.1.5" IL_1024: stloc.0 IL_1025: br IL_1252 IL_102a: ldstr "1.2.840.113549.1.12.1.6" IL_102f: stloc.0 IL_1030: br IL_1252 IL_1035: ldstr "1.2.840.113549.1.12.10.1.1" IL_103a: stloc.0 IL_103b: br IL_1252 IL_1040: ldstr "1.2.840.113549.1.12.10.1.2" IL_1045: stloc.0 IL_1046: br IL_1252 IL_104b: ldstr "1.2.840.113549.1.12.10.1.3" IL_1050: stloc.0 IL_1051: br IL_1252 IL_1056: ldstr "1.2.840.113549.1.12.10.1.5" IL_105b: stloc.0 IL_105c: br IL_1252 IL_1061: ldstr "1.2.840.113549.1.12.10.1.6" IL_1066: stloc.0 IL_1067: br IL_1252 IL_106c: ldstr "1.2.840.113549.2.5" IL_1071: stloc.0 IL_1072: br IL_1252 IL_1077: ldstr "1.2.840.113549.2.7" IL_107c: stloc.0 IL_107d: br IL_1252 IL_1082: ldstr "1.2.840.113549.2.9" IL_1087: stloc.0 IL_1088: br IL_1252 IL_108d: ldstr "1.2.840.113549.2.10" IL_1092: stloc.0 IL_1093: br IL_1252 IL_1098: ldstr "1.2.840.113549.2.11" IL_109d: stloc.0 IL_109e: br IL_1252 IL_10a3: ldstr "1.2.840.113549.3.2" IL_10a8: stloc.0 IL_10a9: br IL_1252 IL_10ae: ldstr "1.2.840.113549.3.7" IL_10b3: stloc.0 IL_10b4: br IL_1252 IL_10b9: ldstr "1.3.6.1.4.1.311.17.1" IL_10be: stloc.0 IL_10bf: br IL_1252 IL_10c4: ldstr "1.3.6.1.4.1.311.17.3.20" IL_10c9: stloc.0 IL_10ca: br IL_1252 IL_10cf: ldstr "1.3.6.1.4.1.311.20.2.3" IL_10d4: stloc.0 IL_10d5: br IL_1252 IL_10da: ldstr "1.3.6.1.4.1.311.88.2.1" IL_10df: stloc.0 IL_10e0: br IL_1252 IL_10e5: ldstr "1.3.6.1.4.1.311.88.2.2" IL_10ea: stloc.0 IL_10eb: br IL_1252 IL_10f0: ldstr "1.3.6.1.5.5.7.3.1" IL_10f5: stloc.0 IL_10f6: br IL_1252 IL_10fb: ldstr "1.3.6.1.5.5.7.3.2" IL_1100: stloc.0 IL_1101: br IL_1252 IL_1106: ldstr "1.3.6.1.5.5.7.3.3" IL_110b: stloc.0 IL_110c: br IL_1252 IL_1111: ldstr "1.3.6.1.5.5.7.3.4" IL_1116: stloc.0 IL_1117: br IL_1252 IL_111c: ldstr "1.3.6.1.5.5.7.3.8" IL_1121: stloc.0 IL_1122: br IL_1252 IL_1127: ldstr "1.3.6.1.5.5.7.3.9" IL_112c: stloc.0 IL_112d: br IL_1252 IL_1132: ldstr "1.3.6.1.5.5.7.6.2" IL_1137: stloc.0 IL_1138: br IL_1252 IL_113d: ldstr "1.3.6.1.5.5.7.48.1" IL_1142: stloc.0 IL_1143: br IL_1252 IL_1148: ldstr "1.3.6.1.5.5.7.48.1.2" IL_114d: stloc.0 IL_114e: br IL_1252 IL_1153: ldstr "1.3.6.1.5.5.7.48.2" IL_1158: stloc.0 IL_1159: br IL_1252 IL_115e: ldstr "1.3.14.3.2.26" IL_1163: stloc.0 IL_1164: br IL_1252 IL_1169: ldstr "1.3.14.3.2.7" IL_116e: stloc.0 IL_116f: br IL_1252 IL_1174: ldstr "1.3.132.0.34" IL_1179: stloc.0 IL_117a: br IL_1252 IL_117f: ldstr "1.3.132.0.35" IL_1184: stloc.0 IL_1185: br IL_1252 IL_118a: ldstr "2.5.4.3" IL_118f: stloc.0 IL_1190: br IL_1252 IL_1195: ldstr "2.5.4.5" IL_119a: stloc.0 IL_119b: br IL_1252 IL_11a0: ldstr "2.5.4.6" IL_11a5: stloc.0 IL_11a6: br IL_1252 IL_11ab: ldstr "2.5.4.7" IL_11b0: stloc.0 IL_11b1: br IL_1252 IL_11b6: ldstr "2.5.4.8" IL_11bb: stloc.0 IL_11bc: br IL_1252 IL_11c1: ldstr "2.5.4.10" IL_11c6: stloc.0 IL_11c7: br IL_1252 IL_11cc: ldstr "2.5.4.11" IL_11d1: stloc.0 IL_11d2: br.s IL_1252 IL_11d4: ldstr "2.5.4.97" IL_11d9: stloc.0 IL_11da: br.s IL_1252 IL_11dc: ldstr "2.5.29.14" IL_11e1: stloc.0 IL_11e2: br.s IL_1252 IL_11e4: ldstr "2.5.29.15" IL_11e9: stloc.0 IL_11ea: br.s IL_1252 IL_11ec: ldstr "2.5.29.17" IL_11f1: stloc.0 IL_11f2: br.s IL_1252 IL_11f4: ldstr "2.5.29.19" IL_11f9: stloc.0 IL_11fa: br.s IL_1252 IL_11fc: ldstr "2.5.29.20" IL_1201: stloc.0 IL_1202: br.s IL_1252 IL_1204: ldstr "2.5.29.35" IL_1209: stloc.0 IL_120a: br.s IL_1252 IL_120c: ldstr "2.16.840.1.101.3.4.1.2" IL_1211: stloc.0 IL_1212: br.s IL_1252 IL_1214: ldstr "2.16.840.1.101.3.4.1.22" IL_1219: stloc.0 IL_121a: br.s IL_1252 IL_121c: ldstr "2.16.840.1.101.3.4.1.42" IL_1221: stloc.0 IL_1222: br.s IL_1252 IL_1224: ldstr "2.16.840.1.101.3.4.2.1" IL_1229: stloc.0 IL_122a: br.s IL_1252 IL_122c: ldstr "2.16.840.1.101.3.4.2.2" IL_1231: stloc.0 IL_1232: br.s IL_1252 IL_1234: ldstr "2.16.840.1.101.3.4.2.3" IL_1239: stloc.0 IL_123a: br.s IL_1252 IL_123c: ldstr "2.23.140.1.2.1" IL_1241: stloc.0 IL_1242: br.s IL_1252 IL_1244: ldstr "2.23.140.1.2.2" IL_1249: stloc.0 IL_124a: br.s IL_1252 IL_124c: ldstr "default" IL_1251: stloc.0 IL_1252: ldloc.0 IL_1253: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void TryParseStatusFile() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/Common/src/Interop/Linux/procfs/Interop.ProcFsStat.TryReadStatusFile.cs#L66-L102 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("Pid"); assert("VmHWM"); assert("VmRSS"); assert("VmData"); assert("VmSwap"); assert("VmSize"); assert("VmPeak"); assert("VmStk"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "Pid" => "Pid", "VmHWM" => "VmHWM", "VmRSS" => "VmRSS", "VmData" => "VmData", "VmSwap" => "VmSwap", "VmSize" => "VmSize", "VmPeak" => "VmPeak", "VmStk" => "VmStk", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 317 (0x13d) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_0135 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.3 IL_000f: sub IL_0010: switch ( IL_0074, IL_0135, IL_002a, IL_0046) IL_0025: br IL_0135 IL_002a: ldarg.0 IL_002b: ldc.i4.2 IL_002c: call "char string.this[int].get" IL_0031: stloc.2 IL_0032: ldloc.2 IL_0033: ldc.i4.s 72 IL_0035: beq.s IL_0086 IL_0037: ldloc.2 IL_0038: ldc.i4.s 82 IL_003a: beq.s IL_0098 IL_003c: ldloc.2 IL_003d: ldc.i4.s 83 IL_003f: beq.s IL_00aa IL_0041: br IL_0135 IL_0046: ldarg.0 IL_0047: ldc.i4.3 IL_0048: call "char string.this[int].get" IL_004d: stloc.2 IL_004e: ldloc.2 IL_004f: ldc.i4.s 101 IL_0051: bgt.un.s IL_0065 IL_0053: ldloc.2 IL_0054: ldc.i4.s 97 IL_0056: beq.s IL_00b9 IL_0058: ldloc.2 IL_0059: ldc.i4.s 101 IL_005b: beq IL_00e6 IL_0060: br IL_0135 IL_0065: ldloc.2 IL_0066: ldc.i4.s 105 IL_0068: beq.s IL_00d7 IL_006a: ldloc.2 IL_006b: ldc.i4.s 119 IL_006d: beq.s IL_00c8 IL_006f: br IL_0135 IL_0074: ldarg.0 IL_0075: ldstr "Pid" IL_007a: call "bool string.op_Equality(string, string)" IL_007f: brtrue.s IL_00f5 IL_0081: br IL_0135 IL_0086: ldarg.0 IL_0087: ldstr "VmHWM" IL_008c: call "bool string.op_Equality(string, string)" IL_0091: brtrue.s IL_00fd IL_0093: br IL_0135 IL_0098: ldarg.0 IL_0099: ldstr "VmRSS" IL_009e: call "bool string.op_Equality(string, string)" IL_00a3: brtrue.s IL_0105 IL_00a5: br IL_0135 IL_00aa: ldarg.0 IL_00ab: ldstr "VmStk" IL_00b0: call "bool string.op_Equality(string, string)" IL_00b5: brtrue.s IL_012d IL_00b7: br.s IL_0135 IL_00b9: ldarg.0 IL_00ba: ldstr "VmData" IL_00bf: call "bool string.op_Equality(string, string)" IL_00c4: brtrue.s IL_010d IL_00c6: br.s IL_0135 IL_00c8: ldarg.0 IL_00c9: ldstr "VmSwap" IL_00ce: call "bool string.op_Equality(string, string)" IL_00d3: brtrue.s IL_0115 IL_00d5: br.s IL_0135 IL_00d7: ldarg.0 IL_00d8: ldstr "VmSize" IL_00dd: call "bool string.op_Equality(string, string)" IL_00e2: brtrue.s IL_011d IL_00e4: br.s IL_0135 IL_00e6: ldarg.0 IL_00e7: ldstr "VmPeak" IL_00ec: call "bool string.op_Equality(string, string)" IL_00f1: brtrue.s IL_0125 IL_00f3: br.s IL_0135 IL_00f5: ldstr "Pid" IL_00fa: stloc.0 IL_00fb: br.s IL_013b IL_00fd: ldstr "VmHWM" IL_0102: stloc.0 IL_0103: br.s IL_013b IL_0105: ldstr "VmRSS" IL_010a: stloc.0 IL_010b: br.s IL_013b IL_010d: ldstr "VmData" IL_0112: stloc.0 IL_0113: br.s IL_013b IL_0115: ldstr "VmSwap" IL_011a: stloc.0 IL_011b: br.s IL_013b IL_011d: ldstr "VmSize" IL_0122: stloc.0 IL_0123: br.s IL_013b IL_0125: ldstr "VmPeak" IL_012a: stloc.0 IL_012b: br.s IL_013b IL_012d: ldstr "VmStk" IL_0132: stloc.0 IL_0133: br.s IL_013b IL_0135: ldstr "default" IL_013a: stloc.0 IL_013b: ldloc.0 IL_013c: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 322 (0x142) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x8979e177 IL_000d: bgt.un.s IL_0044 IL_000f: ldloc.1 IL_0010: ldc.i4 0x1defdbc8 IL_0015: bgt.un.s IL_002f IL_0017: ldloc.1 IL_0018: ldc.i4 0xd5b8205 IL_001d: beq IL_00cd IL_0022: ldloc.1 IL_0023: ldc.i4 0x1defdbc8 IL_0028: beq.s IL_009d IL_002a: br IL_013a IL_002f: ldloc.1 IL_0030: ldc.i4 0x364be934 IL_0035: beq.s IL_00af IL_0037: ldloc.1 IL_0038: ldc.i4 0x8979e177 IL_003d: beq.s IL_00be IL_003f: br IL_013a IL_0044: ldloc.1 IL_0045: ldc.i4 0xce4790c2 IL_004a: bgt.un.s IL_0064 IL_004c: ldloc.1 IL_004d: ldc.i4 0xb230f6f0 IL_0052: beq IL_00eb IL_0057: ldloc.1 IL_0058: ldc.i4 0xce4790c2 IL_005d: beq.s IL_0079 IL_005f: br IL_013a IL_0064: ldloc.1 IL_0065: ldc.i4 0xe840f3b7 IL_006a: beq.s IL_00dc IL_006c: ldloc.1 IL_006d: ldc.i4 0xf7948524 IL_0072: beq.s IL_008b IL_0074: br IL_013a IL_0079: ldarg.0 IL_007a: ldstr "Pid" IL_007f: call "bool string.op_Equality(string, string)" IL_0084: brtrue.s IL_00fa IL_0086: br IL_013a IL_008b: ldarg.0 IL_008c: ldstr "VmHWM" IL_0091: call "bool string.op_Equality(string, string)" IL_0096: brtrue.s IL_0102 IL_0098: br IL_013a IL_009d: ldarg.0 IL_009e: ldstr "VmRSS" IL_00a3: call "bool string.op_Equality(string, string)" IL_00a8: brtrue.s IL_010a IL_00aa: br IL_013a IL_00af: ldarg.0 IL_00b0: ldstr "VmData" IL_00b5: call "bool string.op_Equality(string, string)" IL_00ba: brtrue.s IL_0112 IL_00bc: br.s IL_013a IL_00be: ldarg.0 IL_00bf: ldstr "VmSwap" IL_00c4: call "bool string.op_Equality(string, string)" IL_00c9: brtrue.s IL_011a IL_00cb: br.s IL_013a IL_00cd: ldarg.0 IL_00ce: ldstr "VmSize" IL_00d3: call "bool string.op_Equality(string, string)" IL_00d8: brtrue.s IL_0122 IL_00da: br.s IL_013a IL_00dc: ldarg.0 IL_00dd: ldstr "VmPeak" IL_00e2: call "bool string.op_Equality(string, string)" IL_00e7: brtrue.s IL_012a IL_00e9: br.s IL_013a IL_00eb: ldarg.0 IL_00ec: ldstr "VmStk" IL_00f1: call "bool string.op_Equality(string, string)" IL_00f6: brtrue.s IL_0132 IL_00f8: br.s IL_013a IL_00fa: ldstr "Pid" IL_00ff: stloc.0 IL_0100: br.s IL_0140 IL_0102: ldstr "VmHWM" IL_0107: stloc.0 IL_0108: br.s IL_0140 IL_010a: ldstr "VmRSS" IL_010f: stloc.0 IL_0110: br.s IL_0140 IL_0112: ldstr "VmData" IL_0117: stloc.0 IL_0118: br.s IL_0140 IL_011a: ldstr "VmSwap" IL_011f: stloc.0 IL_0120: br.s IL_0140 IL_0122: ldstr "VmSize" IL_0127: stloc.0 IL_0128: br.s IL_0140 IL_012a: ldstr "VmPeak" IL_012f: stloc.0 IL_0130: br.s IL_0140 IL_0132: ldstr "VmStk" IL_0137: stloc.0 IL_0138: br.s IL_0140 IL_013a: ldstr "default" IL_013f: stloc.0 IL_0140: ldloc.0 IL_0141: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void GetHashForChannelBinding() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Net.Security/src/System/Net/Security/Pal.Managed/EndpointChannelBindingToken.cs#L31-L57 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("1.2.840.113549.2.5"); assert("1.2.840.113549.1.1.4"); assert("1.3.14.3.2.26"); assert("1.2.840.10040.4.3"); assert("1.2.840.10045.4.1"); assert("1.2.840.113549.1.1.5"); assert("2.16.840.1.101.3.4.2.1"); assert("1.2.840.10045.4.3.2"); assert("1.2.840.113549.1.1.11"); assert("2.16.840.1.101.3.4.2.2"); assert("1.2.840.10045.4.3.3"); assert("1.2.840.113549.1.1.12"); assert("2.16.840.1.101.3.4.2.3"); assert("1.2.840.10045.4.3.4"); assert("1.2.840.113549.1.1.13"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "1.2.840.113549.2.5" => "1.2.840.113549.2.5", "1.2.840.113549.1.1.4" => "1.2.840.113549.1.1.4", "1.3.14.3.2.26" => "1.3.14.3.2.26", "1.2.840.10040.4.3" => "1.2.840.10040.4.3", "1.2.840.10045.4.1" => "1.2.840.10045.4.1", "1.2.840.113549.1.1.5" => "1.2.840.113549.1.1.5", "2.16.840.1.101.3.4.2.1" => "2.16.840.1.101.3.4.2.1", "1.2.840.10045.4.3.2" => "1.2.840.10045.4.3.2", "1.2.840.113549.1.1.11" => "1.2.840.113549.1.1.11", "2.16.840.1.101.3.4.2.2" => "2.16.840.1.101.3.4.2.2", "1.2.840.10045.4.3.3" => "1.2.840.10045.4.3.3", "1.2.840.113549.1.1.12" => "1.2.840.113549.1.1.12", "2.16.840.1.101.3.4.2.3" => "2.16.840.1.101.3.4.2.3", "1.2.840.10045.4.3.4" => "1.2.840.10045.4.3.4", "1.2.840.113549.1.1.13" => "1.2.840.113549.1.1.13", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 663 (0x297) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_028f IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.s 13 IL_0010: sub IL_0011: switch ( IL_0127, IL_028f, IL_028f, IL_028f, IL_0061, IL_00e8, IL_00a2, IL_0043, IL_00c5, IL_007f) IL_003e: br IL_028f IL_0043: ldarg.0 IL_0044: ldc.i4.s 19 IL_0046: call "char string.this[int].get" IL_004b: stloc.2 IL_004c: ldloc.2 IL_004d: ldc.i4.s 52 IL_004f: beq IL_00fd IL_0054: ldloc.2 IL_0055: ldc.i4.s 53 IL_0057: beq IL_0112 IL_005c: br IL_028f IL_0061: ldarg.0 IL_0062: ldc.i4.s 12 IL_0064: call "char string.this[int].get" IL_0069: stloc.2 IL_006a: ldloc.2 IL_006b: ldc.i4.s 48 IL_006d: beq IL_013c IL_0072: ldloc.2 IL_0073: ldc.i4.s 53 IL_0075: beq IL_0151 IL_007a: br IL_028f IL_007f: ldarg.0 IL_0080: ldc.i4.s 21 IL_0082: call "char string.this[int].get" IL_0087: stloc.2 IL_0088: ldloc.2 IL_0089: ldc.i4.s 49 IL_008b: sub IL_008c: switch ( IL_0166, IL_017b, IL_0190) IL_009d: br IL_028f IL_00a2: ldarg.0 IL_00a3: ldc.i4.s 18 IL_00a5: call "char string.this[int].get" IL_00aa: stloc.2 IL_00ab: ldloc.2 IL_00ac: ldc.i4.s 50 IL_00ae: sub IL_00af: switch ( IL_01a5, IL_01ba, IL_01cf) IL_00c0: br IL_028f IL_00c5: ldarg.0 IL_00c6: ldc.i4.s 20 IL_00c8: call "char string.this[int].get" IL_00cd: stloc.2 IL_00ce: ldloc.2 IL_00cf: ldc.i4.s 49 IL_00d1: sub IL_00d2: switch ( IL_01e4, IL_01f6, IL_0208) IL_00e3: br IL_028f IL_00e8: ldarg.0 IL_00e9: ldstr "1.2.840.113549.2.5" IL_00ee: call "bool string.op_Equality(string, string)" IL_00f3: brtrue IL_0217 IL_00f8: br IL_028f IL_00fd: ldarg.0 IL_00fe: ldstr "1.2.840.113549.1.1.4" IL_0103: call "bool string.op_Equality(string, string)" IL_0108: brtrue IL_021f IL_010d: br IL_028f IL_0112: ldarg.0 IL_0113: ldstr "1.2.840.113549.1.1.5" IL_0118: call "bool string.op_Equality(string, string)" IL_011d: brtrue IL_023f IL_0122: br IL_028f IL_0127: ldarg.0 IL_0128: ldstr "1.3.14.3.2.26" IL_012d: call "bool string.op_Equality(string, string)" IL_0132: brtrue IL_0227 IL_0137: br IL_028f IL_013c: ldarg.0 IL_013d: ldstr "1.2.840.10040.4.3" IL_0142: call "bool string.op_Equality(string, string)" IL_0147: brtrue IL_022f IL_014c: br IL_028f IL_0151: ldarg.0 IL_0152: ldstr "1.2.840.10045.4.1" IL_0157: call "bool string.op_Equality(string, string)" IL_015c: brtrue IL_0237 IL_0161: br IL_028f IL_0166: ldarg.0 IL_0167: ldstr "2.16.840.1.101.3.4.2.1" IL_016c: call "bool string.op_Equality(string, string)" IL_0171: brtrue IL_0247 IL_0176: br IL_028f IL_017b: ldarg.0 IL_017c: ldstr "2.16.840.1.101.3.4.2.2" IL_0181: call "bool string.op_Equality(string, string)" IL_0186: brtrue IL_025f IL_018b: br IL_028f IL_0190: ldarg.0 IL_0191: ldstr "2.16.840.1.101.3.4.2.3" IL_0196: call "bool string.op_Equality(string, string)" IL_019b: brtrue IL_0277 IL_01a0: br IL_028f IL_01a5: ldarg.0 IL_01a6: ldstr "1.2.840.10045.4.3.2" IL_01ab: call "bool string.op_Equality(string, string)" IL_01b0: brtrue IL_024f IL_01b5: br IL_028f IL_01ba: ldarg.0 IL_01bb: ldstr "1.2.840.10045.4.3.3" IL_01c0: call "bool string.op_Equality(string, string)" IL_01c5: brtrue IL_0267 IL_01ca: br IL_028f IL_01cf: ldarg.0 IL_01d0: ldstr "1.2.840.10045.4.3.4" IL_01d5: call "bool string.op_Equality(string, string)" IL_01da: brtrue IL_027f IL_01df: br IL_028f IL_01e4: ldarg.0 IL_01e5: ldstr "1.2.840.113549.1.1.11" IL_01ea: call "bool string.op_Equality(string, string)" IL_01ef: brtrue.s IL_0257 IL_01f1: br IL_028f IL_01f6: ldarg.0 IL_01f7: ldstr "1.2.840.113549.1.1.12" IL_01fc: call "bool string.op_Equality(string, string)" IL_0201: brtrue.s IL_026f IL_0203: br IL_028f IL_0208: ldarg.0 IL_0209: ldstr "1.2.840.113549.1.1.13" IL_020e: call "bool string.op_Equality(string, string)" IL_0213: brtrue.s IL_0287 IL_0215: br.s IL_028f IL_0217: ldstr "1.2.840.113549.2.5" IL_021c: stloc.0 IL_021d: br.s IL_0295 IL_021f: ldstr "1.2.840.113549.1.1.4" IL_0224: stloc.0 IL_0225: br.s IL_0295 IL_0227: ldstr "1.3.14.3.2.26" IL_022c: stloc.0 IL_022d: br.s IL_0295 IL_022f: ldstr "1.2.840.10040.4.3" IL_0234: stloc.0 IL_0235: br.s IL_0295 IL_0237: ldstr "1.2.840.10045.4.1" IL_023c: stloc.0 IL_023d: br.s IL_0295 IL_023f: ldstr "1.2.840.113549.1.1.5" IL_0244: stloc.0 IL_0245: br.s IL_0295 IL_0247: ldstr "2.16.840.1.101.3.4.2.1" IL_024c: stloc.0 IL_024d: br.s IL_0295 IL_024f: ldstr "1.2.840.10045.4.3.2" IL_0254: stloc.0 IL_0255: br.s IL_0295 IL_0257: ldstr "1.2.840.113549.1.1.11" IL_025c: stloc.0 IL_025d: br.s IL_0295 IL_025f: ldstr "2.16.840.1.101.3.4.2.2" IL_0264: stloc.0 IL_0265: br.s IL_0295 IL_0267: ldstr "1.2.840.10045.4.3.3" IL_026c: stloc.0 IL_026d: br.s IL_0295 IL_026f: ldstr "1.2.840.113549.1.1.12" IL_0274: stloc.0 IL_0275: br.s IL_0295 IL_0277: ldstr "2.16.840.1.101.3.4.2.3" IL_027c: stloc.0 IL_027d: br.s IL_0295 IL_027f: ldstr "1.2.840.10045.4.3.4" IL_0284: stloc.0 IL_0285: br.s IL_0295 IL_0287: ldstr "1.2.840.113549.1.1.13" IL_028c: stloc.0 IL_028d: br.s IL_0295 IL_028f: ldstr "default" IL_0294: stloc.0 IL_0295: ldloc.0 IL_0296: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 684 (0x2ac) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x2607050f IL_000d: bgt.un.s IL_007b IL_000f: ldloc.1 IL_0010: ldc.i4 0x23070056 IL_0015: bgt.un.s IL_003d IL_0017: ldloc.1 IL_0018: ldc.i4 0x1d3018af IL_001d: beq IL_014e IL_0022: ldloc.1 IL_0023: ldc.i4 0x1e6ebeee IL_0028: beq IL_0139 IL_002d: ldloc.1 IL_002e: ldc.i4 0x23070056 IL_0033: beq IL_01cc IL_0038: br IL_02a4 IL_003d: ldloc.1 IL_003e: ldc.i4 0x240701e9 IL_0043: bgt.un.s IL_0060 IL_0045: ldloc.1 IL_0046: ldc.i4 0x23db8e98 IL_004b: beq IL_0163 IL_0050: ldloc.1 IL_0051: ldc.i4 0x240701e9 IL_0056: beq IL_018d IL_005b: br IL_02a4 IL_0060: ldloc.1 IL_0061: ldc.i4 0x24db902b IL_0066: beq IL_010f IL_006b: ldloc.1 IL_006c: ldc.i4 0x2607050f IL_0071: beq IL_020b IL_0076: br IL_02a4 IL_007b: ldloc.1 IL_007c: ldc.i4 0x95ab4e75 IL_0081: bgt.un.s IL_00c1 IL_0083: ldloc.1 IL_0084: ldc.i4 0x93ab4b4f IL_0089: bgt.un.s IL_00a6 IL_008b: ldloc.1 IL_008c: ldc.i4 0x332fa045 IL_0091: beq IL_0124 IL_0096: ldloc.1 IL_0097: ldc.i4 0x93ab4b4f IL_009c: beq IL_01a2 IL_00a1: br IL_02a4 IL_00a6: ldloc.1 IL_00a7: ldc.i4 0x94ab4ce2 IL_00ac: beq IL_01e1 IL_00b1: ldloc.1 IL_00b2: ldc.i4 0x95ab4e75 IL_00b7: beq IL_021d IL_00bc: br IL_02a4 IL_00c1: ldloc.1 IL_00c2: ldc.i4 0xdd91cb42 IL_00c7: bgt.un.s IL_00e4 IL_00c9: ldloc.1 IL_00ca: ldc.i4 0xdc91c9af IL_00cf: beq IL_0178 IL_00d4: ldloc.1 IL_00d5: ldc.i4 0xdd91cb42 IL_00da: beq IL_01b7 IL_00df: br IL_02a4 IL_00e4: ldloc.1 IL_00e5: ldc.i4 0xde91ccd5 IL_00ea: beq IL_01f6 IL_00ef: ldloc.1 IL_00f0: ldc.i4 0xe0252800 IL_00f5: bne.un IL_02a4 IL_00fa: ldarg.0 IL_00fb: ldstr "1.2.840.113549.2.5" IL_0100: call "bool string.op_Equality(string, string)" IL_0105: brtrue IL_022c IL_010a: br IL_02a4 IL_010f: ldarg.0 IL_0110: ldstr "1.2.840.113549.1.1.4" IL_0115: call "bool string.op_Equality(string, string)" IL_011a: brtrue IL_0234 IL_011f: br IL_02a4 IL_0124: ldarg.0 IL_0125: ldstr "1.3.14.3.2.26" IL_012a: call "bool string.op_Equality(string, string)" IL_012f: brtrue IL_023c IL_0134: br IL_02a4 IL_0139: ldarg.0 IL_013a: ldstr "1.2.840.10040.4.3" IL_013f: call "bool string.op_Equality(string, string)" IL_0144: brtrue IL_0244 IL_0149: br IL_02a4 IL_014e: ldarg.0 IL_014f: ldstr "1.2.840.10045.4.1" IL_0154: call "bool string.op_Equality(string, string)" IL_0159: brtrue IL_024c IL_015e: br IL_02a4 IL_0163: ldarg.0 IL_0164: ldstr "1.2.840.113549.1.1.5" IL_0169: call "bool string.op_Equality(string, string)" IL_016e: brtrue IL_0254 IL_0173: br IL_02a4 IL_0178: ldarg.0 IL_0179: ldstr "2.16.840.1.101.3.4.2.1" IL_017e: call "bool string.op_Equality(string, string)" IL_0183: brtrue IL_025c IL_0188: br IL_02a4 IL_018d: ldarg.0 IL_018e: ldstr "1.2.840.10045.4.3.2" IL_0193: call "bool string.op_Equality(string, string)" IL_0198: brtrue IL_0264 IL_019d: br IL_02a4 IL_01a2: ldarg.0 IL_01a3: ldstr "1.2.840.113549.1.1.11" IL_01a8: call "bool string.op_Equality(string, string)" IL_01ad: brtrue IL_026c IL_01b2: br IL_02a4 IL_01b7: ldarg.0 IL_01b8: ldstr "2.16.840.1.101.3.4.2.2" IL_01bd: call "bool string.op_Equality(string, string)" IL_01c2: brtrue IL_0274 IL_01c7: br IL_02a4 IL_01cc: ldarg.0 IL_01cd: ldstr "1.2.840.10045.4.3.3" IL_01d2: call "bool string.op_Equality(string, string)" IL_01d7: brtrue IL_027c IL_01dc: br IL_02a4 IL_01e1: ldarg.0 IL_01e2: ldstr "1.2.840.113549.1.1.12" IL_01e7: call "bool string.op_Equality(string, string)" IL_01ec: brtrue IL_0284 IL_01f1: br IL_02a4 IL_01f6: ldarg.0 IL_01f7: ldstr "2.16.840.1.101.3.4.2.3" IL_01fc: call "bool string.op_Equality(string, string)" IL_0201: brtrue IL_028c IL_0206: br IL_02a4 IL_020b: ldarg.0 IL_020c: ldstr "1.2.840.10045.4.3.4" IL_0211: call "bool string.op_Equality(string, string)" IL_0216: brtrue.s IL_0294 IL_0218: br IL_02a4 IL_021d: ldarg.0 IL_021e: ldstr "1.2.840.113549.1.1.13" IL_0223: call "bool string.op_Equality(string, string)" IL_0228: brtrue.s IL_029c IL_022a: br.s IL_02a4 IL_022c: ldstr "1.2.840.113549.2.5" IL_0231: stloc.0 IL_0232: br.s IL_02aa IL_0234: ldstr "1.2.840.113549.1.1.4" IL_0239: stloc.0 IL_023a: br.s IL_02aa IL_023c: ldstr "1.3.14.3.2.26" IL_0241: stloc.0 IL_0242: br.s IL_02aa IL_0244: ldstr "1.2.840.10040.4.3" IL_0249: stloc.0 IL_024a: br.s IL_02aa IL_024c: ldstr "1.2.840.10045.4.1" IL_0251: stloc.0 IL_0252: br.s IL_02aa IL_0254: ldstr "1.2.840.113549.1.1.5" IL_0259: stloc.0 IL_025a: br.s IL_02aa IL_025c: ldstr "2.16.840.1.101.3.4.2.1" IL_0261: stloc.0 IL_0262: br.s IL_02aa IL_0264: ldstr "1.2.840.10045.4.3.2" IL_0269: stloc.0 IL_026a: br.s IL_02aa IL_026c: ldstr "1.2.840.113549.1.1.11" IL_0271: stloc.0 IL_0272: br.s IL_02aa IL_0274: ldstr "2.16.840.1.101.3.4.2.2" IL_0279: stloc.0 IL_027a: br.s IL_02aa IL_027c: ldstr "1.2.840.10045.4.3.3" IL_0281: stloc.0 IL_0282: br.s IL_02aa IL_0284: ldstr "1.2.840.113549.1.1.12" IL_0289: stloc.0 IL_028a: br.s IL_02aa IL_028c: ldstr "2.16.840.1.101.3.4.2.3" IL_0291: stloc.0 IL_0292: br.s IL_02aa IL_0294: ldstr "1.2.840.10045.4.3.4" IL_0299: stloc.0 IL_029a: br.s IL_02aa IL_029c: ldstr "1.2.840.113549.1.1.13" IL_02a1: stloc.0 IL_02a2: br.s IL_02aa IL_02a4: ldstr "default" IL_02a9: stloc.0 IL_02aa: ldloc.0 IL_02ab: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void WriteEntityRef() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Private.Xml.Linq/src/System/Xml/Linq/XNodeBuilder.cs#L115-L134 var source = """ assert(null, "default"); assert("", "default"); assert("apos"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "amp" => "amp", "apos" => "apos", "gt" => "gt", "lt" => "lt", "quot" => "quot", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 115 (0x73) .maxstack 2 .locals init (string V_0) IL_0000: ldarg.0 IL_0001: ldstr "amp" IL_0006: call "bool string.op_Equality(string, string)" IL_000b: brtrue.s IL_0043 IL_000d: ldarg.0 IL_000e: ldstr "apos" IL_0013: call "bool string.op_Equality(string, string)" IL_0018: brtrue.s IL_004b IL_001a: ldarg.0 IL_001b: ldstr "gt" IL_0020: call "bool string.op_Equality(string, string)" IL_0025: brtrue.s IL_0053 IL_0027: ldarg.0 IL_0028: ldstr "lt" IL_002d: call "bool string.op_Equality(string, string)" IL_0032: brtrue.s IL_005b IL_0034: ldarg.0 IL_0035: ldstr "quot" IL_003a: call "bool string.op_Equality(string, string)" IL_003f: brtrue.s IL_0063 IL_0041: br.s IL_006b IL_0043: ldstr "amp" IL_0048: stloc.0 IL_0049: br.s IL_0071 IL_004b: ldstr "apos" IL_0050: stloc.0 IL_0051: br.s IL_0071 IL_0053: ldstr "gt" IL_0058: stloc.0 IL_0059: br.s IL_0071 IL_005b: ldstr "lt" IL_0060: stloc.0 IL_0061: br.s IL_0071 IL_0063: ldstr "quot" IL_0068: stloc.0 IL_0069: br.s IL_0071 IL_006b: ldstr "default" IL_0070: stloc.0 IL_0071: ldloc.0 IL_0072: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void FunctionAvailable() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Private.Xml/src/System/Xml/Xsl/XsltOld/XsltCompileContext.cs#L451-L485 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("last"); assert("position"); assert("name"); assert("namespace-uri"); assert("local-name"); assert("count"); assert("id"); assert("string"); assert("concat"); assert("starts-with"); assert("contains"); assert("substring-before"); assert("substring-after"); assert("substring"); assert("string-length"); assert("normalize-space"); assert("translate"); assert("boolean"); assert("not"); assert("true"); assert("false"); assert("lang"); assert("number"); assert("sum"); assert("floor"); assert("ceiling"); assert("round"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "last" => "last", "position" => "position", "name" => "name", "namespace-uri" => "namespace-uri", "local-name" => "local-name", "count" => "count", "id" => "id", "string" => "string", "concat" => "concat", "starts-with" => "starts-with", "contains" => "contains", "substring-before" => "substring-before", "substring-after" => "substring-after", "substring" => "substring", "string-length" => "string-length", "normalize-space" => "normalize-space", "translate" => "translate", "boolean" => "boolean", "not" => "not", "true" => "true", "false" => "false", "lang" => "lang", "number" => "number", "sum" => "sum", "floor" => "floor", "ceiling" => "ceiling", "round" => "round", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 1231 (0x4cf) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_04c7 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.2 IL_000f: sub IL_0010: switch ( IL_02a8, IL_017a, IL_0056, IL_00c7, IL_00fe, IL_015d, IL_008d, IL_0140, IL_023f, IL_02fc, IL_04c7, IL_00aa, IL_04c7, IL_0123, IL_0311) IL_0051: br IL_04c7 IL_0056: ldarg.0 IL_0057: ldc.i4.2 IL_0058: call "char string.this[int].get" IL_005d: stloc.2 IL_005e: ldloc.2 IL_005f: ldc.i4.s 110 IL_0061: bgt.un.s IL_0078 IL_0063: ldloc.2 IL_0064: ldc.i4.s 109 IL_0066: beq IL_01ac IL_006b: ldloc.2 IL_006c: ldc.i4.s 110 IL_006e: beq IL_01d6 IL_0073: br IL_04c7 IL_0078: ldloc.2 IL_0079: ldc.i4.s 115 IL_007b: beq IL_0197 IL_0080: ldloc.2 IL_0081: ldc.i4.s 117 IL_0083: beq IL_01c1 IL_0088: br IL_04c7 IL_008d: ldarg.0 IL_008e: ldc.i4.0 IL_008f: call "char string.this[int].get" IL_0094: stloc.2 IL_0095: ldloc.2 IL_0096: ldc.i4.s 99 IL_0098: beq IL_0200 IL_009d: ldloc.2 IL_009e: ldc.i4.s 112 IL_00a0: beq IL_01eb IL_00a5: br IL_04c7 IL_00aa: ldarg.0 IL_00ab: ldc.i4.0 IL_00ac: call "char string.this[int].get" IL_00b1: stloc.2 IL_00b2: ldloc.2 IL_00b3: ldc.i4.s 110 IL_00b5: beq IL_0215 IL_00ba: ldloc.2 IL_00bb: ldc.i4.s 115 IL_00bd: beq IL_022a IL_00c2: br IL_04c7 IL_00c7: ldarg.0 IL_00c8: ldc.i4.4 IL_00c9: call "char string.this[int].get" IL_00ce: stloc.2 IL_00cf: ldloc.2 IL_00d0: ldc.i4.s 101 IL_00d2: bgt.un.s IL_00e9 IL_00d4: ldloc.2 IL_00d5: ldc.i4.s 100 IL_00d7: beq IL_0293 IL_00dc: ldloc.2 IL_00dd: ldc.i4.s 101 IL_00df: beq IL_0269 IL_00e4: br IL_04c7 IL_00e9: ldloc.2 IL_00ea: ldc.i4.s 114 IL_00ec: beq IL_027e IL_00f1: ldloc.2 IL_00f2: ldc.i4.s 116 IL_00f4: beq IL_0254 IL_00f9: br IL_04c7 IL_00fe: ldarg.0 IL_00ff: ldc.i4.0 IL_0100: call "char string.this[int].get" IL_0105: stloc.2 IL_0106: ldloc.2 IL_0107: ldc.i4.s 99 IL_0109: beq IL_02d2 IL_010e: ldloc.2 IL_010f: ldc.i4.s 110 IL_0111: beq IL_02e7 IL_0116: ldloc.2 IL_0117: ldc.i4.s 115 IL_0119: beq IL_02bd IL_011e: br IL_04c7 IL_0123: ldarg.0 IL_0124: ldc.i4.0 IL_0125: call "char string.this[int].get" IL_012a: stloc.2 IL_012b: ldloc.2 IL_012c: ldc.i4.s 110 IL_012e: beq IL_033b IL_0133: ldloc.2 IL_0134: ldc.i4.s 115 IL_0136: beq IL_0326 IL_013b: br IL_04c7 IL_0140: ldarg.0 IL_0141: ldc.i4.0 IL_0142: call "char string.this[int].get" IL_0147: stloc.2 IL_0148: ldloc.2 IL_0149: ldc.i4.s 115 IL_014b: beq IL_0350 IL_0150: ldloc.2 IL_0151: ldc.i4.s 116 IL_0153: beq IL_0365 IL_0158: br IL_04c7 IL_015d: ldarg.0 IL_015e: ldc.i4.0 IL_015f: call "char string.this[int].get" IL_0164: stloc.2 IL_0165: ldloc.2 IL_0166: ldc.i4.s 98 IL_0168: beq IL_037a IL_016d: ldloc.2 IL_016e: ldc.i4.s 99 IL_0170: beq IL_038f IL_0175: br IL_04c7 IL_017a: ldarg.0 IL_017b: ldc.i4.0 IL_017c: call "char string.this[int].get" IL_0181: stloc.2 IL_0182: ldloc.2 IL_0183: ldc.i4.s 110 IL_0185: beq IL_03a4 IL_018a: ldloc.2 IL_018b: ldc.i4.s 115 IL_018d: beq IL_03b9 IL_0192: br IL_04c7 IL_0197: ldarg.0 IL_0198: ldstr "last" IL_019d: call "bool string.op_Equality(string, string)" IL_01a2: brtrue IL_03ce IL_01a7: br IL_04c7 IL_01ac: ldarg.0 IL_01ad: ldstr "name" IL_01b2: call "bool string.op_Equality(string, string)" IL_01b7: brtrue IL_03e4 IL_01bc: br IL_04c7 IL_01c1: ldarg.0 IL_01c2: ldstr "true" IL_01c7: call "bool string.op_Equality(string, string)" IL_01cc: brtrue IL_0487 IL_01d1: br IL_04c7 IL_01d6: ldarg.0 IL_01d7: ldstr "lang" IL_01dc: call "bool string.op_Equality(string, string)" IL_01e1: brtrue IL_0497 IL_01e6: br IL_04c7 IL_01eb: ldarg.0 IL_01ec: ldstr "position" IL_01f1: call "bool string.op_Equality(string, string)" IL_01f6: brtrue IL_03d9 IL_01fb: br IL_04c7 IL_0200: ldarg.0 IL_0201: ldstr "contains" IL_0206: call "bool string.op_Equality(string, string)" IL_020b: brtrue IL_043c IL_0210: br IL_04c7 IL_0215: ldarg.0 IL_0216: ldstr "namespace-uri" IL_021b: call "bool string.op_Equality(string, string)" IL_0220: brtrue IL_03ef IL_0225: br IL_04c7 IL_022a: ldarg.0 IL_022b: ldstr "string-length" IL_0230: call "bool string.op_Equality(string, string)" IL_0235: brtrue IL_045f IL_023a: br IL_04c7 IL_023f: ldarg.0 IL_0240: ldstr "local-name" IL_0245: call "bool string.op_Equality(string, string)" IL_024a: brtrue IL_03fa IL_024f: br IL_04c7 IL_0254: ldarg.0 IL_0255: ldstr "count" IL_025a: call "bool string.op_Equality(string, string)" IL_025f: brtrue IL_0405 IL_0264: br IL_04c7 IL_0269: ldarg.0 IL_026a: ldstr "false" IL_026f: call "bool string.op_Equality(string, string)" IL_0274: brtrue IL_048f IL_0279: br IL_04c7 IL_027e: ldarg.0 IL_027f: ldstr "floor" IL_0284: call "bool string.op_Equality(string, string)" IL_0289: brtrue IL_04af IL_028e: br IL_04c7 IL_0293: ldarg.0 IL_0294: ldstr "round" IL_0299: call "bool string.op_Equality(string, string)" IL_029e: brtrue IL_04bf IL_02a3: br IL_04c7 IL_02a8: ldarg.0 IL_02a9: ldstr "id" IL_02ae: call "bool string.op_Equality(string, string)" IL_02b3: brtrue IL_0410 IL_02b8: br IL_04c7 IL_02bd: ldarg.0 IL_02be: ldstr "string" IL_02c3: call "bool string.op_Equality(string, string)" IL_02c8: brtrue IL_041b IL_02cd: br IL_04c7 IL_02d2: ldarg.0 IL_02d3: ldstr "concat" IL_02d8: call "bool string.op_Equality(string, string)" IL_02dd: brtrue IL_0426 IL_02e2: br IL_04c7 IL_02e7: ldarg.0 IL_02e8: ldstr "number" IL_02ed: call "bool string.op_Equality(string, string)" IL_02f2: brtrue IL_049f IL_02f7: br IL_04c7 IL_02fc: ldarg.0 IL_02fd: ldstr "starts-with" IL_0302: call "bool string.op_Equality(string, string)" IL_0307: brtrue IL_0431 IL_030c: br IL_04c7 IL_0311: ldarg.0 IL_0312: ldstr "substring-before" IL_0317: call "bool string.op_Equality(string, string)" IL_031c: brtrue IL_0447 IL_0321: br IL_04c7 IL_0326: ldarg.0 IL_0327: ldstr "substring-after" IL_032c: call "bool string.op_Equality(string, string)" IL_0331: brtrue IL_044f IL_0336: br IL_04c7 IL_033b: ldarg.0 IL_033c: ldstr "normalize-space" IL_0341: call "bool string.op_Equality(string, string)" IL_0346: brtrue IL_0467 IL_034b: br IL_04c7 IL_0350: ldarg.0 IL_0351: ldstr "substring" IL_0356: call "bool string.op_Equality(string, string)" IL_035b: brtrue IL_0457 IL_0360: br IL_04c7 IL_0365: ldarg.0 IL_0366: ldstr "translate" IL_036b: call "bool string.op_Equality(string, string)" IL_0370: brtrue IL_046f IL_0375: br IL_04c7 IL_037a: ldarg.0 IL_037b: ldstr "boolean" IL_0380: call "bool string.op_Equality(string, string)" IL_0385: brtrue IL_0477 IL_038a: br IL_04c7 IL_038f: ldarg.0 IL_0390: ldstr "ceiling" IL_0395: call "bool string.op_Equality(string, string)" IL_039a: brtrue IL_04b7 IL_039f: br IL_04c7 IL_03a4: ldarg.0 IL_03a5: ldstr "not" IL_03aa: call "bool string.op_Equality(string, string)" IL_03af: brtrue IL_047f IL_03b4: br IL_04c7 IL_03b9: ldarg.0 IL_03ba: ldstr "sum" IL_03bf: call "bool string.op_Equality(string, string)" IL_03c4: brtrue IL_04a7 IL_03c9: br IL_04c7 IL_03ce: ldstr "last" IL_03d3: stloc.0 IL_03d4: br IL_04cd IL_03d9: ldstr "position" IL_03de: stloc.0 IL_03df: br IL_04cd IL_03e4: ldstr "name" IL_03e9: stloc.0 IL_03ea: br IL_04cd IL_03ef: ldstr "namespace-uri" IL_03f4: stloc.0 IL_03f5: br IL_04cd IL_03fa: ldstr "local-name" IL_03ff: stloc.0 IL_0400: br IL_04cd IL_0405: ldstr "count" IL_040a: stloc.0 IL_040b: br IL_04cd IL_0410: ldstr "id" IL_0415: stloc.0 IL_0416: br IL_04cd IL_041b: ldstr "string" IL_0420: stloc.0 IL_0421: br IL_04cd IL_0426: ldstr "concat" IL_042b: stloc.0 IL_042c: br IL_04cd IL_0431: ldstr "starts-with" IL_0436: stloc.0 IL_0437: br IL_04cd IL_043c: ldstr "contains" IL_0441: stloc.0 IL_0442: br IL_04cd IL_0447: ldstr "substring-before" IL_044c: stloc.0 IL_044d: br.s IL_04cd IL_044f: ldstr "substring-after" IL_0454: stloc.0 IL_0455: br.s IL_04cd IL_0457: ldstr "substring" IL_045c: stloc.0 IL_045d: br.s IL_04cd IL_045f: ldstr "string-length" IL_0464: stloc.0 IL_0465: br.s IL_04cd IL_0467: ldstr "normalize-space" IL_046c: stloc.0 IL_046d: br.s IL_04cd IL_046f: ldstr "translate" IL_0474: stloc.0 IL_0475: br.s IL_04cd IL_0477: ldstr "boolean" IL_047c: stloc.0 IL_047d: br.s IL_04cd IL_047f: ldstr "not" IL_0484: stloc.0 IL_0485: br.s IL_04cd IL_0487: ldstr "true" IL_048c: stloc.0 IL_048d: br.s IL_04cd IL_048f: ldstr "false" IL_0494: stloc.0 IL_0495: br.s IL_04cd IL_0497: ldstr "lang" IL_049c: stloc.0 IL_049d: br.s IL_04cd IL_049f: ldstr "number" IL_04a4: stloc.0 IL_04a5: br.s IL_04cd IL_04a7: ldstr "sum" IL_04ac: stloc.0 IL_04ad: br.s IL_04cd IL_04af: ldstr "floor" IL_04b4: stloc.0 IL_04b5: br.s IL_04cd IL_04b7: ldstr "ceiling" IL_04bc: stloc.0 IL_04bd: br.s IL_04cd IL_04bf: ldstr "round" IL_04c4: stloc.0 IL_04c5: br.s IL_04cd IL_04c7: ldstr "default" IL_04cc: stloc.0 IL_04cd: ldloc.0 IL_04ce: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 1266 (0x4f2) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x6ccaf138 IL_000d: bgt.un IL_00da IL_0012: ldloc.1 IL_0013: ldc.i4 0x39b1ddf4 IL_0018: bgt.un.s IL_006e IL_001a: ldloc.1 IL_001b: ldc.i4 0x1bd670a0 IL_0020: bgt.un.s IL_0048 IL_0022: ldloc.1 IL_0023: ldc.i4 0xb069958 IL_0028: beq IL_035e IL_002d: ldloc.1 IL_002e: ldc.i4 0x17c16538 IL_0033: beq IL_024d IL_0038: ldloc.1 IL_0039: ldc.i4 0x1bd670a0 IL_003e: beq IL_0388 IL_0043: br IL_04ea IL_0048: ldloc.1 IL_0049: ldc.i4 0x29b19c8a IL_004e: beq IL_0334 IL_0053: ldloc.1 IL_0054: ldc.i4 0x37386ae0 IL_0059: beq IL_0238 IL_005e: ldloc.1 IL_005f: ldc.i4 0x39b1ddf4 IL_0064: beq IL_0223 IL_0069: br IL_04ea IL_006e: ldloc.1 IL_006f: ldc.i4 0x4f0be23b IL_0074: bgt.un.s IL_009c IL_0076: ldloc.1 IL_0077: ldc.i4 0x3b8c1a3c IL_007c: beq IL_020e IL_0081: ldloc.1 IL_0082: ldc.i4 0x4db211e5 IL_0087: beq IL_0349 IL_008c: ldloc.1 IL_008d: ldc.i4 0x4f0be23b IL_0092: beq IL_03dc IL_0097: br IL_04ea IL_009c: ldloc.1 IL_009d: ldc.i4 0x63e1d819 IL_00a2: bgt.un.s IL_00bf IL_00a4: ldloc.1 IL_00a5: ldc.i4 0x57b8a51f IL_00aa: beq IL_02f5 IL_00af: ldloc.1 IL_00b0: ldc.i4 0x63e1d819 IL_00b5: beq IL_01ba IL_00ba: br IL_04ea IL_00bf: ldloc.1 IL_00c0: ldc.i4 0x65f46ebf IL_00c5: beq IL_031f IL_00ca: ldloc.1 IL_00cb: ldc.i4 0x6ccaf138 IL_00d0: beq IL_028c IL_00d5: br IL_04ea IL_00da: ldloc.1 IL_00db: ldc.i4 0x9ba9b528 IL_00e0: bgt.un.s IL_014e IL_00e2: ldloc.1 IL_00e3: ldc.i4 0x89116dd3 IL_00e8: bgt.un.s IL_0110 IL_00ea: ldloc.1 IL_00eb: ldc.i4 0x70ea3b55 IL_00f0: beq IL_0373 IL_00f5: ldloc.1 IL_00f6: ldc.i4 0x7a1b637f IL_00fb: beq IL_02e0 IL_0100: ldloc.1 IL_0101: ldc.i4 0x89116dd3 IL_0106: beq IL_0277 IL_010b: br IL_04ea IL_0110: ldloc.1 IL_0111: ldc.i4 0x934f4e0a IL_0116: bgt.un.s IL_0133 IL_0118: ldloc.1 IL_0119: ldc.i4 0x8d39bde6 IL_011e: beq IL_01e4 IL_0123: ldloc.1 IL_0124: ldc.i4 0x934f4e0a IL_0129: beq IL_01cf IL_012e: br IL_04ea IL_0133: ldloc.1 IL_0134: ldc.i4 0x961d0b4f IL_0139: beq IL_01f9 IL_013e: ldloc.1 IL_013f: ldc.i4 0x9ba9b528 IL_0144: beq IL_02cb IL_0149: br IL_04ea IL_014e: ldloc.1 IL_014f: ldc.i4 0xb9e59880 IL_0154: bgt.un.s IL_017c IL_0156: ldloc.1 IL_0157: ldc.i4 0xad0ecfd5 IL_015c: beq IL_030a IL_0161: ldloc.1 IL_0162: ldc.i4 0xb8e70c1d IL_0167: beq IL_03b2 IL_016c: ldloc.1 IL_016d: ldc.i4 0xb9e59880 IL_0172: beq IL_03c7 IL_0177: br IL_04ea IL_017c: ldloc.1 IL_017d: ldc.i4 0xcf622408 IL_0182: bgt.un.s IL_019f IL_0184: ldloc.1 IL_0185: ldc.i4 0xc04f5db7 IL_018a: beq IL_02b6 IL_018f: ldloc.1 IL_0190: ldc.i4 0xcf622408 IL_0195: beq IL_02a1 IL_019a: br IL_04ea IL_019f: ldloc.1 IL_01a0: ldc.i4 0xdd4e3aa8 IL_01a5: beq IL_039d IL_01aa: ldloc.1 IL_01ab: ldc.i4 0xf5cf8c7d IL_01b0: beq IL_0262 IL_01b5: br IL_04ea IL_01ba: ldarg.0 IL_01bb: ldstr "last" IL_01c0: call "bool string.op_Equality(string, string)" IL_01c5: brtrue IL_03f1 IL_01ca: br IL_04ea IL_01cf: ldarg.0 IL_01d0: ldstr "position" IL_01d5: call "bool string.op_Equality(string, string)" IL_01da: brtrue IL_03fc IL_01df: br IL_04ea IL_01e4: ldarg.0 IL_01e5: ldstr "name" IL_01ea: call "bool string.op_Equality(string, string)" IL_01ef: brtrue IL_0407 IL_01f4: br IL_04ea IL_01f9: ldarg.0 IL_01fa: ldstr "namespace-uri" IL_01ff: call "bool string.op_Equality(string, string)" IL_0204: brtrue IL_0412 IL_0209: br IL_04ea IL_020e: ldarg.0 IL_020f: ldstr "local-name" IL_0214: call "bool string.op_Equality(string, string)" IL_0219: brtrue IL_041d IL_021e: br IL_04ea IL_0223: ldarg.0 IL_0224: ldstr "count" IL_0229: call "bool string.op_Equality(string, string)" IL_022e: brtrue IL_0428 IL_0233: br IL_04ea IL_0238: ldarg.0 IL_0239: ldstr "id" IL_023e: call "bool string.op_Equality(string, string)" IL_0243: brtrue IL_0433 IL_0248: br IL_04ea IL_024d: ldarg.0 IL_024e: ldstr "string" IL_0253: call "bool string.op_Equality(string, string)" IL_0258: brtrue IL_043e IL_025d: br IL_04ea IL_0262: ldarg.0 IL_0263: ldstr "concat" IL_0268: call "bool string.op_Equality(string, string)" IL_026d: brtrue IL_0449 IL_0272: br IL_04ea IL_0277: ldarg.0 IL_0278: ldstr "starts-with" IL_027d: call "bool string.op_Equality(string, string)" IL_0282: brtrue IL_0454 IL_0287: br IL_04ea IL_028c: ldarg.0 IL_028d: ldstr "contains" IL_0292: call "bool string.op_Equality(string, string)" IL_0297: brtrue IL_045f IL_029c: br IL_04ea IL_02a1: ldarg.0 IL_02a2: ldstr "substring-before" IL_02a7: call "bool string.op_Equality(string, string)" IL_02ac: brtrue IL_046a IL_02b1: br IL_04ea IL_02b6: ldarg.0 IL_02b7: ldstr "substring-after" IL_02bc: call "bool string.op_Equality(string, string)" IL_02c1: brtrue IL_0472 IL_02c6: br IL_04ea IL_02cb: ldarg.0 IL_02cc: ldstr "substring" IL_02d1: call "bool string.op_Equality(string, string)" IL_02d6: brtrue IL_047a IL_02db: br IL_04ea IL_02e0: ldarg.0 IL_02e1: ldstr "string-length" IL_02e6: call "bool string.op_Equality(string, string)" IL_02eb: brtrue IL_0482 IL_02f0: br IL_04ea IL_02f5: ldarg.0 IL_02f6: ldstr "normalize-space" IL_02fb: call "bool string.op_Equality(string, string)" IL_0300: brtrue IL_048a IL_0305: br IL_04ea IL_030a: ldarg.0 IL_030b: ldstr "translate" IL_0310: call "bool string.op_Equality(string, string)" IL_0315: brtrue IL_0492 IL_031a: br IL_04ea IL_031f: ldarg.0 IL_0320: ldstr "boolean" IL_0325: call "bool string.op_Equality(string, string)" IL_032a: brtrue IL_049a IL_032f: br IL_04ea IL_0334: ldarg.0 IL_0335: ldstr "not" IL_033a: call "bool string.op_Equality(string, string)" IL_033f: brtrue IL_04a2 IL_0344: br IL_04ea IL_0349: ldarg.0 IL_034a: ldstr "true" IL_034f: call "bool string.op_Equality(string, string)" IL_0354: brtrue IL_04aa IL_0359: br IL_04ea IL_035e: ldarg.0 IL_035f: ldstr "false" IL_0364: call "bool string.op_Equality(string, string)" IL_0369: brtrue IL_04b2 IL_036e: br IL_04ea IL_0373: ldarg.0 IL_0374: ldstr "lang" IL_0379: call "bool string.op_Equality(string, string)" IL_037e: brtrue IL_04ba IL_0383: br IL_04ea IL_0388: ldarg.0 IL_0389: ldstr "number" IL_038e: call "bool string.op_Equality(string, string)" IL_0393: brtrue IL_04c2 IL_0398: br IL_04ea IL_039d: ldarg.0 IL_039e: ldstr "sum" IL_03a3: call "bool string.op_Equality(string, string)" IL_03a8: brtrue IL_04ca IL_03ad: br IL_04ea IL_03b2: ldarg.0 IL_03b3: ldstr "floor" IL_03b8: call "bool string.op_Equality(string, string)" IL_03bd: brtrue IL_04d2 IL_03c2: br IL_04ea IL_03c7: ldarg.0 IL_03c8: ldstr "ceiling" IL_03cd: call "bool string.op_Equality(string, string)" IL_03d2: brtrue IL_04da IL_03d7: br IL_04ea IL_03dc: ldarg.0 IL_03dd: ldstr "round" IL_03e2: call "bool string.op_Equality(string, string)" IL_03e7: brtrue IL_04e2 IL_03ec: br IL_04ea IL_03f1: ldstr "last" IL_03f6: stloc.0 IL_03f7: br IL_04f0 IL_03fc: ldstr "position" IL_0401: stloc.0 IL_0402: br IL_04f0 IL_0407: ldstr "name" IL_040c: stloc.0 IL_040d: br IL_04f0 IL_0412: ldstr "namespace-uri" IL_0417: stloc.0 IL_0418: br IL_04f0 IL_041d: ldstr "local-name" IL_0422: stloc.0 IL_0423: br IL_04f0 IL_0428: ldstr "count" IL_042d: stloc.0 IL_042e: br IL_04f0 IL_0433: ldstr "id" IL_0438: stloc.0 IL_0439: br IL_04f0 IL_043e: ldstr "string" IL_0443: stloc.0 IL_0444: br IL_04f0 IL_0449: ldstr "concat" IL_044e: stloc.0 IL_044f: br IL_04f0 IL_0454: ldstr "starts-with" IL_0459: stloc.0 IL_045a: br IL_04f0 IL_045f: ldstr "contains" IL_0464: stloc.0 IL_0465: br IL_04f0 IL_046a: ldstr "substring-before" IL_046f: stloc.0 IL_0470: br.s IL_04f0 IL_0472: ldstr "substring-after" IL_0477: stloc.0 IL_0478: br.s IL_04f0 IL_047a: ldstr "substring" IL_047f: stloc.0 IL_0480: br.s IL_04f0 IL_0482: ldstr "string-length" IL_0487: stloc.0 IL_0488: br.s IL_04f0 IL_048a: ldstr "normalize-space" IL_048f: stloc.0 IL_0490: br.s IL_04f0 IL_0492: ldstr "translate" IL_0497: stloc.0 IL_0498: br.s IL_04f0 IL_049a: ldstr "boolean" IL_049f: stloc.0 IL_04a0: br.s IL_04f0 IL_04a2: ldstr "not" IL_04a7: stloc.0 IL_04a8: br.s IL_04f0 IL_04aa: ldstr "true" IL_04af: stloc.0 IL_04b0: br.s IL_04f0 IL_04b2: ldstr "false" IL_04b7: stloc.0 IL_04b8: br.s IL_04f0 IL_04ba: ldstr "lang" IL_04bf: stloc.0 IL_04c0: br.s IL_04f0 IL_04c2: ldstr "number" IL_04c7: stloc.0 IL_04c8: br.s IL_04f0 IL_04ca: ldstr "sum" IL_04cf: stloc.0 IL_04d0: br.s IL_04f0 IL_04d2: ldstr "floor" IL_04d7: stloc.0 IL_04d8: br.s IL_04f0 IL_04da: ldstr "ceiling" IL_04df: stloc.0 IL_04e0: br.s IL_04f0 IL_04e2: ldstr "round" IL_04e7: stloc.0 IL_04e8: br.s IL_04f0 IL_04ea: ldstr "default" IL_04ef: stloc.0 IL_04f0: ldloc.0 IL_04f1: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void NormalizeTimeZone() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.ServiceModel.Syndication/src/System/ServiceModel/Syndication/DateTimeHelper.cs#L146-L212 // Buckets: 1, 1, 2, 2, 2, 2 var source = """ assert("UT"); assert("Z"); assert("GMT"); assert("A"); assert("B"); assert("C"); assert("D"); assert("EDT"); assert("E"); assert("EST"); assert("CDT"); assert("F"); assert("CST"); assert("MDT"); assert("G"); assert("MST"); assert("PDT"); assert("H"); assert("PST"); assert("I"); assert("K"); assert("L"); assert("M"); assert("N"); assert("O"); assert("P"); assert("Q"); assert("R"); assert("S"); assert("T"); assert("U"); assert("V"); assert("W"); assert("X"); assert("Y"); assert(null, "default"); assert("", "default"); assert("other", "default"); assert("3", "default"); assert("AMT", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "UT" => "UT", "Z" => "Z", "GMT" => "GMT", "A" => "A", "B" => "B", "C" => "C", "D" => "D", "EDT" => "EDT", "E" => "E", "EST" => "EST", "CDT" => "CDT", "F" => "F", "CST" => "CST", "MDT" => "MDT", "G" => "G", "MST" => "MST", "PDT" => "PDT", "H" => "H", "PST" => "PST", "I" => "I", "K" => "K", "L" => "L", "M" => "M", "N" => "N", "O" => "O", "P" => "P", "Q" => "Q", "R" => "R", "S" => "S", "T" => "T", "U" => "U", "V" => "V", "W" => "W", "X" => "X", "Y" => "Y", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 757 (0x2f5) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_02ed IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.1 IL_000f: sub IL_0010: switch ( IL_0026, IL_00de, IL_00a4) IL_0021: br IL_02ed IL_0026: ldarg.0 IL_0027: ldc.i4.0 IL_0028: call "char string.this[int].get" IL_002d: stloc.2 IL_002e: ldloc.2 IL_002f: ldc.i4.s 65 IL_0031: sub IL_0032: switch ( IL_01bd, IL_01c8, IL_01d3, IL_01de, IL_01f4, IL_0215, IL_0236, IL_0257, IL_026d, IL_02ed, IL_0275, IL_027d, IL_0285, IL_028d, IL_0295, IL_029d, IL_02a5, IL_02ad, IL_02b5, IL_02bd, IL_02c5, IL_02cd, IL_02d5, IL_02dd, IL_02e5, IL_01a7) IL_009f: br IL_02ed IL_00a4: ldarg.0 IL_00a5: ldc.i4.0 IL_00a6: call "char string.this[int].get" IL_00ab: stloc.2 IL_00ac: ldloc.2 IL_00ad: ldc.i4.s 67 IL_00af: sub IL_00b0: switch ( IL_012d, IL_02ed, IL_0108, IL_02ed, IL_00f3) IL_00c9: ldloc.2 IL_00ca: ldc.i4.s 77 IL_00cc: beq IL_0152 IL_00d1: ldloc.2 IL_00d2: ldc.i4.s 80 IL_00d4: beq IL_0177 IL_00d9: br IL_02ed IL_00de: ldarg.0 IL_00df: ldstr "UT" IL_00e4: call "bool string.op_Equality(string, string)" IL_00e9: brtrue IL_019c IL_00ee: br IL_02ed IL_00f3: ldarg.0 IL_00f4: ldstr "GMT" IL_00f9: call "bool string.op_Equality(string, string)" IL_00fe: brtrue IL_01b2 IL_0103: br IL_02ed IL_0108: ldarg.0 IL_0109: ldstr "EDT" IL_010e: call "bool string.op_Equality(string, string)" IL_0113: brtrue IL_01e9 IL_0118: ldarg.0 IL_0119: ldstr "EST" IL_011e: call "bool string.op_Equality(string, string)" IL_0123: brtrue IL_01ff IL_0128: br IL_02ed IL_012d: ldarg.0 IL_012e: ldstr "CDT" IL_0133: call "bool string.op_Equality(string, string)" IL_0138: brtrue IL_020a IL_013d: ldarg.0 IL_013e: ldstr "CST" IL_0143: call "bool string.op_Equality(string, string)" IL_0148: brtrue IL_0220 IL_014d: br IL_02ed IL_0152: ldarg.0 IL_0153: ldstr "MDT" IL_0158: call "bool string.op_Equality(string, string)" IL_015d: brtrue IL_022b IL_0162: ldarg.0 IL_0163: ldstr "MST" IL_0168: call "bool string.op_Equality(string, string)" IL_016d: brtrue IL_0241 IL_0172: br IL_02ed IL_0177: ldarg.0 IL_0178: ldstr "PDT" IL_017d: call "bool string.op_Equality(string, string)" IL_0182: brtrue IL_024c IL_0187: ldarg.0 IL_0188: ldstr "PST" IL_018d: call "bool string.op_Equality(string, string)" IL_0192: brtrue IL_0262 IL_0197: br IL_02ed IL_019c: ldstr "UT" IL_01a1: stloc.0 IL_01a2: br IL_02f3 IL_01a7: ldstr "Z" IL_01ac: stloc.0 IL_01ad: br IL_02f3 IL_01b2: ldstr "GMT" IL_01b7: stloc.0 IL_01b8: br IL_02f3 IL_01bd: ldstr "A" IL_01c2: stloc.0 IL_01c3: br IL_02f3 IL_01c8: ldstr "B" IL_01cd: stloc.0 IL_01ce: br IL_02f3 IL_01d3: ldstr "C" IL_01d8: stloc.0 IL_01d9: br IL_02f3 IL_01de: ldstr "D" IL_01e3: stloc.0 IL_01e4: br IL_02f3 IL_01e9: ldstr "EDT" IL_01ee: stloc.0 IL_01ef: br IL_02f3 IL_01f4: ldstr "E" IL_01f9: stloc.0 IL_01fa: br IL_02f3 IL_01ff: ldstr "EST" IL_0204: stloc.0 IL_0205: br IL_02f3 IL_020a: ldstr "CDT" IL_020f: stloc.0 IL_0210: br IL_02f3 IL_0215: ldstr "F" IL_021a: stloc.0 IL_021b: br IL_02f3 IL_0220: ldstr "CST" IL_0225: stloc.0 IL_0226: br IL_02f3 IL_022b: ldstr "MDT" IL_0230: stloc.0 IL_0231: br IL_02f3 IL_0236: ldstr "G" IL_023b: stloc.0 IL_023c: br IL_02f3 IL_0241: ldstr "MST" IL_0246: stloc.0 IL_0247: br IL_02f3 IL_024c: ldstr "PDT" IL_0251: stloc.0 IL_0252: br IL_02f3 IL_0257: ldstr "H" IL_025c: stloc.0 IL_025d: br IL_02f3 IL_0262: ldstr "PST" IL_0267: stloc.0 IL_0268: br IL_02f3 IL_026d: ldstr "I" IL_0272: stloc.0 IL_0273: br.s IL_02f3 IL_0275: ldstr "K" IL_027a: stloc.0 IL_027b: br.s IL_02f3 IL_027d: ldstr "L" IL_0282: stloc.0 IL_0283: br.s IL_02f3 IL_0285: ldstr "M" IL_028a: stloc.0 IL_028b: br.s IL_02f3 IL_028d: ldstr "N" IL_0292: stloc.0 IL_0293: br.s IL_02f3 IL_0295: ldstr "O" IL_029a: stloc.0 IL_029b: br.s IL_02f3 IL_029d: ldstr "P" IL_02a2: stloc.0 IL_02a3: br.s IL_02f3 IL_02a5: ldstr "Q" IL_02aa: stloc.0 IL_02ab: br.s IL_02f3 IL_02ad: ldstr "R" IL_02b2: stloc.0 IL_02b3: br.s IL_02f3 IL_02b5: ldstr "S" IL_02ba: stloc.0 IL_02bb: br.s IL_02f3 IL_02bd: ldstr "T" IL_02c2: stloc.0 IL_02c3: br.s IL_02f3 IL_02c5: ldstr "U" IL_02ca: stloc.0 IL_02cb: br.s IL_02f3 IL_02cd: ldstr "V" IL_02d2: stloc.0 IL_02d3: br.s IL_02f3 IL_02d5: ldstr "W" IL_02da: stloc.0 IL_02db: br.s IL_02f3 IL_02dd: ldstr "X" IL_02e2: stloc.0 IL_02e3: br.s IL_02f3 IL_02e5: ldstr "Y" IL_02ea: stloc.0 IL_02eb: br.s IL_02f3 IL_02ed: ldstr "default" IL_02f2: stloc.0 IL_02f3: ldloc.0 IL_02f4: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void EmitMatchCharacterClass() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCompiler.cs#L5810-L5879 // Buckets: 3, 3, 2 var source = """ assert("\0\0\0\u03ff\ufffe\u07ff\ufffe\u07ff"); assert("\0\0\0\u03FF\0\0\0\0"); assert("\0\0\0\0\ufffe\u07FF\ufffe\u07ff"); assert("\0\0\0\0\0\0\ufffe\u07ff"); assert("\0\0\0\0\ufffe\u07FF\0\0"); assert("\0\0\0\u03FF\u007E\0\u007E\0"); assert("\0\0\0\u03FF\u007E\0\0\0"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "\0\0\0\u03ff\ufffe\u07ff\ufffe\u07ff" => "\0\0\0\u03ff\ufffe\u07ff\ufffe\u07ff", "\0\0\0\u03FF\0\0\0\0" => "\0\0\0\u03FF\0\0\0\0", "\0\0\0\0\ufffe\u07FF\ufffe\u07ff" => "\0\0\0\0\ufffe\u07FF\ufffe\u07ff", "\0\0\0\0\0\0\ufffe\u07ff" => "\0\0\0\0\0\0\ufffe\u07ff", "\0\0\0\0\ufffe\u07FF\0\0" => "\0\0\0\0\ufffe\u07FF\0\0", "\0\0\0\u03FF\u007E\0\u007E\0" => "\0\0\0\u03FF\u007E\0\u007E\0", "\0\0\0\u03FF\0\0\u007E\0" => "\0\0\0\u03FF\0\0\u007E\0", "\0\0\0\u03FF\u007E\0\0\0" => "\0\0\0\u03FF\u007E\0\0\0", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); CompileAndVerify(comp, expectedOutput: "RAN"); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void EmitMatchCharacterClass_2() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Text.RegularExpressions/src/System/Text/RegularExpressions/RegexCompiler.cs#L5810-L5879 var source = """ assert("00100000"); assert("00100001"); assert("00010000"); assert("00010001"); assert("00001000"); assert("00001001"); assert("00000100"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "00100000" => "00100000", "00100001" => "00100001", "00010000" => "00010000", "00010001" => "00010001", "00001000" => "00001000", "00001001" => "00001001", "00000100" => "00000100", "00000101" => "00000101", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 223 (0xdf) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_00d7 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.8 IL_000f: bne.un IL_00d7 IL_0014: ldarg.0 IL_0015: ldc.i4.7 IL_0016: call "char string.this[int].get" IL_001b: stloc.2 IL_001c: ldloc.2 IL_001d: ldc.i4.s 48 IL_001f: beq.s IL_002b IL_0021: ldloc.2 IL_0022: ldc.i4.s 49 IL_0024: beq.s IL_0061 IL_0026: br IL_00d7 IL_002b: ldarg.0 IL_002c: ldstr "00100000" IL_0031: call "bool string.op_Equality(string, string)" IL_0036: brtrue.s IL_0097 IL_0038: ldarg.0 IL_0039: ldstr "00010000" IL_003e: call "bool string.op_Equality(string, string)" IL_0043: brtrue.s IL_00a7 IL_0045: ldarg.0 IL_0046: ldstr "00001000" IL_004b: call "bool string.op_Equality(string, string)" IL_0050: brtrue.s IL_00b7 IL_0052: ldarg.0 IL_0053: ldstr "00000100" IL_0058: call "bool string.op_Equality(string, string)" IL_005d: brtrue.s IL_00c7 IL_005f: br.s IL_00d7 IL_0061: ldarg.0 IL_0062: ldstr "00100001" IL_0067: call "bool string.op_Equality(string, string)" IL_006c: brtrue.s IL_009f IL_006e: ldarg.0 IL_006f: ldstr "00010001" IL_0074: call "bool string.op_Equality(string, string)" IL_0079: brtrue.s IL_00af IL_007b: ldarg.0 IL_007c: ldstr "00001001" IL_0081: call "bool string.op_Equality(string, string)" IL_0086: brtrue.s IL_00bf IL_0088: ldarg.0 IL_0089: ldstr "00000101" IL_008e: call "bool string.op_Equality(string, string)" IL_0093: brtrue.s IL_00cf IL_0095: br.s IL_00d7 IL_0097: ldstr "00100000" IL_009c: stloc.0 IL_009d: br.s IL_00dd IL_009f: ldstr "00100001" IL_00a4: stloc.0 IL_00a5: br.s IL_00dd IL_00a7: ldstr "00010000" IL_00ac: stloc.0 IL_00ad: br.s IL_00dd IL_00af: ldstr "00010001" IL_00b4: stloc.0 IL_00b5: br.s IL_00dd IL_00b7: ldstr "00001000" IL_00bc: stloc.0 IL_00bd: br.s IL_00dd IL_00bf: ldstr "00001001" IL_00c4: stloc.0 IL_00c5: br.s IL_00dd IL_00c7: ldstr "00000100" IL_00cc: stloc.0 IL_00cd: br.s IL_00dd IL_00cf: ldstr "00000101" IL_00d4: stloc.0 IL_00d5: br.s IL_00dd IL_00d7: ldstr "default" IL_00dc: stloc.0 IL_00dd: ldloc.0 IL_00de: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void AcceptCommand() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/mono/wasm/debugger/BrowserDebugProxy/MonoProxy.cs#L274-L572 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert(null, "default"); assert("", "default"); assert("DotnetDebugger.setDebuggerProperty", "19"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { switch (value) { case "Target.attachToTarget": return "1"; case "Debugger.enable": return "2"; case "Debugger.getScriptSource": return "3"; case "Runtime.compileScript": return "4"; case "Debugger.getPossibleBreakpoints": return "5"; case "Debugger.setBreakpoint": return "6"; case "Debugger.setBreakpointByUrl": return "7"; case "Debugger.removeBreakpoint": return "8"; case "Debugger.resume": return "9"; case "Debugger.stepInto": return "10"; case "Debugger.setVariableValue": return "11"; case "Debugger.stepOut": return "12"; case "Debugger.stepOver": return "13"; case "Runtime.evaluate": return "14"; case "Debugger.evaluateOnCallFrame": return "15"; case "Runtime.getProperties": return "16"; case "Runtime.releaseObject": return "17"; case "Debugger.setPauseOnExceptions": return "18"; case "DotnetDebugger.setDebuggerProperty": return "19"; case "DotnetDebugger.setNextIP": return "20"; case "DotnetDebugger.applyUpdates": return "21"; case "DotnetDebugger.addSymbolServerUrl": return "22"; case "DotnetDebugger.getMethodLocation": return "23"; case "Runtime.callFunctionOn": return "24"; default: return "default"; } } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 1022 (0x3fe) .maxstack 2 .locals init (int V_0, char V_1) IL_0000: ldarg.0 IL_0001: brfalse IL_03f8 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.0 IL_000d: ldloc.0 IL_000e: ldc.i4.s 15 IL_0010: sub IL_0011: switch ( IL_00a2, IL_0153, IL_0135, IL_03f8, IL_03f8, IL_03f8, IL_006b, IL_00dd, IL_03f8, IL_00c0, IL_0117, IL_03f8, IL_00fa, IL_02ff, IL_0314, IL_03f8, IL_0218, IL_0353, IL_033e, IL_0329) IL_0066: br IL_03f8 IL_006b: ldarg.0 IL_006c: ldc.i4.8 IL_006d: call "char string.this[int].get" IL_0072: stloc.1 IL_0073: ldloc.1 IL_0074: ldc.i4.s 103 IL_0076: bgt.un.s IL_008d IL_0078: ldloc.1 IL_0079: ldc.i4.s 99 IL_007b: beq IL_0185 IL_0080: ldloc.1 IL_0081: ldc.i4.s 103 IL_0083: beq IL_019a IL_0088: br IL_03f8 IL_008d: ldloc.1 IL_008e: ldc.i4.s 114 IL_0090: beq IL_01af IL_0095: ldloc.1 IL_0096: ldc.i4.s 116 IL_0098: beq IL_0170 IL_009d: br IL_03f8 IL_00a2: ldarg.0 IL_00a3: ldc.i4.s 9 IL_00a5: call "char string.this[int].get" IL_00aa: stloc.1 IL_00ab: ldloc.1 IL_00ac: ldc.i4.s 101 IL_00ae: beq IL_01c4 IL_00b3: ldloc.1 IL_00b4: ldc.i4.s 114 IL_00b6: beq IL_01d9 IL_00bb: br IL_03f8 IL_00c0: ldarg.0 IL_00c1: ldc.i4.1 IL_00c2: call "char string.this[int].get" IL_00c7: stloc.1 IL_00c8: ldloc.1 IL_00c9: ldc.i4.s 101 IL_00cb: beq IL_01ee IL_00d0: ldloc.1 IL_00d1: ldc.i4.s 111 IL_00d3: beq IL_0203 IL_00d8: br IL_03f8 IL_00dd: ldarg.0 IL_00de: ldc.i4.0 IL_00df: call "char string.this[int].get" IL_00e4: stloc.1 IL_00e5: ldloc.1 IL_00e6: ldc.i4.s 68 IL_00e8: beq IL_022d IL_00ed: ldloc.1 IL_00ee: ldc.i4.s 82 IL_00f0: beq IL_0242 IL_00f5: br IL_03f8 IL_00fa: ldarg.0 IL_00fb: ldc.i4.1 IL_00fc: call "char string.this[int].get" IL_0101: stloc.1 IL_0102: ldloc.1 IL_0103: ldc.i4.s 101 IL_0105: beq IL_0257 IL_010a: ldloc.1 IL_010b: ldc.i4.s 111 IL_010d: beq IL_026c IL_0112: br IL_03f8 IL_0117: ldarg.0 IL_0118: ldc.i4.s 9 IL_011a: call "char string.this[int].get" IL_011f: stloc.1 IL_0120: ldloc.1 IL_0121: ldc.i4.s 114 IL_0123: beq IL_0281 IL_0128: ldloc.1 IL_0129: ldc.i4.s 115 IL_012b: beq IL_0296 IL_0130: br IL_03f8 IL_0135: ldarg.0 IL_0136: ldc.i4.s 13 IL_0138: call "char string.this[int].get" IL_013d: stloc.1 IL_013e: ldloc.1 IL_013f: ldc.i4.s 73 IL_0141: beq IL_02ab IL_0146: ldloc.1 IL_0147: ldc.i4.s 79 IL_0149: beq IL_02c0 IL_014e: br IL_03f8 IL_0153: ldarg.0 IL_0154: ldc.i4.0 IL_0155: call "char string.this[int].get" IL_015a: stloc.1 IL_015b: ldloc.1 IL_015c: ldc.i4.s 68 IL_015e: beq IL_02d5 IL_0163: ldloc.1 IL_0164: ldc.i4.s 82 IL_0166: beq IL_02ea IL_016b: br IL_03f8 IL_0170: ldarg.0 IL_0171: ldstr "Target.attachToTarget" IL_0176: call "bool string.op_Equality(string, string)" IL_017b: brtrue IL_0368 IL_0180: br IL_03f8 IL_0185: ldarg.0 IL_0186: ldstr "Runtime.compileScript" IL_018b: call "bool string.op_Equality(string, string)" IL_0190: brtrue IL_037a IL_0195: br IL_03f8 IL_019a: ldarg.0 IL_019b: ldstr "Runtime.getProperties" IL_01a0: call "bool string.op_Equality(string, string)" IL_01a5: brtrue IL_03c2 IL_01aa: br IL_03f8 IL_01af: ldarg.0 IL_01b0: ldstr "Runtime.releaseObject" IL_01b5: call "bool string.op_Equality(string, string)" IL_01ba: brtrue IL_03c8 IL_01bf: br IL_03f8 IL_01c4: ldarg.0 IL_01c5: ldstr "Debugger.enable" IL_01ca: call "bool string.op_Equality(string, string)" IL_01cf: brtrue IL_036e IL_01d4: br IL_03f8 IL_01d9: ldarg.0 IL_01da: ldstr "Debugger.resume" IL_01df: call "bool string.op_Equality(string, string)" IL_01e4: brtrue IL_0398 IL_01e9: br IL_03f8 IL_01ee: ldarg.0 IL_01ef: ldstr "Debugger.getScriptSource" IL_01f4: call "bool string.op_Equality(string, string)" IL_01f9: brtrue IL_0374 IL_01fe: br IL_03f8 IL_0203: ldarg.0 IL_0204: ldstr "DotnetDebugger.setNextIP" IL_0209: call "bool string.op_Equality(string, string)" IL_020e: brtrue IL_03da IL_0213: br IL_03f8 IL_0218: ldarg.0 IL_0219: ldstr "Debugger.getPossibleBreakpoints" IL_021e: call "bool string.op_Equality(string, string)" IL_0223: brtrue IL_0380 IL_0228: br IL_03f8 IL_022d: ldarg.0 IL_022e: ldstr "Debugger.setBreakpoint" IL_0233: call "bool string.op_Equality(string, string)" IL_0238: brtrue IL_0386 IL_023d: br IL_03f8 IL_0242: ldarg.0 IL_0243: ldstr "Runtime.callFunctionOn" IL_0248: call "bool string.op_Equality(string, string)" IL_024d: brtrue IL_03f2 IL_0252: br IL_03f8 IL_0257: ldarg.0 IL_0258: ldstr "Debugger.setBreakpointByUrl" IL_025d: call "bool string.op_Equality(string, string)" IL_0262: brtrue IL_038c IL_0267: br IL_03f8 IL_026c: ldarg.0 IL_026d: ldstr "DotnetDebugger.applyUpdates" IL_0272: call "bool string.op_Equality(string, string)" IL_0277: brtrue IL_03e0 IL_027c: br IL_03f8 IL_0281: ldarg.0 IL_0282: ldstr "Debugger.removeBreakpoint" IL_0287: call "bool string.op_Equality(string, string)" IL_028c: brtrue IL_0392 IL_0291: br IL_03f8 IL_0296: ldarg.0 IL_0297: ldstr "Debugger.setVariableValue" IL_029c: call "bool string.op_Equality(string, string)" IL_02a1: brtrue IL_03a4 IL_02a6: br IL_03f8 IL_02ab: ldarg.0 IL_02ac: ldstr "Debugger.stepInto" IL_02b1: call "bool string.op_Equality(string, string)" IL_02b6: brtrue IL_039e IL_02bb: br IL_03f8 IL_02c0: ldarg.0 IL_02c1: ldstr "Debugger.stepOver" IL_02c6: call "bool string.op_Equality(string, string)" IL_02cb: brtrue IL_03b0 IL_02d0: br IL_03f8 IL_02d5: ldarg.0 IL_02d6: ldstr "Debugger.stepOut" IL_02db: call "bool string.op_Equality(string, string)" IL_02e0: brtrue IL_03aa IL_02e5: br IL_03f8 IL_02ea: ldarg.0 IL_02eb: ldstr "Runtime.evaluate" IL_02f0: call "bool string.op_Equality(string, string)" IL_02f5: brtrue IL_03b6 IL_02fa: br IL_03f8 IL_02ff: ldarg.0 IL_0300: ldstr "Debugger.evaluateOnCallFrame" IL_0305: call "bool string.op_Equality(string, string)" IL_030a: brtrue IL_03bc IL_030f: br IL_03f8 IL_0314: ldarg.0 IL_0315: ldstr "Debugger.setPauseOnExceptions" IL_031a: call "bool string.op_Equality(string, string)" IL_031f: brtrue IL_03ce IL_0324: br IL_03f8 IL_0329: ldarg.0 IL_032a: ldstr "DotnetDebugger.setDebuggerProperty" IL_032f: call "bool string.op_Equality(string, string)" IL_0334: brtrue IL_03d4 IL_0339: br IL_03f8 IL_033e: ldarg.0 IL_033f: ldstr "DotnetDebugger.addSymbolServerUrl" IL_0344: call "bool string.op_Equality(string, string)" IL_0349: brtrue IL_03e6 IL_034e: br IL_03f8 IL_0353: ldarg.0 IL_0354: ldstr "DotnetDebugger.getMethodLocation" IL_0359: call "bool string.op_Equality(string, string)" IL_035e: brtrue IL_03ec IL_0363: br IL_03f8 IL_0368: ldstr "1" IL_036d: ret IL_036e: ldstr "2" IL_0373: ret IL_0374: ldstr "3" IL_0379: ret IL_037a: ldstr "4" IL_037f: ret IL_0380: ldstr "5" IL_0385: ret IL_0386: ldstr "6" IL_038b: ret IL_038c: ldstr "7" IL_0391: ret IL_0392: ldstr "8" IL_0397: ret IL_0398: ldstr "9" IL_039d: ret IL_039e: ldstr "10" IL_03a3: ret IL_03a4: ldstr "11" IL_03a9: ret IL_03aa: ldstr "12" IL_03af: ret IL_03b0: ldstr "13" IL_03b5: ret IL_03b6: ldstr "14" IL_03bb: ret IL_03bc: ldstr "15" IL_03c1: ret IL_03c2: ldstr "16" IL_03c7: ret IL_03c8: ldstr "17" IL_03cd: ret IL_03ce: ldstr "18" IL_03d3: ret IL_03d4: ldstr "19" IL_03d9: ret IL_03da: ldstr "20" IL_03df: ret IL_03e0: ldstr "21" IL_03e5: ret IL_03e6: ldstr "22" IL_03eb: ret IL_03ec: ldstr "23" IL_03f1: ret IL_03f2: ldstr "24" IL_03f7: ret IL_03f8: ldstr "default" IL_03fd: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 1018 (0x3fa) .maxstack 2 .locals init (uint V_0) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.0 IL_0007: ldloc.0 IL_0008: ldc.i4 0xb508d68f IL_000d: bgt.un IL_00c2 IL_0012: ldloc.0 IL_0013: ldc.i4 0x4b092f03 IL_0018: bgt.un.s IL_006e IL_001a: ldloc.0 IL_001b: ldc.i4 0x1e768f83 IL_0020: bgt.un.s IL_0048 IL_0022: ldloc.0 IL_0023: ldc.i4 0x15a7290 IL_0028: beq IL_033a IL_002d: ldloc.0 IL_002e: ldc.i4 0x35576d8 IL_0033: beq IL_02e6 IL_0038: ldloc.0 IL_0039: ldc.i4 0x1e768f83 IL_003e: beq IL_0214 IL_0043: br IL_03f4 IL_0048: ldloc.0 IL_0049: ldc.i4 0x36ca30ef IL_004e: beq IL_0181 IL_0053: ldloc.0 IL_0054: ldc.i4 0x48313e0c IL_0059: beq IL_0229 IL_005e: ldloc.0 IL_005f: ldc.i4 0x4b092f03 IL_0064: beq IL_0292 IL_0069: br IL_03f4 IL_006e: ldloc.0 IL_006f: ldc.i4 0x7de76a02 IL_0074: bgt.un.s IL_009c IL_0076: ldloc.0 IL_0077: ldc.i4 0x4be2fe50 IL_007c: beq IL_027d IL_0081: ldloc.0 IL_0082: ldc.i4 0x6f7079ab IL_0087: beq IL_01ea IL_008c: ldloc.0 IL_008d: ldc.i4 0x7de76a02 IL_0092: beq IL_02fb IL_0097: br IL_03f4 IL_009c: ldloc.0 IL_009d: ldc.i4 0x925e89c3 IL_00a2: beq IL_02bc IL_00a7: ldloc.0 IL_00a8: ldc.i4 0xa0ca5e2a IL_00ad: beq IL_034f IL_00b2: ldloc.0 IL_00b3: ldc.i4 0xb508d68f IL_00b8: beq IL_0325 IL_00bd: br IL_03f4 IL_00c2: ldloc.0 IL_00c3: ldc.i4 0xd3193fe0 IL_00c8: bgt.un.s IL_011b IL_00ca: ldloc.0 IL_00cb: ldc.i4 0xc16fb451 IL_00d0: bgt.un.s IL_00f8 IL_00d2: ldloc.0 IL_00d3: ldc.i4 0xbc145742 IL_00d8: beq IL_0196 IL_00dd: ldloc.0 IL_00de: ldc.i4 0xbe721584 IL_00e3: beq IL_0310 IL_00e8: ldloc.0 IL_00e9: ldc.i4 0xc16fb451 IL_00ee: beq IL_01c0 IL_00f3: br IL_03f4 IL_00f8: ldloc.0 IL_00f9: ldc.i4 0xc49a4297 IL_00fe: beq.s IL_016c IL_0100: ldloc.0 IL_0101: ldc.i4 0xd07d7ccf IL_0106: beq IL_01ab IL_010b: ldloc.0 IL_010c: ldc.i4 0xd3193fe0 IL_0111: beq IL_0268 IL_0116: br IL_03f4 IL_011b: ldloc.0 IL_011c: ldc.i4 0xdee508e0 IL_0121: bgt.un.s IL_0149 IL_0123: ldloc.0 IL_0124: ldc.i4 0xd8f74285 IL_0129: beq IL_02d1 IL_012e: ldloc.0 IL_012f: ldc.i4 0xde4a6def IL_0134: beq IL_01ff IL_0139: ldloc.0 IL_013a: ldc.i4 0xdee508e0 IL_013f: beq IL_02a7 IL_0144: br IL_03f4 IL_0149: ldloc.0 IL_014a: ldc.i4 0xe0c38306 IL_014f: beq IL_0253 IL_0154: ldloc.0 IL_0155: ldc.i4 0xfbe9f177 IL_015a: beq.s IL_01d5 IL_015c: ldloc.0 IL_015d: ldc.i4 0xfc282ff1 IL_0162: beq IL_023e IL_0167: br IL_03f4 IL_016c: ldarg.0 IL_016d: ldstr "Target.attachToTarget" IL_0172: call "bool string.op_Equality(string, string)" IL_0177: brtrue IL_0364 IL_017c: br IL_03f4 IL_0181: ldarg.0 IL_0182: ldstr "Debugger.enable" IL_0187: call "bool string.op_Equality(string, string)" IL_018c: brtrue IL_036a IL_0191: br IL_03f4 IL_0196: ldarg.0 IL_0197: ldstr "Debugger.getScriptSource" IL_019c: call "bool string.op_Equality(string, string)" IL_01a1: brtrue IL_0370 IL_01a6: br IL_03f4 IL_01ab: ldarg.0 IL_01ac: ldstr "Runtime.compileScript" IL_01b1: call "bool string.op_Equality(string, string)" IL_01b6: brtrue IL_0376 IL_01bb: br IL_03f4 IL_01c0: ldarg.0 IL_01c1: ldstr "Debugger.getPossibleBreakpoints" IL_01c6: call "bool string.op_Equality(string, string)" IL_01cb: brtrue IL_037c IL_01d0: br IL_03f4 IL_01d5: ldarg.0 IL_01d6: ldstr "Debugger.setBreakpoint" IL_01db: call "bool string.op_Equality(string, string)" IL_01e0: brtrue IL_0382 IL_01e5: br IL_03f4 IL_01ea: ldarg.0 IL_01eb: ldstr "Debugger.setBreakpointByUrl" IL_01f0: call "bool string.op_Equality(string, string)" IL_01f5: brtrue IL_0388 IL_01fa: br IL_03f4 IL_01ff: ldarg.0 IL_0200: ldstr "Debugger.removeBreakpoint" IL_0205: call "bool string.op_Equality(string, string)" IL_020a: brtrue IL_038e IL_020f: br IL_03f4 IL_0214: ldarg.0 IL_0215: ldstr "Debugger.resume" IL_021a: call "bool string.op_Equality(string, string)" IL_021f: brtrue IL_0394 IL_0224: br IL_03f4 IL_0229: ldarg.0 IL_022a: ldstr "Debugger.stepInto" IL_022f: call "bool string.op_Equality(string, string)" IL_0234: brtrue IL_039a IL_0239: br IL_03f4 IL_023e: ldarg.0 IL_023f: ldstr "Debugger.setVariableValue" IL_0244: call "bool string.op_Equality(string, string)" IL_0249: brtrue IL_03a0 IL_024e: br IL_03f4 IL_0253: ldarg.0 IL_0254: ldstr "Debugger.stepOut" IL_0259: call "bool string.op_Equality(string, string)" IL_025e: brtrue IL_03a6 IL_0263: br IL_03f4 IL_0268: ldarg.0 IL_0269: ldstr "Debugger.stepOver" IL_026e: call "bool string.op_Equality(string, string)" IL_0273: brtrue IL_03ac IL_0278: br IL_03f4 IL_027d: ldarg.0 IL_027e: ldstr "Runtime.evaluate" IL_0283: call "bool string.op_Equality(string, string)" IL_0288: brtrue IL_03b2 IL_028d: br IL_03f4 IL_0292: ldarg.0 IL_0293: ldstr "Debugger.evaluateOnCallFrame" IL_0298: call "bool string.op_Equality(string, string)" IL_029d: brtrue IL_03b8 IL_02a2: br IL_03f4 IL_02a7: ldarg.0 IL_02a8: ldstr "Runtime.getProperties" IL_02ad: call "bool string.op_Equality(string, string)" IL_02b2: brtrue IL_03be IL_02b7: br IL_03f4 IL_02bc: ldarg.0 IL_02bd: ldstr "Runtime.releaseObject" IL_02c2: call "bool string.op_Equality(string, string)" IL_02c7: brtrue IL_03c4 IL_02cc: br IL_03f4 IL_02d1: ldarg.0 IL_02d2: ldstr "Debugger.setPauseOnExceptions" IL_02d7: call "bool string.op_Equality(string, string)" IL_02dc: brtrue IL_03ca IL_02e1: br IL_03f4 IL_02e6: ldarg.0 IL_02e7: ldstr "DotnetDebugger.setDebuggerProperty" IL_02ec: call "bool string.op_Equality(string, string)" IL_02f1: brtrue IL_03d0 IL_02f6: br IL_03f4 IL_02fb: ldarg.0 IL_02fc: ldstr "DotnetDebugger.setNextIP" IL_0301: call "bool string.op_Equality(string, string)" IL_0306: brtrue IL_03d6 IL_030b: br IL_03f4 IL_0310: ldarg.0 IL_0311: ldstr "DotnetDebugger.applyUpdates" IL_0316: call "bool string.op_Equality(string, string)" IL_031b: brtrue IL_03dc IL_0320: br IL_03f4 IL_0325: ldarg.0 IL_0326: ldstr "DotnetDebugger.addSymbolServerUrl" IL_032b: call "bool string.op_Equality(string, string)" IL_0330: brtrue IL_03e2 IL_0335: br IL_03f4 IL_033a: ldarg.0 IL_033b: ldstr "DotnetDebugger.getMethodLocation" IL_0340: call "bool string.op_Equality(string, string)" IL_0345: brtrue IL_03e8 IL_034a: br IL_03f4 IL_034f: ldarg.0 IL_0350: ldstr "Runtime.callFunctionOn" IL_0355: call "bool string.op_Equality(string, string)" IL_035a: brtrue IL_03ee IL_035f: br IL_03f4 IL_0364: ldstr "1" IL_0369: ret IL_036a: ldstr "2" IL_036f: ret IL_0370: ldstr "3" IL_0375: ret IL_0376: ldstr "4" IL_037b: ret IL_037c: ldstr "5" IL_0381: ret IL_0382: ldstr "6" IL_0387: ret IL_0388: ldstr "7" IL_038d: ret IL_038e: ldstr "8" IL_0393: ret IL_0394: ldstr "9" IL_0399: ret IL_039a: ldstr "10" IL_039f: ret IL_03a0: ldstr "11" IL_03a5: ret IL_03a6: ldstr "12" IL_03ab: ret IL_03ac: ldstr "13" IL_03b1: ret IL_03b2: ldstr "14" IL_03b7: ret IL_03b8: ldstr "15" IL_03bd: ret IL_03be: ldstr "16" IL_03c3: ret IL_03c4: ldstr "17" IL_03c9: ret IL_03ca: ldstr "18" IL_03cf: ret IL_03d0: ldstr "19" IL_03d5: ret IL_03d6: ldstr "20" IL_03db: ret IL_03dc: ldstr "21" IL_03e1: ret IL_03e2: ldstr "22" IL_03e7: ret IL_03e8: ldstr "23" IL_03ed: ret IL_03ee: ldstr "24" IL_03f3: ret IL_03f4: ldstr "default" IL_03f9: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void IsOperator() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/tools/illink/src/linker/Linker.Steps/DiscoverCustomOperatorsHandler.cs#L156-L221 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert(null, "default"); assert("", "default"); assert("GreaterThanOrEqual", "2"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { switch (value) { case "UnaryPlus": case "UnaryNegation": case "LogicalNot": case "OnesComplement": case "Increment": case "Decrement": case "True": case "False": return "1"; case "Addition": case "Subtraction": case "Multiply": case "Division": case "Modulus": case "BitwiseAnd": case "BitwiseOr": case "ExclusiveOr": case "LeftShift": case "RightShift": case "Equality": case "Inequality": case "LessThan": case "GreaterThan": case "LessThanOrEqual": case "GreaterThanOrEqual": return "2"; case "Implicit": case "Explicit": return "3"; default: return "default"; } } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 852 (0x354) .maxstack 2 .locals init (int V_0, char V_1) IL_0000: ldarg.0 IL_0001: brfalse IL_034e IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.0 IL_000d: ldloc.0 IL_000e: ldc.i4.4 IL_000f: sub IL_0010: switch ( IL_0231, IL_0246, IL_034e, IL_030f, IL_00cc, IL_0056, IL_0095, IL_0125, IL_034e, IL_01b3, IL_021c, IL_031e, IL_034e, IL_034e, IL_032d) IL_0051: br IL_034e IL_0056: ldarg.0 IL_0057: ldc.i4.0 IL_0058: call "char string.this[int].get" IL_005d: stloc.1 IL_005e: ldloc.1 IL_005f: ldc.i4.s 68 IL_0061: bgt.un.s IL_0078 IL_0063: ldloc.1 IL_0064: ldc.i4.s 66 IL_0066: beq IL_0189 IL_006b: ldloc.1 IL_006c: ldc.i4.s 68 IL_006e: beq IL_0174 IL_0073: br IL_034e IL_0078: ldloc.1 IL_0079: ldc.i4.s 73 IL_007b: beq IL_015f IL_0080: ldloc.1 IL_0081: ldc.i4.s 76 IL_0083: beq IL_019e IL_0088: ldloc.1 IL_0089: ldc.i4.s 85 IL_008b: beq IL_014a IL_0090: br IL_034e IL_0095: ldarg.0 IL_0096: ldc.i4.0 IL_0097: call "char string.this[int].get" IL_009c: stloc.1 IL_009d: ldloc.1 IL_009e: ldc.i4.s 73 IL_00a0: bgt.un.s IL_00b7 IL_00a2: ldloc.1 IL_00a3: ldc.i4.s 66 IL_00a5: beq IL_01dd IL_00aa: ldloc.1 IL_00ab: ldc.i4.s 73 IL_00ad: beq IL_0207 IL_00b2: br IL_034e IL_00b7: ldloc.1 IL_00b8: ldc.i4.s 76 IL_00ba: beq IL_01c8 IL_00bf: ldloc.1 IL_00c0: ldc.i4.s 82 IL_00c2: beq IL_01f2 IL_00c7: br IL_034e IL_00cc: ldarg.0 IL_00cd: ldc.i4.1 IL_00ce: call "char string.this[int].get" IL_00d3: stloc.1 IL_00d4: ldloc.1 IL_00d5: ldc.i4.s 105 IL_00d7: bgt.un.s IL_00f6 IL_00d9: ldloc.1 IL_00da: ldc.i4.s 100 IL_00dc: beq IL_025b IL_00e1: ldloc.1 IL_00e2: ldc.i4.s 101 IL_00e4: beq IL_02af IL_00e9: ldloc.1 IL_00ea: ldc.i4.s 105 IL_00ec: beq IL_0285 IL_00f1: br IL_034e IL_00f6: ldloc.1 IL_00f7: ldc.i4.s 113 IL_00f9: bgt.un.s IL_0110 IL_00fb: ldloc.1 IL_00fc: ldc.i4.s 109 IL_00fe: beq IL_02c4 IL_0103: ldloc.1 IL_0104: ldc.i4.s 113 IL_0106: beq IL_029a IL_010b: br IL_034e IL_0110: ldloc.1 IL_0111: ldc.i4.s 117 IL_0113: beq IL_0270 IL_0118: ldloc.1 IL_0119: ldc.i4.s 120 IL_011b: beq IL_02d3 IL_0120: br IL_034e IL_0125: ldarg.0 IL_0126: ldc.i4.0 IL_0127: call "char string.this[int].get" IL_012c: stloc.1 IL_012d: ldloc.1 IL_012e: ldc.i4.s 69 IL_0130: beq IL_02f1 IL_0135: ldloc.1 IL_0136: ldc.i4.s 71 IL_0138: beq IL_0300 IL_013d: ldloc.1 IL_013e: ldc.i4.s 83 IL_0140: beq IL_02e2 IL_0145: br IL_034e IL_014a: ldarg.0 IL_014b: ldstr "UnaryPlus" IL_0150: call "bool string.op_Equality(string, string)" IL_0155: brtrue IL_033c IL_015a: br IL_034e IL_015f: ldarg.0 IL_0160: ldstr "Increment" IL_0165: call "bool string.op_Equality(string, string)" IL_016a: brtrue IL_033c IL_016f: br IL_034e IL_0174: ldarg.0 IL_0175: ldstr "Decrement" IL_017a: call "bool string.op_Equality(string, string)" IL_017f: brtrue IL_033c IL_0184: br IL_034e IL_0189: ldarg.0 IL_018a: ldstr "BitwiseOr" IL_018f: call "bool string.op_Equality(string, string)" IL_0194: brtrue IL_0342 IL_0199: br IL_034e IL_019e: ldarg.0 IL_019f: ldstr "LeftShift" IL_01a4: call "bool string.op_Equality(string, string)" IL_01a9: brtrue IL_0342 IL_01ae: br IL_034e IL_01b3: ldarg.0 IL_01b4: ldstr "UnaryNegation" IL_01b9: call "bool string.op_Equality(string, string)" IL_01be: brtrue IL_033c IL_01c3: br IL_034e IL_01c8: ldarg.0 IL_01c9: ldstr "LogicalNot" IL_01ce: call "bool string.op_Equality(string, string)" IL_01d3: brtrue IL_033c IL_01d8: br IL_034e IL_01dd: ldarg.0 IL_01de: ldstr "BitwiseAnd" IL_01e3: call "bool string.op_Equality(string, string)" IL_01e8: brtrue IL_0342 IL_01ed: br IL_034e IL_01f2: ldarg.0 IL_01f3: ldstr "RightShift" IL_01f8: call "bool string.op_Equality(string, string)" IL_01fd: brtrue IL_0342 IL_0202: br IL_034e IL_0207: ldarg.0 IL_0208: ldstr "Inequality" IL_020d: call "bool string.op_Equality(string, string)" IL_0212: brtrue IL_0342 IL_0217: br IL_034e IL_021c: ldarg.0 IL_021d: ldstr "OnesComplement" IL_0222: call "bool string.op_Equality(string, string)" IL_0227: brtrue IL_033c IL_022c: br IL_034e IL_0231: ldarg.0 IL_0232: ldstr "True" IL_0237: call "bool string.op_Equality(string, string)" IL_023c: brtrue IL_033c IL_0241: br IL_034e IL_0246: ldarg.0 IL_0247: ldstr "False" IL_024c: call "bool string.op_Equality(string, string)" IL_0251: brtrue IL_033c IL_0256: br IL_034e IL_025b: ldarg.0 IL_025c: ldstr "Addition" IL_0261: call "bool string.op_Equality(string, string)" IL_0266: brtrue IL_0342 IL_026b: br IL_034e IL_0270: ldarg.0 IL_0271: ldstr "Multiply" IL_0276: call "bool string.op_Equality(string, string)" IL_027b: brtrue IL_0342 IL_0280: br IL_034e IL_0285: ldarg.0 IL_0286: ldstr "Division" IL_028b: call "bool string.op_Equality(string, string)" IL_0290: brtrue IL_0342 IL_0295: br IL_034e IL_029a: ldarg.0 IL_029b: ldstr "Equality" IL_02a0: call "bool string.op_Equality(string, string)" IL_02a5: brtrue IL_0342 IL_02aa: br IL_034e IL_02af: ldarg.0 IL_02b0: ldstr "LessThan" IL_02b5: call "bool string.op_Equality(string, string)" IL_02ba: brtrue IL_0342 IL_02bf: br IL_034e IL_02c4: ldarg.0 IL_02c5: ldstr "Implicit" IL_02ca: call "bool string.op_Equality(string, string)" IL_02cf: brtrue.s IL_0348 IL_02d1: br.s IL_034e IL_02d3: ldarg.0 IL_02d4: ldstr "Explicit" IL_02d9: call "bool string.op_Equality(string, string)" IL_02de: brtrue.s IL_0348 IL_02e0: br.s IL_034e IL_02e2: ldarg.0 IL_02e3: ldstr "Subtraction" IL_02e8: call "bool string.op_Equality(string, string)" IL_02ed: brtrue.s IL_0342 IL_02ef: br.s IL_034e IL_02f1: ldarg.0 IL_02f2: ldstr "ExclusiveOr" IL_02f7: call "bool string.op_Equality(string, string)" IL_02fc: brtrue.s IL_0342 IL_02fe: br.s IL_034e IL_0300: ldarg.0 IL_0301: ldstr "GreaterThan" IL_0306: call "bool string.op_Equality(string, string)" IL_030b: brtrue.s IL_0342 IL_030d: br.s IL_034e IL_030f: ldarg.0 IL_0310: ldstr "Modulus" IL_0315: call "bool string.op_Equality(string, string)" IL_031a: brtrue.s IL_0342 IL_031c: br.s IL_034e IL_031e: ldarg.0 IL_031f: ldstr "LessThanOrEqual" IL_0324: call "bool string.op_Equality(string, string)" IL_0329: brtrue.s IL_0342 IL_032b: br.s IL_034e IL_032d: ldarg.0 IL_032e: ldstr "GreaterThanOrEqual" IL_0333: call "bool string.op_Equality(string, string)" IL_0338: brtrue.s IL_0342 IL_033a: br.s IL_034e IL_033c: ldstr "1" IL_0341: ret IL_0342: ldstr "2" IL_0347: ret IL_0348: ldstr "3" IL_034d: ret IL_034e: ldstr "default" IL_0353: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void EmitIL() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/coreclr/tools/Common/TypeSystem/IL/Stubs/UnsafeIntrinsics.cs#L21-L94 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("AsPointer"); assert("As"); assert("AsRef"); assert("Add"); assert("AddByteOffset"); assert("Copy"); assert("CopyBlock"); assert("CopyBlockUnaligned"); assert("InitBlock"); assert("InitBlockUnaligned"); assert("Read"); assert("Write"); assert("ReadUnaligned"); assert("WriteUnaligned"); assert("AreSame"); assert("ByteOffset"); assert("NullRef"); assert("IsNullRef"); assert("SkipInit"); assert("Subtract"); assert("SubtractByteOffset"); assert("Unbox"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "AsPointer" => "AsPointer", "As" => "As", "AsRef" => "AsRef", "Add" => "Add", "AddByteOffset" => "AddByteOffset", "Copy" => "Copy", "CopyBlock" => "CopyBlock", "CopyBlockUnaligned" => "CopyBlockUnaligned", "InitBlock" => "InitBlock", "InitBlockUnaligned" => "InitBlockUnaligned", "Read" => "Read", "Write" => "Write", "ReadUnaligned" => "ReadUnaligned", "WriteUnaligned" => "WriteUnaligned", "AreSame" => "AreSame", "ByteOffset" => "ByteOffset", "NullRef" => "NullRef", "IsNullRef" => "IsNullRef", "SkipInit" => "SkipInit", "Subtract" => "Subtract", "SubtractByteOffset" => "SubtractByteOffset", "Unbox" => "Unbox", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 1003 (0x3eb) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_03e3 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.2 IL_000f: sub IL_0010: switch ( IL_01a7, IL_01fb, IL_00d7, IL_0095, IL_03e3, IL_0119, IL_0136, IL_005e, IL_02e2, IL_03e3, IL_03e3, IL_00ba, IL_02a3, IL_03e3, IL_03e3, IL_03e3, IL_00f4) IL_0059: br IL_03e3 IL_005e: ldarg.0 IL_005f: ldc.i4.2 IL_0060: call "char string.this[int].get" IL_0065: stloc.2 IL_0066: ldloc.2 IL_0067: ldc.i4.s 80 IL_0069: bgt.un.s IL_0080 IL_006b: ldloc.2 IL_006c: ldc.i4.s 78 IL_006e: beq IL_0192 IL_0073: ldloc.2 IL_0074: ldc.i4.s 80 IL_0076: beq IL_0153 IL_007b: br IL_03e3 IL_0080: ldloc.2 IL_0081: ldc.i4.s 105 IL_0083: beq IL_017d IL_0088: ldloc.2 IL_0089: ldc.i4.s 112 IL_008b: beq IL_0168 IL_0090: br IL_03e3 IL_0095: ldarg.0 IL_0096: ldc.i4.0 IL_0097: call "char string.this[int].get" IL_009c: stloc.2 IL_009d: ldloc.2 IL_009e: ldc.i4.s 65 IL_00a0: beq IL_01bc IL_00a5: ldloc.2 IL_00a6: ldc.i4.s 85 IL_00a8: beq IL_01e6 IL_00ad: ldloc.2 IL_00ae: ldc.i4.s 87 IL_00b0: beq IL_01d1 IL_00b5: br IL_03e3 IL_00ba: ldarg.0 IL_00bb: ldc.i4.0 IL_00bc: call "char string.this[int].get" IL_00c1: stloc.2 IL_00c2: ldloc.2 IL_00c3: ldc.i4.s 65 IL_00c5: beq IL_0210 IL_00ca: ldloc.2 IL_00cb: ldc.i4.s 82 IL_00cd: beq IL_0225 IL_00d2: br IL_03e3 IL_00d7: ldarg.0 IL_00d8: ldc.i4.0 IL_00d9: call "char string.this[int].get" IL_00de: stloc.2 IL_00df: ldloc.2 IL_00e0: ldc.i4.s 67 IL_00e2: beq IL_023a IL_00e7: ldloc.2 IL_00e8: ldc.i4.s 82 IL_00ea: beq IL_024f IL_00ef: br IL_03e3 IL_00f4: ldarg.0 IL_00f5: ldc.i4.0 IL_00f6: call "char string.this[int].get" IL_00fb: stloc.2 IL_00fc: ldloc.2 IL_00fd: ldc.i4.s 67 IL_00ff: beq IL_0264 IL_0104: ldloc.2 IL_0105: ldc.i4.s 73 IL_0107: beq IL_0279 IL_010c: ldloc.2 IL_010d: ldc.i4.s 83 IL_010f: beq IL_028e IL_0114: br IL_03e3 IL_0119: ldarg.0 IL_011a: ldc.i4.0 IL_011b: call "char string.this[int].get" IL_0120: stloc.2 IL_0121: ldloc.2 IL_0122: ldc.i4.s 65 IL_0124: beq IL_02b8 IL_0129: ldloc.2 IL_012a: ldc.i4.s 78 IL_012c: beq IL_02cd IL_0131: br IL_03e3 IL_0136: ldarg.0 IL_0137: ldc.i4.1 IL_0138: call "char string.this[int].get" IL_013d: stloc.2 IL_013e: ldloc.2 IL_013f: ldc.i4.s 107 IL_0141: beq IL_02f7 IL_0146: ldloc.2 IL_0147: ldc.i4.s 117 IL_0149: beq IL_030c IL_014e: br IL_03e3 IL_0153: ldarg.0 IL_0154: ldstr "AsPointer" IL_0159: call "bool string.op_Equality(string, string)" IL_015e: brtrue IL_0321 IL_0163: br IL_03e3 IL_0168: ldarg.0 IL_0169: ldstr "CopyBlock" IL_016e: call "bool string.op_Equality(string, string)" IL_0173: brtrue IL_0363 IL_0178: br IL_03e3 IL_017d: ldarg.0 IL_017e: ldstr "InitBlock" IL_0183: call "bool string.op_Equality(string, string)" IL_0188: brtrue IL_0373 IL_018d: br IL_03e3 IL_0192: ldarg.0 IL_0193: ldstr "IsNullRef" IL_0198: call "bool string.op_Equality(string, string)" IL_019d: brtrue IL_03bb IL_01a2: br IL_03e3 IL_01a7: ldarg.0 IL_01a8: ldstr "As" IL_01ad: call "bool string.op_Equality(string, string)" IL_01b2: brtrue IL_032c IL_01b7: br IL_03e3 IL_01bc: ldarg.0 IL_01bd: ldstr "AsRef" IL_01c2: call "bool string.op_Equality(string, string)" IL_01c7: brtrue IL_0337 IL_01cc: br IL_03e3 IL_01d1: ldarg.0 IL_01d2: ldstr "Write" IL_01d7: call "bool string.op_Equality(string, string)" IL_01dc: brtrue IL_038b IL_01e1: br IL_03e3 IL_01e6: ldarg.0 IL_01e7: ldstr "Unbox" IL_01ec: call "bool string.op_Equality(string, string)" IL_01f1: brtrue IL_03db IL_01f6: br IL_03e3 IL_01fb: ldarg.0 IL_01fc: ldstr "Add" IL_0201: call "bool string.op_Equality(string, string)" IL_0206: brtrue IL_0342 IL_020b: br IL_03e3 IL_0210: ldarg.0 IL_0211: ldstr "AddByteOffset" IL_0216: call "bool string.op_Equality(string, string)" IL_021b: brtrue IL_034d IL_0220: br IL_03e3 IL_0225: ldarg.0 IL_0226: ldstr "ReadUnaligned" IL_022b: call "bool string.op_Equality(string, string)" IL_0230: brtrue IL_0393 IL_0235: br IL_03e3 IL_023a: ldarg.0 IL_023b: ldstr "Copy" IL_0240: call "bool string.op_Equality(string, string)" IL_0245: brtrue IL_0358 IL_024a: br IL_03e3 IL_024f: ldarg.0 IL_0250: ldstr "Read" IL_0255: call "bool string.op_Equality(string, string)" IL_025a: brtrue IL_0383 IL_025f: br IL_03e3 IL_0264: ldarg.0 IL_0265: ldstr "CopyBlockUnaligned" IL_026a: call "bool string.op_Equality(string, string)" IL_026f: brtrue IL_036b IL_0274: br IL_03e3 IL_0279: ldarg.0 IL_027a: ldstr "InitBlockUnaligned" IL_027f: call "bool string.op_Equality(string, string)" IL_0284: brtrue IL_037b IL_0289: br IL_03e3 IL_028e: ldarg.0 IL_028f: ldstr "SubtractByteOffset" IL_0294: call "bool string.op_Equality(string, string)" IL_0299: brtrue IL_03d3 IL_029e: br IL_03e3 IL_02a3: ldarg.0 IL_02a4: ldstr "WriteUnaligned" IL_02a9: call "bool string.op_Equality(string, string)" IL_02ae: brtrue IL_039b IL_02b3: br IL_03e3 IL_02b8: ldarg.0 IL_02b9: ldstr "AreSame" IL_02be: call "bool string.op_Equality(string, string)" IL_02c3: brtrue IL_03a3 IL_02c8: br IL_03e3 IL_02cd: ldarg.0 IL_02ce: ldstr "NullRef" IL_02d3: call "bool string.op_Equality(string, string)" IL_02d8: brtrue IL_03b3 IL_02dd: br IL_03e3 IL_02e2: ldarg.0 IL_02e3: ldstr "ByteOffset" IL_02e8: call "bool string.op_Equality(string, string)" IL_02ed: brtrue IL_03ab IL_02f2: br IL_03e3 IL_02f7: ldarg.0 IL_02f8: ldstr "SkipInit" IL_02fd: call "bool string.op_Equality(string, string)" IL_0302: brtrue IL_03c3 IL_0307: br IL_03e3 IL_030c: ldarg.0 IL_030d: ldstr "Subtract" IL_0312: call "bool string.op_Equality(string, string)" IL_0317: brtrue IL_03cb IL_031c: br IL_03e3 IL_0321: ldstr "AsPointer" IL_0326: stloc.0 IL_0327: br IL_03e9 IL_032c: ldstr "As" IL_0331: stloc.0 IL_0332: br IL_03e9 IL_0337: ldstr "AsRef" IL_033c: stloc.0 IL_033d: br IL_03e9 IL_0342: ldstr "Add" IL_0347: stloc.0 IL_0348: br IL_03e9 IL_034d: ldstr "AddByteOffset" IL_0352: stloc.0 IL_0353: br IL_03e9 IL_0358: ldstr "Copy" IL_035d: stloc.0 IL_035e: br IL_03e9 IL_0363: ldstr "CopyBlock" IL_0368: stloc.0 IL_0369: br.s IL_03e9 IL_036b: ldstr "CopyBlockUnaligned" IL_0370: stloc.0 IL_0371: br.s IL_03e9 IL_0373: ldstr "InitBlock" IL_0378: stloc.0 IL_0379: br.s IL_03e9 IL_037b: ldstr "InitBlockUnaligned" IL_0380: stloc.0 IL_0381: br.s IL_03e9 IL_0383: ldstr "Read" IL_0388: stloc.0 IL_0389: br.s IL_03e9 IL_038b: ldstr "Write" IL_0390: stloc.0 IL_0391: br.s IL_03e9 IL_0393: ldstr "ReadUnaligned" IL_0398: stloc.0 IL_0399: br.s IL_03e9 IL_039b: ldstr "WriteUnaligned" IL_03a0: stloc.0 IL_03a1: br.s IL_03e9 IL_03a3: ldstr "AreSame" IL_03a8: stloc.0 IL_03a9: br.s IL_03e9 IL_03ab: ldstr "ByteOffset" IL_03b0: stloc.0 IL_03b1: br.s IL_03e9 IL_03b3: ldstr "NullRef" IL_03b8: stloc.0 IL_03b9: br.s IL_03e9 IL_03bb: ldstr "IsNullRef" IL_03c0: stloc.0 IL_03c1: br.s IL_03e9 IL_03c3: ldstr "SkipInit" IL_03c8: stloc.0 IL_03c9: br.s IL_03e9 IL_03cb: ldstr "Subtract" IL_03d0: stloc.0 IL_03d1: br.s IL_03e9 IL_03d3: ldstr "SubtractByteOffset" IL_03d8: stloc.0 IL_03d9: br.s IL_03e9 IL_03db: ldstr "Unbox" IL_03e0: stloc.0 IL_03e1: br.s IL_03e9 IL_03e3: ldstr "default" IL_03e8: stloc.0 IL_03e9: ldloc.0 IL_03ea: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 1003 (0x3eb) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x76692b6a IL_000d: bgt.un IL_00b7 IL_0012: ldloc.1 IL_0013: ldc.i4 0x5cb9b8dd IL_0018: bgt.un.s IL_0063 IL_001a: ldloc.1 IL_001b: ldc.i4 0x1e73dfe4 IL_0020: bgt.un.s IL_003d IL_0022: ldloc.1 IL_0023: ldc.i4 0x10bc73b2 IL_0028: beq IL_0153 IL_002d: ldloc.1 IL_002e: ldc.i4 0x1e73dfe4 IL_0033: beq IL_028e IL_0038: br IL_03e3 IL_003d: ldloc.1 IL_003e: ldc.i4 0x3c92fd81 IL_0043: beq IL_02e2 IL_0048: ldloc.1 IL_0049: ldc.i4 0x4f0befe5 IL_004e: beq IL_0225 IL_0053: ldloc.1 IL_0054: ldc.i4 0x5cb9b8dd IL_0059: beq IL_01d1 IL_005e: br IL_03e3 IL_0063: ldloc.1 IL_0064: ldc.i4 0x65710578 IL_0069: bgt.un.s IL_0091 IL_006b: ldloc.1 IL_006c: ldc.i4 0x5dd56ead IL_0071: beq IL_0168 IL_0076: ldloc.1 IL_0077: ldc.i4 0x603ac699 IL_007c: beq IL_02a3 IL_0081: ldloc.1 IL_0082: ldc.i4 0x65710578 IL_0087: beq IL_02f7 IL_008c: br IL_03e3 IL_0091: ldloc.1 IL_0092: ldc.i4 0x658f3664 IL_0097: beq IL_01bc IL_009c: ldloc.1 IL_009d: ldc.i4 0x665c79fc IL_00a2: beq IL_023a IL_00a7: ldloc.1 IL_00a8: ldc.i4 0x76692b6a IL_00ad: beq IL_024f IL_00b2: br IL_03e3 IL_00b7: ldloc.1 IL_00b8: ldc.i4 0x9c4426da IL_00bd: bgt.un.s IL_0105 IL_00bf: ldloc.1 IL_00c0: ldc.i4 0x8e475485 IL_00c5: bgt.un.s IL_00e2 IL_00c7: ldloc.1 IL_00c8: ldc.i4 0x79d7c769 IL_00cd: beq IL_02b8 IL_00d2: ldloc.1 IL_00d3: ldc.i4 0x8e475485 IL_00d8: beq IL_0210 IL_00dd: br IL_03e3 IL_00e2: ldloc.1 IL_00e3: ldc.i4 0x96bf6e27 IL_00e8: beq IL_030c IL_00ed: ldloc.1 IL_00ee: ldc.i4 0x98df118c IL_00f3: beq IL_01fb IL_00f8: ldloc.1 IL_00f9: ldc.i4 0x9c4426da IL_00fe: beq.s IL_017d IL_0100: br IL_03e3 IL_0105: ldloc.1 IL_0106: ldc.i4 0xac7eb953 IL_010b: bgt.un.s IL_0130 IL_010d: ldloc.1 IL_010e: ldc.i4 0x9dc3aa14 IL_0113: beq.s IL_0192 IL_0115: ldloc.1 IL_0116: ldc.i4 0xa5c174f5 IL_011b: beq IL_0264 IL_0120: ldloc.1 IL_0121: ldc.i4 0xac7eb953 IL_0126: beq IL_0279 IL_012b: br IL_03e3 IL_0130: ldloc.1 IL_0131: ldc.i4 0xb5f98d32 IL_0136: beq IL_01e6 IL_013b: ldloc.1 IL_013c: ldc.i4 0xdae6a448 IL_0141: beq IL_02cd IL_0146: ldloc.1 IL_0147: ldc.i4 0xf8b02149 IL_014c: beq.s IL_01a7 IL_014e: br IL_03e3 IL_0153: ldarg.0 IL_0154: ldstr "AsPointer" IL_0159: call "bool string.op_Equality(string, string)" IL_015e: brtrue IL_0321 IL_0163: br IL_03e3 IL_0168: ldarg.0 IL_0169: ldstr "As" IL_016e: call "bool string.op_Equality(string, string)" IL_0173: brtrue IL_032c IL_0178: br IL_03e3 IL_017d: ldarg.0 IL_017e: ldstr "AsRef" IL_0183: call "bool string.op_Equality(string, string)" IL_0188: brtrue IL_0337 IL_018d: br IL_03e3 IL_0192: ldarg.0 IL_0193: ldstr "Add" IL_0198: call "bool string.op_Equality(string, string)" IL_019d: brtrue IL_0342 IL_01a2: br IL_03e3 IL_01a7: ldarg.0 IL_01a8: ldstr "AddByteOffset" IL_01ad: call "bool string.op_Equality(string, string)" IL_01b2: brtrue IL_034d IL_01b7: br IL_03e3 IL_01bc: ldarg.0 IL_01bd: ldstr "Copy" IL_01c2: call "bool string.op_Equality(string, string)" IL_01c7: brtrue IL_0358 IL_01cc: br IL_03e3 IL_01d1: ldarg.0 IL_01d2: ldstr "CopyBlock" IL_01d7: call "bool string.op_Equality(string, string)" IL_01dc: brtrue IL_0363 IL_01e1: br IL_03e3 IL_01e6: ldarg.0 IL_01e7: ldstr "CopyBlockUnaligned" IL_01ec: call "bool string.op_Equality(string, string)" IL_01f1: brtrue IL_036b IL_01f6: br IL_03e3 IL_01fb: ldarg.0 IL_01fc: ldstr "InitBlock" IL_0201: call "bool string.op_Equality(string, string)" IL_0206: brtrue IL_0373 IL_020b: br IL_03e3 IL_0210: ldarg.0 IL_0211: ldstr "InitBlockUnaligned" IL_0216: call "bool string.op_Equality(string, string)" IL_021b: brtrue IL_037b IL_0220: br IL_03e3 IL_0225: ldarg.0 IL_0226: ldstr "Read" IL_022b: call "bool string.op_Equality(string, string)" IL_0230: brtrue IL_0383 IL_0235: br IL_03e3 IL_023a: ldarg.0 IL_023b: ldstr "Write" IL_0240: call "bool string.op_Equality(string, string)" IL_0245: brtrue IL_038b IL_024a: br IL_03e3 IL_024f: ldarg.0 IL_0250: ldstr "ReadUnaligned" IL_0255: call "bool string.op_Equality(string, string)" IL_025a: brtrue IL_0393 IL_025f: br IL_03e3 IL_0264: ldarg.0 IL_0265: ldstr "WriteUnaligned" IL_026a: call "bool string.op_Equality(string, string)" IL_026f: brtrue IL_039b IL_0274: br IL_03e3 IL_0279: ldarg.0 IL_027a: ldstr "AreSame" IL_027f: call "bool string.op_Equality(string, string)" IL_0284: brtrue IL_03a3 IL_0289: br IL_03e3 IL_028e: ldarg.0 IL_028f: ldstr "ByteOffset" IL_0294: call "bool string.op_Equality(string, string)" IL_0299: brtrue IL_03ab IL_029e: br IL_03e3 IL_02a3: ldarg.0 IL_02a4: ldstr "NullRef" IL_02a9: call "bool string.op_Equality(string, string)" IL_02ae: brtrue IL_03b3 IL_02b3: br IL_03e3 IL_02b8: ldarg.0 IL_02b9: ldstr "IsNullRef" IL_02be: call "bool string.op_Equality(string, string)" IL_02c3: brtrue IL_03bb IL_02c8: br IL_03e3 IL_02cd: ldarg.0 IL_02ce: ldstr "SkipInit" IL_02d3: call "bool string.op_Equality(string, string)" IL_02d8: brtrue IL_03c3 IL_02dd: br IL_03e3 IL_02e2: ldarg.0 IL_02e3: ldstr "Subtract" IL_02e8: call "bool string.op_Equality(string, string)" IL_02ed: brtrue IL_03cb IL_02f2: br IL_03e3 IL_02f7: ldarg.0 IL_02f8: ldstr "SubtractByteOffset" IL_02fd: call "bool string.op_Equality(string, string)" IL_0302: brtrue IL_03d3 IL_0307: br IL_03e3 IL_030c: ldarg.0 IL_030d: ldstr "Unbox" IL_0312: call "bool string.op_Equality(string, string)" IL_0317: brtrue IL_03db IL_031c: br IL_03e3 IL_0321: ldstr "AsPointer" IL_0326: stloc.0 IL_0327: br IL_03e9 IL_032c: ldstr "As" IL_0331: stloc.0 IL_0332: br IL_03e9 IL_0337: ldstr "AsRef" IL_033c: stloc.0 IL_033d: br IL_03e9 IL_0342: ldstr "Add" IL_0347: stloc.0 IL_0348: br IL_03e9 IL_034d: ldstr "AddByteOffset" IL_0352: stloc.0 IL_0353: br IL_03e9 IL_0358: ldstr "Copy" IL_035d: stloc.0 IL_035e: br IL_03e9 IL_0363: ldstr "CopyBlock" IL_0368: stloc.0 IL_0369: br.s IL_03e9 IL_036b: ldstr "CopyBlockUnaligned" IL_0370: stloc.0 IL_0371: br.s IL_03e9 IL_0373: ldstr "InitBlock" IL_0378: stloc.0 IL_0379: br.s IL_03e9 IL_037b: ldstr "InitBlockUnaligned" IL_0380: stloc.0 IL_0381: br.s IL_03e9 IL_0383: ldstr "Read" IL_0388: stloc.0 IL_0389: br.s IL_03e9 IL_038b: ldstr "Write" IL_0390: stloc.0 IL_0391: br.s IL_03e9 IL_0393: ldstr "ReadUnaligned" IL_0398: stloc.0 IL_0399: br.s IL_03e9 IL_039b: ldstr "WriteUnaligned" IL_03a0: stloc.0 IL_03a1: br.s IL_03e9 IL_03a3: ldstr "AreSame" IL_03a8: stloc.0 IL_03a9: br.s IL_03e9 IL_03ab: ldstr "ByteOffset" IL_03b0: stloc.0 IL_03b1: br.s IL_03e9 IL_03b3: ldstr "NullRef" IL_03b8: stloc.0 IL_03b9: br.s IL_03e9 IL_03bb: ldstr "IsNullRef" IL_03c0: stloc.0 IL_03c1: br.s IL_03e9 IL_03c3: ldstr "SkipInit" IL_03c8: stloc.0 IL_03c9: br.s IL_03e9 IL_03cb: ldstr "Subtract" IL_03d0: stloc.0 IL_03d1: br.s IL_03e9 IL_03d3: ldstr "SubtractByteOffset" IL_03d8: stloc.0 IL_03d9: br.s IL_03e9 IL_03db: ldstr "Unbox" IL_03e0: stloc.0 IL_03e1: br.s IL_03e9 IL_03e3: ldstr "default" IL_03e8: stloc.0 IL_03e9: ldloc.0 IL_03ea: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void GetWellKnownType() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/coreclr/tools/aot/ILLink.Shared/TypeSystemProxy/WellKnownType.cs#L48-L58 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("String"); assert("Nullable`1"); assert("Type"); assert("Array"); assert("Attribute"); assert("Object"); assert("NotSupportedException"); assert("Void"); assert("other", "default"); assert(null, "default"); assert("", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "String" => "String", "Nullable`1" => "Nullable`1", "Type" => "Type", "Array" => "Array", "Attribute" => "Attribute", "Object" => "Object", "NotSupportedException" => "NotSupportedException", "Void" => "Void", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 312 (0x138) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_0130 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.4 IL_000f: sub IL_0010: switch ( IL_0055, IL_00c3, IL_003e, IL_0130, IL_0130, IL_00d2, IL_0093) IL_0031: ldloc.1 IL_0032: ldc.i4.s 21 IL_0034: beq IL_00e1 IL_0039: br IL_0130 IL_003e: ldarg.0 IL_003f: ldc.i4.0 IL_0040: call "char string.this[int].get" IL_0045: stloc.2 IL_0046: ldloc.2 IL_0047: ldc.i4.s 79 IL_0049: beq.s IL_007e IL_004b: ldloc.2 IL_004c: ldc.i4.s 83 IL_004e: beq.s IL_006c IL_0050: br IL_0130 IL_0055: ldarg.0 IL_0056: ldc.i4.0 IL_0057: call "char string.this[int].get" IL_005c: stloc.2 IL_005d: ldloc.2 IL_005e: ldc.i4.s 84 IL_0060: beq.s IL_00a5 IL_0062: ldloc.2 IL_0063: ldc.i4.s 86 IL_0065: beq.s IL_00b4 IL_0067: br IL_0130 IL_006c: ldarg.0 IL_006d: ldstr "String" IL_0072: call "bool string.op_Equality(string, string)" IL_0077: brtrue.s IL_00f0 IL_0079: br IL_0130 IL_007e: ldarg.0 IL_007f: ldstr "Object" IL_0084: call "bool string.op_Equality(string, string)" IL_0089: brtrue IL_0118 IL_008e: br IL_0130 IL_0093: ldarg.0 IL_0094: ldstr "Nullable`1" IL_0099: call "bool string.op_Equality(string, string)" IL_009e: brtrue.s IL_00f8 IL_00a0: br IL_0130 IL_00a5: ldarg.0 IL_00a6: ldstr "Type" IL_00ab: call "bool string.op_Equality(string, string)" IL_00b0: brtrue.s IL_0100 IL_00b2: br.s IL_0130 IL_00b4: ldarg.0 IL_00b5: ldstr "Void" IL_00ba: call "bool string.op_Equality(string, string)" IL_00bf: brtrue.s IL_0128 IL_00c1: br.s IL_0130 IL_00c3: ldarg.0 IL_00c4: ldstr "Array" IL_00c9: call "bool string.op_Equality(string, string)" IL_00ce: brtrue.s IL_0108 IL_00d0: br.s IL_0130 IL_00d2: ldarg.0 IL_00d3: ldstr "Attribute" IL_00d8: call "bool string.op_Equality(string, string)" IL_00dd: brtrue.s IL_0110 IL_00df: br.s IL_0130 IL_00e1: ldarg.0 IL_00e2: ldstr "NotSupportedException" IL_00e7: call "bool string.op_Equality(string, string)" IL_00ec: brtrue.s IL_0120 IL_00ee: br.s IL_0130 IL_00f0: ldstr "String" IL_00f5: stloc.0 IL_00f6: br.s IL_0136 IL_00f8: ldstr "Nullable`1" IL_00fd: stloc.0 IL_00fe: br.s IL_0136 IL_0100: ldstr "Type" IL_0105: stloc.0 IL_0106: br.s IL_0136 IL_0108: ldstr "Array" IL_010d: stloc.0 IL_010e: br.s IL_0136 IL_0110: ldstr "Attribute" IL_0115: stloc.0 IL_0116: br.s IL_0136 IL_0118: ldstr "Object" IL_011d: stloc.0 IL_011e: br.s IL_0136 IL_0120: ldstr "NotSupportedException" IL_0125: stloc.0 IL_0126: br.s IL_0136 IL_0128: ldstr "Void" IL_012d: stloc.0 IL_012e: br.s IL_0136 IL_0130: ldstr "default" IL_0135: stloc.0 IL_0136: ldloc.0 IL_0137: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 325 (0x145) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x62fa988f IL_000d: bgt.un.s IL_0047 IL_000f: ldloc.1 IL_0010: ldc.i4 0x326d11d1 IL_0015: bgt.un.s IL_0032 IL_0017: ldloc.1 IL_0018: ldc.i4 0x16c8fcc6 IL_001d: beq IL_00b2 IL_0022: ldloc.1 IL_0023: ldc.i4 0x326d11d1 IL_0028: beq IL_00df IL_002d: br IL_013d IL_0032: ldloc.1 IL_0033: ldc.i4 0x604f4858 IL_0038: beq.s IL_007c IL_003a: ldloc.1 IL_003b: ldc.i4 0x62fa988f IL_0040: beq.s IL_00c1 IL_0042: br IL_013d IL_0047: ldloc.1 IL_0048: ldc.i4 0xc8e3517f IL_004d: bgt.un.s IL_0067 IL_004f: ldloc.1 IL_0050: ldc.i4 0x66898a9f IL_0055: beq.s IL_008e IL_0057: ldloc.1 IL_0058: ldc.i4 0xc8e3517f IL_005d: beq IL_00ee IL_0062: br IL_013d IL_0067: ldloc.1 IL_0068: ldc.i4 0xd155d06d IL_006d: beq.s IL_00a0 IL_006f: ldloc.1 IL_0070: ldc.i4 0xe58e64da IL_0075: beq.s IL_00d0 IL_0077: br IL_013d IL_007c: ldarg.0 IL_007d: ldstr "String" IL_0082: call "bool string.op_Equality(string, string)" IL_0087: brtrue.s IL_00fd IL_0089: br IL_013d IL_008e: ldarg.0 IL_008f: ldstr "Nullable`1" IL_0094: call "bool string.op_Equality(string, string)" IL_0099: brtrue.s IL_0105 IL_009b: br IL_013d IL_00a0: ldarg.0 IL_00a1: ldstr "Type" IL_00a6: call "bool string.op_Equality(string, string)" IL_00ab: brtrue.s IL_010d IL_00ad: br IL_013d IL_00b2: ldarg.0 IL_00b3: ldstr "Array" IL_00b8: call "bool string.op_Equality(string, string)" IL_00bd: brtrue.s IL_0115 IL_00bf: br.s IL_013d IL_00c1: ldarg.0 IL_00c2: ldstr "Attribute" IL_00c7: call "bool string.op_Equality(string, string)" IL_00cc: brtrue.s IL_011d IL_00ce: br.s IL_013d IL_00d0: ldarg.0 IL_00d1: ldstr "Object" IL_00d6: call "bool string.op_Equality(string, string)" IL_00db: brtrue.s IL_0125 IL_00dd: br.s IL_013d IL_00df: ldarg.0 IL_00e0: ldstr "NotSupportedException" IL_00e5: call "bool string.op_Equality(string, string)" IL_00ea: brtrue.s IL_012d IL_00ec: br.s IL_013d IL_00ee: ldarg.0 IL_00ef: ldstr "Void" IL_00f4: call "bool string.op_Equality(string, string)" IL_00f9: brtrue.s IL_0135 IL_00fb: br.s IL_013d IL_00fd: ldstr "String" IL_0102: stloc.0 IL_0103: br.s IL_0143 IL_0105: ldstr "Nullable`1" IL_010a: stloc.0 IL_010b: br.s IL_0143 IL_010d: ldstr "Type" IL_0112: stloc.0 IL_0113: br.s IL_0143 IL_0115: ldstr "Array" IL_011a: stloc.0 IL_011b: br.s IL_0143 IL_011d: ldstr "Attribute" IL_0122: stloc.0 IL_0123: br.s IL_0143 IL_0125: ldstr "Object" IL_012a: stloc.0 IL_012b: br.s IL_0143 IL_012d: ldstr "NotSupportedException" IL_0132: stloc.0 IL_0133: br.s IL_0143 IL_0135: ldstr "Void" IL_013a: stloc.0 IL_013b: br.s IL_0143 IL_013d: ldstr "default" IL_0142: stloc.0 IL_0143: ldloc.0 IL_0144: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void GetLocalizedString() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.ComponentModel.Primitives/src/System/ComponentModel/CategoryAttribute.cs#L202-L226 // Buckets: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 var source = """ assert("Action"); assert("Appearance"); assert("Asynchronous"); assert("Behavior"); assert("Config"); assert("Data"); assert("DDE"); assert("Default"); assert("Design"); assert("DragDrop"); assert("Focus"); assert("Font"); assert("Format"); assert("Key"); assert("Layout"); assert("List"); assert("Mouse"); assert("Position"); assert("Scale"); assert("Text"); assert("WindowStyle"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "Action" => "Action", "Appearance" => "Appearance", "Asynchronous" => "Asynchronous", "Behavior" => "Behavior", "Config" => "Config", "Data" => "Data", "DDE" => "DDE", "Default" => "Default", "Design" => "Design", "DragDrop" => "DragDrop", "Focus" => "Focus", "Font" => "Font", "Format" => "Format", "Key" => "Key", "Layout" => "Layout", "List" => "List", "Mouse" => "Mouse", "Position" => "Position", "Scale" => "Scale", "Text" => "Text", "WindowStyle" => "WindowStyle", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 910 (0x38e) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_0386 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.3 IL_000f: sub IL_0010: switch ( IL_00d4, IL_009d, IL_00f1, IL_0042, IL_0266, IL_0078, IL_0386, IL_017f, IL_02ba, IL_0194) IL_003d: br IL_0386 IL_0042: ldarg.0 IL_0043: ldc.i4.0 IL_0044: call "char string.this[int].get" IL_0049: stloc.2 IL_004a: ldloc.2 IL_004b: ldc.i4.s 65 IL_004d: sub IL_004e: switch ( IL_0116, IL_0386, IL_012b, IL_0140, IL_0386, IL_0155) IL_006b: ldloc.2 IL_006c: ldc.i4.s 76 IL_006e: beq IL_016a IL_0073: br IL_0386 IL_0078: ldarg.0 IL_0079: ldc.i4.0 IL_007a: call "char string.this[int].get" IL_007f: stloc.2 IL_0080: ldloc.2 IL_0081: ldc.i4.s 66 IL_0083: beq IL_01a9 IL_0088: ldloc.2 IL_0089: ldc.i4.s 68 IL_008b: beq IL_01be IL_0090: ldloc.2 IL_0091: ldc.i4.s 80 IL_0093: beq IL_01d3 IL_0098: br IL_0386 IL_009d: ldarg.0 IL_009e: ldc.i4.0 IL_009f: call "char string.this[int].get" IL_00a4: stloc.2 IL_00a5: ldloc.2 IL_00a6: ldc.i4.s 70 IL_00a8: bgt.un.s IL_00bf IL_00aa: ldloc.2 IL_00ab: ldc.i4.s 68 IL_00ad: beq IL_01e8 IL_00b2: ldloc.2 IL_00b3: ldc.i4.s 70 IL_00b5: beq IL_01fd IL_00ba: br IL_0386 IL_00bf: ldloc.2 IL_00c0: ldc.i4.s 76 IL_00c2: beq IL_0212 IL_00c7: ldloc.2 IL_00c8: ldc.i4.s 84 IL_00ca: beq IL_0227 IL_00cf: br IL_0386 IL_00d4: ldarg.0 IL_00d5: ldc.i4.0 IL_00d6: call "char string.this[int].get" IL_00db: stloc.2 IL_00dc: ldloc.2 IL_00dd: ldc.i4.s 68 IL_00df: beq IL_023c IL_00e4: ldloc.2 IL_00e5: ldc.i4.s 75 IL_00e7: beq IL_0251 IL_00ec: br IL_0386 IL_00f1: ldarg.0 IL_00f2: ldc.i4.0 IL_00f3: call "char string.this[int].get" IL_00f8: stloc.2 IL_00f9: ldloc.2 IL_00fa: ldc.i4.s 70 IL_00fc: beq IL_027b IL_0101: ldloc.2 IL_0102: ldc.i4.s 77 IL_0104: beq IL_0290 IL_0109: ldloc.2 IL_010a: ldc.i4.s 83 IL_010c: beq IL_02a5 IL_0111: br IL_0386 IL_0116: ldarg.0 IL_0117: ldstr "Action" IL_011c: call "bool string.op_Equality(string, string)" IL_0121: brtrue IL_02cf IL_0126: br IL_0386 IL_012b: ldarg.0 IL_012c: ldstr "Config" IL_0131: call "bool string.op_Equality(string, string)" IL_0136: brtrue IL_02fb IL_013b: br IL_0386 IL_0140: ldarg.0 IL_0141: ldstr "Design" IL_0146: call "bool string.op_Equality(string, string)" IL_014b: brtrue IL_031e IL_0150: br IL_0386 IL_0155: ldarg.0 IL_0156: ldstr "Format" IL_015b: call "bool string.op_Equality(string, string)" IL_0160: brtrue IL_033e IL_0165: br IL_0386 IL_016a: ldarg.0 IL_016b: ldstr "Layout" IL_0170: call "bool string.op_Equality(string, string)" IL_0175: brtrue IL_034e IL_017a: br IL_0386 IL_017f: ldarg.0 IL_0180: ldstr "Appearance" IL_0185: call "bool string.op_Equality(string, string)" IL_018a: brtrue IL_02da IL_018f: br IL_0386 IL_0194: ldarg.0 IL_0195: ldstr "Asynchronous" IL_019a: call "bool string.op_Equality(string, string)" IL_019f: brtrue IL_02e5 IL_01a4: br IL_0386 IL_01a9: ldarg.0 IL_01aa: ldstr "Behavior" IL_01af: call "bool string.op_Equality(string, string)" IL_01b4: brtrue IL_02f0 IL_01b9: br IL_0386 IL_01be: ldarg.0 IL_01bf: ldstr "DragDrop" IL_01c4: call "bool string.op_Equality(string, string)" IL_01c9: brtrue IL_0326 IL_01ce: br IL_0386 IL_01d3: ldarg.0 IL_01d4: ldstr "Position" IL_01d9: call "bool string.op_Equality(string, string)" IL_01de: brtrue IL_0366 IL_01e3: br IL_0386 IL_01e8: ldarg.0 IL_01e9: ldstr "Data" IL_01ee: call "bool string.op_Equality(string, string)" IL_01f3: brtrue IL_0306 IL_01f8: br IL_0386 IL_01fd: ldarg.0 IL_01fe: ldstr "Font" IL_0203: call "bool string.op_Equality(string, string)" IL_0208: brtrue IL_0336 IL_020d: br IL_0386 IL_0212: ldarg.0 IL_0213: ldstr "List" IL_0218: call "bool string.op_Equality(string, string)" IL_021d: brtrue IL_0356 IL_0222: br IL_0386 IL_0227: ldarg.0 IL_0228: ldstr "Text" IL_022d: call "bool string.op_Equality(string, string)" IL_0232: brtrue IL_0376 IL_0237: br IL_0386 IL_023c: ldarg.0 IL_023d: ldstr "DDE" IL_0242: call "bool string.op_Equality(string, string)" IL_0247: brtrue IL_030e IL_024c: br IL_0386 IL_0251: ldarg.0 IL_0252: ldstr "Key" IL_0257: call "bool string.op_Equality(string, string)" IL_025c: brtrue IL_0346 IL_0261: br IL_0386 IL_0266: ldarg.0 IL_0267: ldstr "Default" IL_026c: call "bool string.op_Equality(string, string)" IL_0271: brtrue IL_0316 IL_0276: br IL_0386 IL_027b: ldarg.0 IL_027c: ldstr "Focus" IL_0281: call "bool string.op_Equality(string, string)" IL_0286: brtrue IL_032e IL_028b: br IL_0386 IL_0290: ldarg.0 IL_0291: ldstr "Mouse" IL_0296: call "bool string.op_Equality(string, string)" IL_029b: brtrue IL_035e IL_02a0: br IL_0386 IL_02a5: ldarg.0 IL_02a6: ldstr "Scale" IL_02ab: call "bool string.op_Equality(string, string)" IL_02b0: brtrue IL_036e IL_02b5: br IL_0386 IL_02ba: ldarg.0 IL_02bb: ldstr "WindowStyle" IL_02c0: call "bool string.op_Equality(string, string)" IL_02c5: brtrue IL_037e IL_02ca: br IL_0386 IL_02cf: ldstr "Action" IL_02d4: stloc.0 IL_02d5: br IL_038c IL_02da: ldstr "Appearance" IL_02df: stloc.0 IL_02e0: br IL_038c IL_02e5: ldstr "Asynchronous" IL_02ea: stloc.0 IL_02eb: br IL_038c IL_02f0: ldstr "Behavior" IL_02f5: stloc.0 IL_02f6: br IL_038c IL_02fb: ldstr "Config" IL_0300: stloc.0 IL_0301: br IL_038c IL_0306: ldstr "Data" IL_030b: stloc.0 IL_030c: br.s IL_038c IL_030e: ldstr "DDE" IL_0313: stloc.0 IL_0314: br.s IL_038c IL_0316: ldstr "Default" IL_031b: stloc.0 IL_031c: br.s IL_038c IL_031e: ldstr "Design" IL_0323: stloc.0 IL_0324: br.s IL_038c IL_0326: ldstr "DragDrop" IL_032b: stloc.0 IL_032c: br.s IL_038c IL_032e: ldstr "Focus" IL_0333: stloc.0 IL_0334: br.s IL_038c IL_0336: ldstr "Font" IL_033b: stloc.0 IL_033c: br.s IL_038c IL_033e: ldstr "Format" IL_0343: stloc.0 IL_0344: br.s IL_038c IL_0346: ldstr "Key" IL_034b: stloc.0 IL_034c: br.s IL_038c IL_034e: ldstr "Layout" IL_0353: stloc.0 IL_0354: br.s IL_038c IL_0356: ldstr "List" IL_035b: stloc.0 IL_035c: br.s IL_038c IL_035e: ldstr "Mouse" IL_0363: stloc.0 IL_0364: br.s IL_038c IL_0366: ldstr "Position" IL_036b: stloc.0 IL_036c: br.s IL_038c IL_036e: ldstr "Scale" IL_0373: stloc.0 IL_0374: br.s IL_038c IL_0376: ldstr "Text" IL_037b: stloc.0 IL_037c: br.s IL_038c IL_037e: ldstr "WindowStyle" IL_0383: stloc.0 IL_0384: br.s IL_038c IL_0386: ldstr "default" IL_038b: stloc.0 IL_038c: ldloc.0 IL_038d: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 969 (0x3c9) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x5ef81c51 IL_000d: bgt.un IL_00ac IL_0012: ldloc.1 IL_0013: ldc.i4 0x28528e11 IL_0018: bgt.un.s IL_0063 IL_001a: ldloc.1 IL_001b: ldc.i4 0x19dc307e IL_0020: bgt.un.s IL_003d IL_0022: ldloc.1 IL_0023: ldc.i4 0xa77a91f IL_0028: beq IL_0151 IL_002d: ldloc.1 IL_002e: ldc.i4 0x19dc307e IL_0033: beq IL_01e4 IL_0038: br IL_03c1 IL_003d: ldloc.1 IL_003e: ldc.i4 0x1f19a447 IL_0043: beq IL_0190 IL_0048: ldloc.1 IL_0049: ldc.i4 0x25989e7a IL_004e: beq IL_020e IL_0053: ldloc.1 IL_0054: ldc.i4 0x28528e11 IL_0059: beq IL_02cb IL_005e: br IL_03c1 IL_0063: ldloc.1 IL_0064: ldc.i4 0x31018b9f IL_0069: bgt.un.s IL_0086 IL_006b: ldloc.1 IL_006c: ldc.i4 0x2b1d9b64 IL_0071: beq IL_02a1 IL_0076: ldloc.1 IL_0077: ldc.i4 0x31018b9f IL_007c: beq IL_0166 IL_0081: br IL_03c1 IL_0086: ldloc.1 IL_0087: ldc.i4 0x3e142d5e IL_008c: beq IL_02e0 IL_0091: ldloc.1 IL_0092: ldc.i4 0x3f5279c5 IL_0097: beq IL_01ba IL_009c: ldloc.1 IL_009d: ldc.i4 0x5ef81c51 IL_00a2: beq IL_017b IL_00a7: br IL_03c1 IL_00ac: ldloc.1 IL_00ad: ldc.i4 0xa77a5eb0 IL_00b2: bgt.un.s IL_00fd IL_00b4: ldloc.1 IL_00b5: ldc.i4 0x6a12e0e7 IL_00ba: bgt.un.s IL_00d7 IL_00bc: ldloc.1 IL_00bd: ldc.i4 0x69116f10 IL_00c2: beq IL_01cf IL_00c7: ldloc.1 IL_00c8: ldc.i4 0x6a12e0e7 IL_00cd: beq IL_01a5 IL_00d2: br IL_03c1 IL_00d7: ldloc.1 IL_00d8: ldc.i4 0x7a836c5e IL_00dd: beq IL_02f5 IL_00e2: ldloc.1 IL_00e3: ldc.i4 0x8d2937a1 IL_00e8: beq IL_028c IL_00ed: ldloc.1 IL_00ee: ldc.i4 0xa77a5eb0 IL_00f3: beq IL_0238 IL_00f8: br IL_03c1 IL_00fd: ldloc.1 IL_00fe: ldc.i4 0xe27f342a IL_0103: bgt.un.s IL_012b IL_0105: ldloc.1 IL_0106: ldc.i4 0xbc57b1b3 IL_010b: beq IL_0223 IL_0110: ldloc.1 IL_0111: ldc.i4 0xcd1ac90c IL_0116: beq IL_0262 IL_011b: ldloc.1 IL_011c: ldc.i4 0xe27f342a IL_0121: beq IL_02b6 IL_0126: br IL_03c1 IL_012b: ldloc.1 IL_012c: ldc.i4 0xe88d02ef IL_0131: beq IL_01f9 IL_0136: ldloc.1 IL_0137: ldc.i4 0xf788421f IL_013c: beq IL_0277 IL_0141: ldloc.1 IL_0142: ldc.i4 0xffb0ff72 IL_0147: beq IL_024d IL_014c: br IL_03c1 IL_0151: ldarg.0 IL_0152: ldstr "Action" IL_0157: call "bool string.op_Equality(string, string)" IL_015c: brtrue IL_030a IL_0161: br IL_03c1 IL_0166: ldarg.0 IL_0167: ldstr "Appearance" IL_016c: call "bool string.op_Equality(string, string)" IL_0171: brtrue IL_0315 IL_0176: br IL_03c1 IL_017b: ldarg.0 IL_017c: ldstr "Asynchronous" IL_0181: call "bool string.op_Equality(string, string)" IL_0186: brtrue IL_0320 IL_018b: br IL_03c1 IL_0190: ldarg.0 IL_0191: ldstr "Behavior" IL_0196: call "bool string.op_Equality(string, string)" IL_019b: brtrue IL_032b IL_01a0: br IL_03c1 IL_01a5: ldarg.0 IL_01a6: ldstr "Config" IL_01ab: call "bool string.op_Equality(string, string)" IL_01b0: brtrue IL_0336 IL_01b5: br IL_03c1 IL_01ba: ldarg.0 IL_01bb: ldstr "Data" IL_01c0: call "bool string.op_Equality(string, string)" IL_01c5: brtrue IL_0341 IL_01ca: br IL_03c1 IL_01cf: ldarg.0 IL_01d0: ldstr "DDE" IL_01d5: call "bool string.op_Equality(string, string)" IL_01da: brtrue IL_0349 IL_01df: br IL_03c1 IL_01e4: ldarg.0 IL_01e5: ldstr "Default" IL_01ea: call "bool string.op_Equality(string, string)" IL_01ef: brtrue IL_0351 IL_01f4: br IL_03c1 IL_01f9: ldarg.0 IL_01fa: ldstr "Design" IL_01ff: call "bool string.op_Equality(string, string)" IL_0204: brtrue IL_0359 IL_0209: br IL_03c1 IL_020e: ldarg.0 IL_020f: ldstr "DragDrop" IL_0214: call "bool string.op_Equality(string, string)" IL_0219: brtrue IL_0361 IL_021e: br IL_03c1 IL_0223: ldarg.0 IL_0224: ldstr "Focus" IL_0229: call "bool string.op_Equality(string, string)" IL_022e: brtrue IL_0369 IL_0233: br IL_03c1 IL_0238: ldarg.0 IL_0239: ldstr "Font" IL_023e: call "bool string.op_Equality(string, string)" IL_0243: brtrue IL_0371 IL_0248: br IL_03c1 IL_024d: ldarg.0 IL_024e: ldstr "Format" IL_0253: call "bool string.op_Equality(string, string)" IL_0258: brtrue IL_0379 IL_025d: br IL_03c1 IL_0262: ldarg.0 IL_0263: ldstr "Key" IL_0268: call "bool string.op_Equality(string, string)" IL_026d: brtrue IL_0381 IL_0272: br IL_03c1 IL_0277: ldarg.0 IL_0278: ldstr "Layout" IL_027d: call "bool string.op_Equality(string, string)" IL_0282: brtrue IL_0389 IL_0287: br IL_03c1 IL_028c: ldarg.0 IL_028d: ldstr "List" IL_0292: call "bool string.op_Equality(string, string)" IL_0297: brtrue IL_0391 IL_029c: br IL_03c1 IL_02a1: ldarg.0 IL_02a2: ldstr "Mouse" IL_02a7: call "bool string.op_Equality(string, string)" IL_02ac: brtrue IL_0399 IL_02b1: br IL_03c1 IL_02b6: ldarg.0 IL_02b7: ldstr "Position" IL_02bc: call "bool string.op_Equality(string, string)" IL_02c1: brtrue IL_03a1 IL_02c6: br IL_03c1 IL_02cb: ldarg.0 IL_02cc: ldstr "Scale" IL_02d1: call "bool string.op_Equality(string, string)" IL_02d6: brtrue IL_03a9 IL_02db: br IL_03c1 IL_02e0: ldarg.0 IL_02e1: ldstr "Text" IL_02e6: call "bool string.op_Equality(string, string)" IL_02eb: brtrue IL_03b1 IL_02f0: br IL_03c1 IL_02f5: ldarg.0 IL_02f6: ldstr "WindowStyle" IL_02fb: call "bool string.op_Equality(string, string)" IL_0300: brtrue IL_03b9 IL_0305: br IL_03c1 IL_030a: ldstr "Action" IL_030f: stloc.0 IL_0310: br IL_03c7 IL_0315: ldstr "Appearance" IL_031a: stloc.0 IL_031b: br IL_03c7 IL_0320: ldstr "Asynchronous" IL_0325: stloc.0 IL_0326: br IL_03c7 IL_032b: ldstr "Behavior" IL_0330: stloc.0 IL_0331: br IL_03c7 IL_0336: ldstr "Config" IL_033b: stloc.0 IL_033c: br IL_03c7 IL_0341: ldstr "Data" IL_0346: stloc.0 IL_0347: br.s IL_03c7 IL_0349: ldstr "DDE" IL_034e: stloc.0 IL_034f: br.s IL_03c7 IL_0351: ldstr "Default" IL_0356: stloc.0 IL_0357: br.s IL_03c7 IL_0359: ldstr "Design" IL_035e: stloc.0 IL_035f: br.s IL_03c7 IL_0361: ldstr "DragDrop" IL_0366: stloc.0 IL_0367: br.s IL_03c7 IL_0369: ldstr "Focus" IL_036e: stloc.0 IL_036f: br.s IL_03c7 IL_0371: ldstr "Font" IL_0376: stloc.0 IL_0377: br.s IL_03c7 IL_0379: ldstr "Format" IL_037e: stloc.0 IL_037f: br.s IL_03c7 IL_0381: ldstr "Key" IL_0386: stloc.0 IL_0387: br.s IL_03c7 IL_0389: ldstr "Layout" IL_038e: stloc.0 IL_038f: br.s IL_03c7 IL_0391: ldstr "List" IL_0396: stloc.0 IL_0397: br.s IL_03c7 IL_0399: ldstr "Mouse" IL_039e: stloc.0 IL_039f: br.s IL_03c7 IL_03a1: ldstr "Position" IL_03a6: stloc.0 IL_03a7: br.s IL_03c7 IL_03a9: ldstr "Scale" IL_03ae: stloc.0 IL_03af: br.s IL_03c7 IL_03b1: ldstr "Text" IL_03b6: stloc.0 IL_03b7: br.s IL_03c7 IL_03b9: ldstr "WindowStyle" IL_03be: stloc.0 IL_03bf: br.s IL_03c7 IL_03c1: ldstr "default" IL_03c6: stloc.0 IL_03c7: ldloc.0 IL_03c8: ret } """); } [Fact, WorkItem(56374, "https://github.com/dotnet/roslyn/issues/56374")] public void ParseGraphicsUnits() { // Based on https://github.com/dotnet/runtime/blob/a30de6d40f69ef612b514344a5ec83fffd10b957/src/libraries/System.Drawing.Common/src/System/Drawing/FontConverter.cs#L255-L265 // Buckets: 1, 1, 1, 1, 1, 1, 1 var source = """ assert("display"); assert("doc"); assert("pt"); assert("in"); assert("mm"); assert("px"); assert("world"); assert(null, "default"); assert("", "default"); assert("other", "default"); System.Console.Write("RAN"); void assert(string input, string expected = null) { if (C.M(input) != (expected ?? input)) { throw new System.Exception($"{input} produced {C.M(input)}"); } } public class C { public static string M(string value) { return value switch { "display" => "display", "doc" => "doc", "pt" => "pt", "in" => "in", "mm" => "mm", "px" => "px", "world" => "world", _ => "default" }; } } """; var comp = CreateCompilation(source); comp.VerifyDiagnostics(); var verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 268 (0x10c) .maxstack 2 .locals init (string V_0, int V_1, char V_2) IL_0000: ldarg.0 IL_0001: brfalse IL_0104 IL_0006: ldarg.0 IL_0007: call "int string.Length.get" IL_000c: stloc.1 IL_000d: ldloc.1 IL_000e: ldc.i4.2 IL_000f: sub IL_0010: switch ( IL_0032, IL_006f, IL_0104, IL_00bd, IL_0104, IL_005d) IL_002d: br IL_0104 IL_0032: ldarg.0 IL_0033: ldc.i4.1 IL_0034: call "char string.this[int].get" IL_0039: stloc.2 IL_003a: ldloc.2 IL_003b: ldc.i4.s 110 IL_003d: bgt.un.s IL_004e IL_003f: ldloc.2 IL_0040: ldc.i4.s 109 IL_0042: beq.s IL_009f IL_0044: ldloc.2 IL_0045: ldc.i4.s 110 IL_0047: beq.s IL_0090 IL_0049: br IL_0104 IL_004e: ldloc.2 IL_004f: ldc.i4.s 116 IL_0051: beq.s IL_0081 IL_0053: ldloc.2 IL_0054: ldc.i4.s 120 IL_0056: beq.s IL_00ae IL_0058: br IL_0104 IL_005d: ldarg.0 IL_005e: ldstr "display" IL_0063: call "bool string.op_Equality(string, string)" IL_0068: brtrue.s IL_00cc IL_006a: br IL_0104 IL_006f: ldarg.0 IL_0070: ldstr "doc" IL_0075: call "bool string.op_Equality(string, string)" IL_007a: brtrue.s IL_00d4 IL_007c: br IL_0104 IL_0081: ldarg.0 IL_0082: ldstr "pt" IL_0087: call "bool string.op_Equality(string, string)" IL_008c: brtrue.s IL_00dc IL_008e: br.s IL_0104 IL_0090: ldarg.0 IL_0091: ldstr "in" IL_0096: call "bool string.op_Equality(string, string)" IL_009b: brtrue.s IL_00e4 IL_009d: br.s IL_0104 IL_009f: ldarg.0 IL_00a0: ldstr "mm" IL_00a5: call "bool string.op_Equality(string, string)" IL_00aa: brtrue.s IL_00ec IL_00ac: br.s IL_0104 IL_00ae: ldarg.0 IL_00af: ldstr "px" IL_00b4: call "bool string.op_Equality(string, string)" IL_00b9: brtrue.s IL_00f4 IL_00bb: br.s IL_0104 IL_00bd: ldarg.0 IL_00be: ldstr "world" IL_00c3: call "bool string.op_Equality(string, string)" IL_00c8: brtrue.s IL_00fc IL_00ca: br.s IL_0104 IL_00cc: ldstr "display" IL_00d1: stloc.0 IL_00d2: br.s IL_010a IL_00d4: ldstr "doc" IL_00d9: stloc.0 IL_00da: br.s IL_010a IL_00dc: ldstr "pt" IL_00e1: stloc.0 IL_00e2: br.s IL_010a IL_00e4: ldstr "in" IL_00e9: stloc.0 IL_00ea: br.s IL_010a IL_00ec: ldstr "mm" IL_00f1: stloc.0 IL_00f2: br.s IL_010a IL_00f4: ldstr "px" IL_00f9: stloc.0 IL_00fa: br.s IL_010a IL_00fc: ldstr "world" IL_0101: stloc.0 IL_0102: br.s IL_010a IL_0104: ldstr "default" IL_0109: stloc.0 IL_010a: ldloc.0 IL_010b: ret } """); comp = CreateCompilation(source, parseOptions: TestOptions.RegularPreview.WithDisableLengthBasedSwitch()); comp.VerifyDiagnostics(); verifier = CompileAndVerify(comp, expectedOutput: "RAN"); verifier.VerifyIL("C.M", """ { // Code size 272 (0x110) .maxstack 2 .locals init (string V_0, uint V_1) IL_0000: ldarg.0 IL_0001: call "uint <PrivateImplementationDetails>.ComputeStringHash(string)" IL_0006: stloc.1 IL_0007: ldloc.1 IL_0008: ldc.i4 0x4569f715 IL_000d: bgt.un.s IL_002f IL_000f: ldloc.1 IL_0010: ldc.i4 0x37a3e893 IL_0015: beq IL_00c1 IL_001a: ldloc.1 IL_001b: ldc.i4 0x41387a9e IL_0020: beq.s IL_0094 IL_0022: ldloc.1 IL_0023: ldc.i4 0x4569f715 IL_0028: beq.s IL_0061 IL_002a: br IL_0108 IL_002f: ldloc.1 IL_0030: ldc.i4 0x5d4e6d01 IL_0035: bgt.un.s IL_004c IL_0037: ldloc.1 IL_0038: ldc.i4 0x594e66b5 IL_003d: beq.s IL_00b2 IL_003f: ldloc.1 IL_0040: ldc.i4 0x5d4e6d01 IL_0045: beq.s IL_0085 IL_0047: br IL_0108 IL_004c: ldloc.1 IL_004d: ldc.i4 0x602e1e0f IL_0052: beq.s IL_00a3 IL_0054: ldloc.1 IL_0055: ldc.i4 0xea68c355 IL_005a: beq.s IL_0073 IL_005c: br IL_0108 IL_0061: ldarg.0 IL_0062: ldstr "display" IL_0067: call "bool string.op_Equality(string, string)" IL_006c: brtrue.s IL_00d0 IL_006e: br IL_0108 IL_0073: ldarg.0 IL_0074: ldstr "doc" IL_0079: call "bool string.op_Equality(string, string)" IL_007e: brtrue.s IL_00d8 IL_0080: br IL_0108 IL_0085: ldarg.0 IL_0086: ldstr "pt" IL_008b: call "bool string.op_Equality(string, string)" IL_0090: brtrue.s IL_00e0 IL_0092: br.s IL_0108 IL_0094: ldarg.0 IL_0095: ldstr "in" IL_009a: call "bool string.op_Equality(string, string)" IL_009f: brtrue.s IL_00e8 IL_00a1: br.s IL_0108 IL_00a3: ldarg.0 IL_00a4: ldstr "mm" IL_00a9: call "bool string.op_Equality(string, string)" IL_00ae: brtrue.s IL_00f0 IL_00b0: br.s IL_0108 IL_00b2: ldarg.0 IL_00b3: ldstr "px" IL_00b8: call "bool string.op_Equality(string, string)" IL_00bd: brtrue.s IL_00f8 IL_00bf: br.s IL_0108 IL_00c1: ldarg.0 IL_00c2: ldstr "world" IL_00c7: call "bool string.op_Equality(string, string)" IL_00cc: brtrue.s IL_0100 IL_00ce: br.s IL_0108 IL_00d0: ldstr "display" IL_00d5: stloc.0 IL_00d6: br.s IL_010e IL_00d8: ldstr "doc" IL_00dd: stloc.0 IL_00de: br.s IL_010e IL_00e0: ldstr "pt" IL_00e5: stloc.0 IL_00e6: br.s IL_010e IL_00e8: ldstr "in" IL_00ed: stloc.0 IL_00ee: br.s IL_010e IL_00f0: ldstr "mm" IL_00f5: stloc.0 IL_00f6: br.s IL_010e IL_00f8: ldstr "px" IL_00fd: stloc.0 IL_00fe: br.s IL_010e IL_0100: ldstr "world" IL_0105: stloc.0 IL_0106: br.s IL_010e IL_0108: ldstr "default" IL_010d: stloc.0 IL_010e: ldloc.0 IL_010f: ret } """); } }