File: Semantics\UnstructuredExceptionHandling.vb
Web Access
Project: src\src\Compilers\VisualBasic\Test\Semantic\Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests.vbproj (Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests)
' 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.
 
Imports System.Threading
Imports Roslyn.Test.Utilities
 
Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics
 
    Public Class UnstructuredExceptionHandling
        Inherits BasicTestBase
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestOnError_Goto0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        On Error GoTo 0
        System.Console.WriteLine(1)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size       85 (0x55)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.0
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.1
  IL_0008:  call       "Sub System.Console.WriteLine(Integer)"
  IL_000d:  leave.s    IL_004c
  IL_000f:  ldc.i4.m1
  IL_0010:  stloc.1
  IL_0011:  ldloc.0
  IL_0012:  switch    (
  IL_001f,
  IL_001f)
  IL_001f:  leave.s    IL_0041
}
  filter
{
  IL_0021:  isinst     "System.Exception"
  IL_0026:  ldnull
  IL_0027:  cgt.un
  IL_0029:  ldloc.0
  IL_002a:  ldc.i4.0
  IL_002b:  cgt.un
  IL_002d:  and
  IL_002e:  ldloc.1
  IL_002f:  ldc.i4.0
  IL_0030:  ceq
  IL_0032:  and
  IL_0033:  endfilter
}  // end filter
{  // handler
  IL_0035:  castclass  "System.Exception"
  IL_003a:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_003f:  leave.s    IL_000f
}
  IL_0041:  ldc.i4     0x800a0033
  IL_0046:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_004b:  throw
  IL_004c:  ldloc.1
  IL_004d:  brfalse.s  IL_0054
  IL_004f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0054:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size       90 (0x5a)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.0
    IL_0009:  stloc.0
    IL_000a:  ldc.i4.1
    IL_000b:  call       "Sub System.Console.WriteLine(Integer)"
    IL_0010:  nop
    IL_0011:  leave.s    IL_0050
    IL_0013:  ldc.i4.m1
    IL_0014:  stloc.1
    IL_0015:  ldloc.0
    IL_0016:  switch    (
        IL_0023,
        IL_0023)
    IL_0023:  leave.s    IL_0045
  }
  filter
  {
    IL_0025:  isinst     "System.Exception"
    IL_002a:  ldnull
    IL_002b:  cgt.un
    IL_002d:  ldloc.0
    IL_002e:  ldc.i4.0
    IL_002f:  cgt.un
    IL_0031:  and
    IL_0032:  ldloc.1
    IL_0033:  ldc.i4.0
    IL_0034:  ceq
    IL_0036:  and
    IL_0037:  endfilter
  }  // end filter
  {  // handler
    IL_0039:  castclass  "System.Exception"
    IL_003e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0043:  leave.s    IL_0013
  }
  IL_0045:  ldc.i4     0x800a0033
  IL_004a:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_004f:  throw
  IL_0050:  ldloc.1
  IL_0051:  brfalse.s  IL_0059
  IL_0053:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0058:  nop
  IL_0059:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestOnError_GotoM1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        On Error GoTo -1
        System.Console.WriteLine(1)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size       85 (0x55)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.0
  IL_0006:  stloc.1
  IL_0007:  ldc.i4.1
  IL_0008:  call       "Sub System.Console.WriteLine(Integer)"
  IL_000d:  leave.s    IL_004c
  IL_000f:  ldc.i4.m1
  IL_0010:  stloc.1
  IL_0011:  ldloc.0
  IL_0012:  switch    (
  IL_001f,
  IL_001f)
  IL_001f:  leave.s    IL_0041
}
  filter
{
  IL_0021:  isinst     "System.Exception"
  IL_0026:  ldnull
  IL_0027:  cgt.un
  IL_0029:  ldloc.0
  IL_002a:  ldc.i4.0
  IL_002b:  cgt.un
  IL_002d:  and
  IL_002e:  ldloc.1
  IL_002f:  ldc.i4.0
  IL_0030:  ceq
  IL_0032:  and
  IL_0033:  endfilter
}  // end filter
{  // handler
  IL_0035:  castclass  "System.Exception"
  IL_003a:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_003f:  leave.s    IL_000f
}
  IL_0041:  ldc.i4     0x800a0033
  IL_0046:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_004b:  throw
  IL_004c:  ldloc.1
  IL_004d:  brfalse.s  IL_0054
  IL_004f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0054:  ret
}
]]>)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestOnError_GotoLabel()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        System.Console.WriteLine(1)
        On Error GoTo OnErrorLabel
        System.Console.WriteLine(2)
OnErrorLabel:
        System.Console.WriteLine(3)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
2
3
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      101 (0x65)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  .try
{
  IL_0000:  ldc.i4.1
  IL_0001:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0006:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000b:  ldc.i4.2
  IL_000c:  stloc.0
  IL_000d:  ldc.i4.2
  IL_000e:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0013:  ldc.i4.3
  IL_0014:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0019:  leave.s    IL_005c
  IL_001b:  ldc.i4.m1
  IL_001c:  stloc.1
  IL_001d:  ldloc.0
  IL_001e:  switch    (
  IL_002f,
  IL_002f,
  IL_0013)
  IL_002f:  leave.s    IL_0051
}
  filter
{
  IL_0031:  isinst     "System.Exception"
  IL_0036:  ldnull
  IL_0037:  cgt.un
  IL_0039:  ldloc.0
  IL_003a:  ldc.i4.0
  IL_003b:  cgt.un
  IL_003d:  and
  IL_003e:  ldloc.1
  IL_003f:  ldc.i4.0
  IL_0040:  ceq
  IL_0042:  and
  IL_0043:  endfilter
}  // end filter
{  // handler
  IL_0045:  castclass  "System.Exception"
  IL_004a:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_004f:  leave.s    IL_001b
}
  IL_0051:  ldc.i4     0x800a0033
  IL_0056:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_005b:  throw
  IL_005c:  ldloc.1
  IL_005d:  brfalse.s  IL_0064
  IL_005f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0064:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestOnError_ResumeNext()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        System.Console.WriteLine(1)
        On Error Resume Next
        System.Console.WriteLine(2)
        System.Console.WriteLine(3)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
2
3
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      139 (0x8b)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
{
  IL_0000:  ldc.i4.1
  IL_0001:  stloc.2
  IL_0002:  ldc.i4.1
  IL_0003:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0008:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000d:  ldc.i4.1
  IL_000e:  stloc.0
  IL_000f:  ldc.i4.3
  IL_0010:  stloc.2
  IL_0011:  ldc.i4.2
  IL_0012:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0017:  ldc.i4.4
  IL_0018:  stloc.2
  IL_0019:  ldc.i4.3
  IL_001a:  call       "Sub System.Console.WriteLine(Integer)"
  IL_001f:  leave.s    IL_0082
  IL_0021:  ldloc.1
  IL_0022:  ldc.i4.1
  IL_0023:  add
  IL_0024:  ldc.i4.0
  IL_0025:  stloc.1
  IL_0026:  switch    (
  IL_0043,
  IL_0000,
  IL_0008,
  IL_000f,
  IL_0017,
  IL_001f)
  IL_0043:  leave.s    IL_0077
  IL_0045:  ldloc.2
  IL_0046:  stloc.1
  IL_0047:  ldloc.0
  IL_0048:  switch    (
  IL_0055,
  IL_0021)
  IL_0055:  leave.s    IL_0077
}
  filter
{
  IL_0057:  isinst     "System.Exception"
  IL_005c:  ldnull
  IL_005d:  cgt.un
  IL_005f:  ldloc.0
  IL_0060:  ldc.i4.0
  IL_0061:  cgt.un
  IL_0063:  and
  IL_0064:  ldloc.1
  IL_0065:  ldc.i4.0
  IL_0066:  ceq
  IL_0068:  and
  IL_0069:  endfilter
}  // end filter
{  // handler
  IL_006b:  castclass  "System.Exception"
  IL_0070:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0075:  leave.s    IL_0045
}
  IL_0077:  ldc.i4     0x800a0033
  IL_007c:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0081:  throw
  IL_0082:  ldloc.1
  IL_0083:  brfalse.s  IL_008a
  IL_0085:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_008a:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestOnError_ResumeNext_2()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        System.Console.WriteLine(1)
        On Error Resume Next
        System.Console.WriteLine(2)
        On Error Resume Next
        System.Console.WriteLine(3)
        On Error Resume Next
        System.Console.WriteLine(4)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[
1
2
3
4
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      194 (0xc2)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  ldc.i4.1
    IL_0003:  stloc.2
    IL_0004:  ldc.i4.1
    IL_0005:  call       "Sub System.Console.WriteLine(Integer)"
    IL_000a:  nop
    IL_000b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0010:  nop
    IL_0011:  ldc.i4.s   -2
    IL_0013:  stloc.0
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  ldc.i4.2
    IL_0017:  call       "Sub System.Console.WriteLine(Integer)"
    IL_001c:  nop
    IL_001d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0022:  nop
    IL_0023:  ldc.i4.s   -3
    IL_0025:  stloc.0
    IL_0026:  ldc.i4.5
    IL_0027:  stloc.2
    IL_0028:  ldc.i4.3
    IL_0029:  call       "Sub System.Console.WriteLine(Integer)"
    IL_002e:  nop
    IL_002f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0034:  nop
    IL_0035:  ldc.i4.s   -4
    IL_0037:  stloc.0
    IL_0038:  ldc.i4.7
    IL_0039:  stloc.2
    IL_003a:  ldc.i4.4
    IL_003b:  call       "Sub System.Console.WriteLine(Integer)"
    IL_0040:  nop
    IL_0041:  leave.s    IL_00b8
    IL_0043:  ldloc.1
    IL_0044:  ldc.i4.1
    IL_0045:  add
    IL_0046:  ldc.i4.0
    IL_0047:  stloc.1
    IL_0048:  switch    (
        IL_0071,
        IL_0002,
        IL_000b,
        IL_0014,
        IL_001d,
        IL_0026,
        IL_002f,
        IL_0038,
        IL_0041)
    IL_0071:  leave.s    IL_00ad
    IL_0073:  ldloc.2
    IL_0074:  stloc.1
    IL_0075:  ldloc.0
    IL_0076:  ldc.i4.s   -2
    IL_0078:  bgt.s      IL_007d
    IL_007a:  ldc.i4.1
    IL_007b:  br.s       IL_007e
    IL_007d:  ldloc.0
    IL_007e:  switch    (
        IL_008b,
        IL_0043)
    IL_008b:  leave.s    IL_00ad
  }
  filter
  {
    IL_008d:  isinst     "System.Exception"
    IL_0092:  ldnull
    IL_0093:  cgt.un
    IL_0095:  ldloc.0
    IL_0096:  ldc.i4.0
    IL_0097:  cgt.un
    IL_0099:  and
    IL_009a:  ldloc.1
    IL_009b:  ldc.i4.0
    IL_009c:  ceq
    IL_009e:  and
    IL_009f:  endfilter
  }  // end filter
  {  // handler
    IL_00a1:  castclass  "System.Exception"
    IL_00a6:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ab:  leave.s    IL_0073
  }
  IL_00ad:  ldc.i4     0x800a0033
  IL_00b2:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b7:  throw
  IL_00b8:  ldloc.1
  IL_00b9:  brfalse.s  IL_00c1
  IL_00bb:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c0:  nop
  IL_00c1:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestResume()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        System.Console.WriteLine(1)
	Return
        System.Console.WriteLine(2)
        Resume 
        System.Console.WriteLine(3)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      162 (0xa2)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  ldc.i4.1
    IL_0001:  stloc.2
    IL_0002:  ldc.i4.1
    IL_0003:  call       "Sub System.Console.WriteLine(Integer)"
    IL_0008:  br.s       IL_002f
    IL_000a:  ldc.i4.3
    IL_000b:  stloc.2
    IL_000c:  ldc.i4.2
    IL_000d:  call       "Sub System.Console.WriteLine(Integer)"
    IL_0012:  ldc.i4.4
    IL_0013:  stloc.2
    IL_0014:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0019:  ldloc.1
    IL_001a:  brtrue.s   IL_0031
    IL_001c:  ldc.i4     0x800a0014
    IL_0021:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0026:  throw
    IL_0027:  ldc.i4.5
    IL_0028:  stloc.2
    IL_0029:  ldc.i4.3
    IL_002a:  call       "Sub System.Console.WriteLine(Integer)"
    IL_002f:  leave.s    IL_0099
    IL_0031:  ldloc.1
    IL_0032:  br.s       IL_0037
    IL_0034:  ldloc.1
    IL_0035:  ldc.i4.1
    IL_0036:  add
    IL_0037:  ldc.i4.0
    IL_0038:  stloc.1
    IL_0039:  switch    (
        IL_005a,
        IL_0000,
        IL_002f,
        IL_000a,
        IL_0012,
        IL_0027,
        IL_002f)
    IL_005a:  leave.s    IL_008e
    IL_005c:  ldloc.2
    IL_005d:  stloc.1
    IL_005e:  ldloc.0
    IL_005f:  switch    (
        IL_006c,
        IL_0034)
    IL_006c:  leave.s    IL_008e
  }
  filter
  {
    IL_006e:  isinst     "System.Exception"
    IL_0073:  ldnull
    IL_0074:  cgt.un
    IL_0076:  ldloc.0
    IL_0077:  ldc.i4.0
    IL_0078:  cgt.un
    IL_007a:  and
    IL_007b:  ldloc.1
    IL_007c:  ldc.i4.0
    IL_007d:  ceq
    IL_007f:  and
    IL_0080:  endfilter
  }  // end filter
  {  // handler
    IL_0082:  castclass  "System.Exception"
    IL_0087:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_008c:  leave.s    IL_005c
  }
  IL_008e:  ldc.i4     0x800a0033
  IL_0093:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0098:  throw
  IL_0099:  ldloc.1
  IL_009a:  brfalse.s  IL_00a1
  IL_009c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a1:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestResumeNext()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
        System.Console.WriteLine(1)
	Return 
        System.Console.WriteLine(2)
        Resume Next
        System.Console.WriteLine(3)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      159 (0x9f)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  ldc.i4.1
    IL_0001:  stloc.2
    IL_0002:  ldc.i4.1
    IL_0003:  call       "Sub System.Console.WriteLine(Integer)"
    IL_0008:  br.s       IL_002f
    IL_000a:  ldc.i4.3
    IL_000b:  stloc.2
    IL_000c:  ldc.i4.2
    IL_000d:  call       "Sub System.Console.WriteLine(Integer)"
    IL_0012:  ldc.i4.4
    IL_0013:  stloc.2
    IL_0014:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0019:  ldloc.1
    IL_001a:  brtrue.s   IL_0031
    IL_001c:  ldc.i4     0x800a0014
    IL_0021:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0026:  throw
    IL_0027:  ldc.i4.5
    IL_0028:  stloc.2
    IL_0029:  ldc.i4.3
    IL_002a:  call       "Sub System.Console.WriteLine(Integer)"
    IL_002f:  leave.s    IL_0096
    IL_0031:  ldloc.1
    IL_0032:  ldc.i4.1
    IL_0033:  add
    IL_0034:  ldc.i4.0
    IL_0035:  stloc.1
    IL_0036:  switch    (
        IL_0057,
        IL_0000,
        IL_002f,
        IL_000a,
        IL_0012,
        IL_0027,
        IL_002f)
    IL_0057:  leave.s    IL_008b
    IL_0059:  ldloc.2
    IL_005a:  stloc.1
    IL_005b:  ldloc.0
    IL_005c:  switch    (
        IL_0069,
        IL_0031)
    IL_0069:  leave.s    IL_008b
  }
  filter
  {
    IL_006b:  isinst     "System.Exception"
    IL_0070:  ldnull
    IL_0071:  cgt.un
    IL_0073:  ldloc.0
    IL_0074:  ldc.i4.0
    IL_0075:  cgt.un
    IL_0077:  and
    IL_0078:  ldloc.1
    IL_0079:  ldc.i4.0
    IL_007a:  ceq
    IL_007c:  and
    IL_007d:  endfilter
  }  // end filter
  {  // handler
    IL_007f:  castclass  "System.Exception"
    IL_0084:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0089:  leave.s    IL_0059
  }
  IL_008b:  ldc.i4     0x800a0033
  IL_0090:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0095:  throw
  IL_0096:  ldloc.1
  IL_0097:  brfalse.s  IL_009e
  IL_0099:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_009e:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub TestResumeLabel()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
Label:
        System.Console.WriteLine(1)
	    Return 
        System.Console.WriteLine(2)
        Resume Label
        System.Console.WriteLine(3)
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
1
]]>)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size       78 (0x4e)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  .try
{
  IL_0000:  ldc.i4.1
  IL_0001:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0006:  leave.s    IL_0045
  IL_0008:  ldc.i4.m1
  IL_0009:  stloc.1
  IL_000a:  ldloc.0
  IL_000b:  switch    (
  IL_0018,
  IL_0018)
  IL_0018:  leave.s    IL_003a
}
  filter
{
  IL_001a:  isinst     "System.Exception"
  IL_001f:  ldnull
  IL_0020:  cgt.un
  IL_0022:  ldloc.0
  IL_0023:  ldc.i4.0
  IL_0024:  cgt.un
  IL_0026:  and
  IL_0027:  ldloc.1
  IL_0028:  ldc.i4.0
  IL_0029:  ceq
  IL_002b:  and
  IL_002c:  endfilter
}  // end filter
{  // handler
  IL_002e:  castclass  "System.Exception"
  IL_0033:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0038:  leave.s    IL_0008
}
  IL_003a:  ldc.i4     0x800a0033
  IL_003f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0044:  throw
  IL_0045:  ldloc.1
  IL_0046:  brfalse.s  IL_004d
  IL_0048:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_004d:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub BaseCtor()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
	Dim x = New Derived(2)
    End Sub
End Module

Class Base
    Sub New()
    End Sub

    Sub New(x as Integer)
	    On Error Goto 0
	    System.Console.WriteLine(2)
    End Sub
End Class

Class Derived
    Inherits Base

    Sub New(x as Integer)
	    MyBase.New(x)
	    On Error Goto 0
	    System.Console.WriteLine(1)
    End Sub

    Sub New(x as String)
	    Me.New(CInt(x))
	    On Error Goto 0
	    System.Console.WriteLine(1)
    End Sub
End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
2
1
]]>)
 
            compilationVerifier.VerifyIL("Base..ctor(Integer)",
            <![CDATA[
{
  // Code size       91 (0x5b)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  IL_0000:  ldarg.0
  IL_0001:  call       "Sub Object..ctor()"
  .try
{
  IL_0006:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000b:  ldc.i4.0
  IL_000c:  stloc.0
  IL_000d:  ldc.i4.2
  IL_000e:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0013:  leave.s    IL_0052
  IL_0015:  ldc.i4.m1
  IL_0016:  stloc.1
  IL_0017:  ldloc.0
  IL_0018:  switch    (
  IL_0025,
  IL_0025)
  IL_0025:  leave.s    IL_0047
}
  filter
{
  IL_0027:  isinst     "System.Exception"
  IL_002c:  ldnull
  IL_002d:  cgt.un
  IL_002f:  ldloc.0
  IL_0030:  ldc.i4.0
  IL_0031:  cgt.un
  IL_0033:  and
  IL_0034:  ldloc.1
  IL_0035:  ldc.i4.0
  IL_0036:  ceq
  IL_0038:  and
  IL_0039:  endfilter
}  // end filter
{  // handler
  IL_003b:  castclass  "System.Exception"
  IL_0040:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0045:  leave.s    IL_0015
}
  IL_0047:  ldc.i4     0x800a0033
  IL_004c:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0051:  throw
  IL_0052:  ldloc.1
  IL_0053:  brfalse.s  IL_005a
  IL_0055:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_005a:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Derived..ctor(String)",
            <![CDATA[
{
  // Code size       97 (0x61)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  call       "Function Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String) As Integer"
  IL_0007:  call       "Sub Derived..ctor(Integer)"
  .try
{
  IL_000c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0011:  ldc.i4.0
  IL_0012:  stloc.0
  IL_0013:  ldc.i4.1
  IL_0014:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0019:  leave.s    IL_0058
  IL_001b:  ldc.i4.m1
  IL_001c:  stloc.1
  IL_001d:  ldloc.0
  IL_001e:  switch    (
  IL_002b,
  IL_002b)
  IL_002b:  leave.s    IL_004d
}
  filter
{
  IL_002d:  isinst     "System.Exception"
  IL_0032:  ldnull
  IL_0033:  cgt.un
  IL_0035:  ldloc.0
  IL_0036:  ldc.i4.0
  IL_0037:  cgt.un
  IL_0039:  and
  IL_003a:  ldloc.1
  IL_003b:  ldc.i4.0
  IL_003c:  ceq
  IL_003e:  and
  IL_003f:  endfilter
}  // end filter
{  // handler
  IL_0041:  castclass  "System.Exception"
  IL_0046:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_004b:  leave.s    IL_001b
}
  IL_004d:  ldc.i4     0x800a0033
  IL_0052:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0057:  throw
  IL_0058:  ldloc.1
  IL_0059:  brfalse.s  IL_0060
  IL_005b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0060:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Derived..ctor(Integer)",
            <![CDATA[
{
  // Code size       92 (0x5c)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  IL_0000:  ldarg.0
  IL_0001:  ldarg.1
  IL_0002:  call       "Sub Base..ctor(Integer)"
  .try
{
  IL_0007:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000c:  ldc.i4.0
  IL_000d:  stloc.0
  IL_000e:  ldc.i4.1
  IL_000f:  call       "Sub System.Console.WriteLine(Integer)"
  IL_0014:  leave.s    IL_0053
  IL_0016:  ldc.i4.m1
  IL_0017:  stloc.1
  IL_0018:  ldloc.0
  IL_0019:  switch    (
  IL_0026,
  IL_0026)
  IL_0026:  leave.s    IL_0048
}
  filter
{
  IL_0028:  isinst     "System.Exception"
  IL_002d:  ldnull
  IL_002e:  cgt.un
  IL_0030:  ldloc.0
  IL_0031:  ldc.i4.0
  IL_0032:  cgt.un
  IL_0034:  and
  IL_0035:  ldloc.1
  IL_0036:  ldc.i4.0
  IL_0037:  ceq
  IL_0039:  and
  IL_003a:  endfilter
}  // end filter
{  // handler
  IL_003c:  castclass  "System.Exception"
  IL_0041:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0046:  leave.s    IL_0016
}
  IL_0048:  ldc.i4     0x800a0033
  IL_004d:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0052:  throw
  IL_0053:  ldloc.1
  IL_0054:  brfalse.s  IL_005b
  IL_0056:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_005b:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub ExplicitTry()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Sub Main()
        Try ' 1
            On Error GoTo 0
            Resume
        Catch ex As Exception
        End Try

        On Error GoTo -1
        Resume Next

        Try ' 2
        Catch ex As Exception
        End Try
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC30544: Method cannot contain both a 'Try' statement and an 'On Error' or 'Resume' statement.
        Try ' 1
        ~~~~~~~~
BC30544: Method cannot contain both a 'Try' statement and an 'On Error' or 'Resume' statement.
            On Error GoTo 0
            ~~~~~~~~~~~~~~~
BC30544: Method cannot contain both a 'Try' statement and an 'On Error' or 'Resume' statement.
            Resume
            ~~~~~~
BC30544: Method cannot contain both a 'Try' statement and an 'On Error' or 'Resume' statement.
        On Error GoTo -1
        ~~~~~~~~~~~~~~~~
BC30544: Method cannot contain both a 'Try' statement and an 'On Error' or 'Resume' statement.
        Resume Next
        ~~~~~~~~~~~
BC30544: Method cannot contain both a 'Try' statement and an 'On Error' or 'Resume' statement.
        Try ' 2
        ~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub OnErrorInSyncLockOrUsing()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Sub Main()
        SyncLock New Object()
            On Error GoTo 0 ' 1
            Resume

            Using New Object()
                On Error GoTo -1 ' 2
                Resume Next
            End Using

            On Error GoTo -1 ' 3
            Resume Next

            SyncLock New Object()
                On Error GoTo 0 ' 4
                Resume
            End SyncLock

            On Error GoTo -1 ' 5
            Resume Next
        End SyncLock

        Using New Object()
            On Error GoTo -1 ' 6
            Resume Next

            SyncLock New Object()
                On Error GoTo 0 ' 7
                Resume
            End SyncLock

            On Error GoTo 0 ' 8
            Resume

            Using New Object()
                On Error GoTo -1 ' 9
                Resume Next
            End Using

            On Error GoTo 0 ' 10
            Resume
        End Using
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC30752: 'On Error' statements are not valid within 'SyncLock' statements.
            On Error GoTo 0 ' 1
            ~~~~~~~~~~~~~~~
BC36013: 'On Error' statements are not valid within 'Using' statements.
                On Error GoTo -1 ' 2
                ~~~~~~~~~~~~~~~~
BC30752: 'On Error' statements are not valid within 'SyncLock' statements.
            On Error GoTo -1 ' 3
            ~~~~~~~~~~~~~~~~
BC30752: 'On Error' statements are not valid within 'SyncLock' statements.
                On Error GoTo 0 ' 4
                ~~~~~~~~~~~~~~~
BC30752: 'On Error' statements are not valid within 'SyncLock' statements.
            On Error GoTo -1 ' 5
            ~~~~~~~~~~~~~~~~
BC36013: 'On Error' statements are not valid within 'Using' statements.
            On Error GoTo -1 ' 6
            ~~~~~~~~~~~~~~~~
BC30752: 'On Error' statements are not valid within 'SyncLock' statements.
                On Error GoTo 0 ' 7
                ~~~~~~~~~~~~~~~
BC36013: 'On Error' statements are not valid within 'Using' statements.
            On Error GoTo 0 ' 8
            ~~~~~~~~~~~~~~~
BC36013: 'On Error' statements are not valid within 'Using' statements.
                On Error GoTo -1 ' 9
                ~~~~~~~~~~~~~~~~
BC36013: 'On Error' statements are not valid within 'Using' statements.
            On Error GoTo 0 ' 10
            ~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub InsideLambda()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Sub Main()
        Dim x = Sub()
                    On Error GoTo 0 ' 1
                    Resume
                End Sub

        Dim y = Sub() On Error GoTo -1

        Dim z = Sub() Resume
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC36668: 'On Error' and 'Resume' cannot appear inside a lambda expression.
                    On Error GoTo 0 ' 1
                    ~~~~~~~~~~~~~~~
BC36668: 'On Error' and 'Resume' cannot appear inside a lambda expression.
                    Resume
                    ~~~~~~
BC36668: 'On Error' and 'Resume' cannot appear inside a lambda expression.
        Dim y = Sub() On Error GoTo -1
                      ~~~~~~~~~~~~~~~~
BC36668: 'On Error' and 'Resume' cannot appear inside a lambda expression.
        Dim z = Sub() Resume
                      ~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub BadLabel()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Sub Main()
        On Error GoTo DoesntExist1

        Resume DoesntExist2
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC30132: Label 'DoesntExist1' is not defined.
        On Error GoTo DoesntExist1
                      ~~~~~~~~~~~~
BC30132: Label 'DoesntExist2' is not defined.
        Resume DoesntExist2
               ~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub OnErrorInFunction()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Function Main() As Integer
    	On Error Resume Next
        Return 1
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      112 (0x70)
  .maxstack  3
  .locals init (Integer V_0, //Main
                Integer V_1,
                Integer V_2,
                Integer V_3)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.1
  IL_0006:  stloc.1
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.3
  IL_0009:  ldc.i4.1
  IL_000a:  stloc.0
  IL_000b:  leave.s    IL_0066
  IL_000d:  ldloc.2
  IL_000e:  ldc.i4.1
  IL_000f:  add
  IL_0010:  ldc.i4.0
  IL_0011:  stloc.2
  IL_0012:  switch    (
  IL_0027,
  IL_0000,
  IL_0007,
  IL_000b)
  IL_0027:  leave.s    IL_005b
  IL_0029:  ldloc.3
  IL_002a:  stloc.2
  IL_002b:  ldloc.1
  IL_002c:  switch    (
  IL_0039,
  IL_000d)
  IL_0039:  leave.s    IL_005b
}
  filter
{
  IL_003b:  isinst     "System.Exception"
  IL_0040:  ldnull
  IL_0041:  cgt.un
  IL_0043:  ldloc.1
  IL_0044:  ldc.i4.0
  IL_0045:  cgt.un
  IL_0047:  and
  IL_0048:  ldloc.2
  IL_0049:  ldc.i4.0
  IL_004a:  ceq
  IL_004c:  and
  IL_004d:  endfilter
}  // end filter
{  // handler
  IL_004f:  castclass  "System.Exception"
  IL_0054:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0059:  leave.s    IL_0029
}
  IL_005b:  ldc.i4     0x800a0033
  IL_0060:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0065:  throw
  IL_0066:  ldloc.2
  IL_0067:  brfalse.s  IL_006e
  IL_0069:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_006e:  ldloc.0
  IL_006f:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub UseSiteErrors()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Class Program
    Sub Main()
        On Error GoTo -1
        On Error GoTo 0
        On Error GoTo label
        On Error Resume Next

        Resume 
        Resume Next
        Resume Label
label:
    End Sub
End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40(source, options:=TestOptions.ReleaseDll)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
    Sub Main()
    ~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError' is not defined.
    Sub Main()
    ~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError' is not defined.
    Sub Main()
    ~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        On Error GoTo -1
        ~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        On Error GoTo 0
        ~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        On Error GoTo label
        ~~~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        On Error Resume Next
        ~~~~~~~~~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        Resume 
        ~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError' is not defined.
        Resume 
        ~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        Resume Next
        ~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError' is not defined.
        Resume Next
        ~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError' is not defined.
        Resume Label
        ~~~~~~~~~~~~
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError' is not defined.
        Resume Label
        ~~~~~~~~~~~~
</expected>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_If_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state() As Integer

    Sub Main()
        Dim states()() As Integer = {({1, 1, 1}),
                                     ({1, 2, 1}),
                                     ({0, 2, 1}),
                                     ({2, 1, 1}),
                                     ({2, 2, 1})}

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test1 - {0}", i)
            state = states(i)
            Test1()
        Next

        System.Console.WriteLine()

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test2 - {0}", i)
            state = states(i)
            Test2()
        Next

        states = {({1, 1, 1, 1}),
                  ({1, 2, 1, 1}),
                  ({0, 1, 1, 1}),
                  ({0, 1, 2, 1}),
                  ({2, 1, 1, 1}),
                  ({2, 2, 1, 1})}

        System.Console.WriteLine()

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test3 - {0}", i)
            state = states(i)
            Test3()
        Next

        System.Console.WriteLine()

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test4 - {0}", i)
            state = states(i)
            Test4()
        Next

        states = {({1, 1, 1, 1, 1}),
                  ({1, 2, 1, 1, 1}),
                  ({2, 1, 1, 1, 1}),
                  ({2, 2, 1, 1, 1}),
                  ({0, 1, 1, 1, 1}),
                  ({0, 1, 1, 2, 1}),
                  ({0, 1, 2, 1, 1}),
                  ({0, 1, 2, 2, 1}),
                  ({0, 1, 0, 1, 1})}

        System.Console.WriteLine()

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test5 - {0}", i)
            state = states(i)
            Test5()
        Next

        states = {({1, 1, 1, 1, 1, 1}),
                  ({1, 2, 1, 1, 1, 1}),
                  ({2, 1, 1, 1, 1, 1}),
                  ({2, 2, 1, 1, 1, 1}),
                  ({0, 1, 1, 1, 1, 1}),
                  ({0, 1, 1, 2, 1, 1}),
                  ({0, 1, 2, 1, 1, 1}),
                  ({0, 1, 2, 2, 1, 1}),
                  ({0, 1, 0, 1, 1, 1}),
                  ({0, 1, 0, 1, 2, 1})}

        System.Console.WriteLine()

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test6 - {0}", i)
            state = states(i)
            Test6()
        Next
    End Sub

    Sub Test1()
        On Error Resume Next
        Throw New System.NotSupportedException()
        If M(0) Then
            M(1)
        End If
        M(2)
    End Sub

    Sub Test2()
        On Error Resume Next
        Throw New System.NotSupportedException()
        If M(0) Then M(1)
        M(2)
    End Sub

    Sub Test3()
        On Error Resume Next
        Throw New System.NotSupportedException()
        If M(0) Then
            M(1)
        Else
            M(2)
        End If
        M(3)
    End Sub

    Sub Test4()
        On Error Resume Next
        Throw New System.NotSupportedException()
        If M(0) Then M(1) Else M(2)
        M(3)
    End Sub

    Sub Test5()
        On Error Resume Next
        Throw New System.NotSupportedException()
        If M(0) Then
            M(1)
        ElseIf M(2) Then
            M(3)
        End If
        M(4)
    End Sub

    Sub Test6()
        On Error Resume Next
        Throw New System.NotSupportedException()
        If M(0) Then
            M(1)
        ElseIf M(2) Then
            M(3)
        Else
            M(4)
        End If
        M(5)
    End Sub

    Function M(num As Integer) As Boolean
        System.Console.WriteLine("M{0} - {1}", num, state(num))
        If state(num) = 2 Then
            Throw New System.NotSupportedException()
        End If

        Return state(num) <> 0
    End Function

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
Test1 - 0
M0 - 1
M1 - 1
M2 - 1
Test1 - 1
M0 - 1
M1 - 2
M2 - 1
Test1 - 2
M0 - 0
M2 - 1
Test1 - 3
M0 - 2
M1 - 1
M2 - 1
Test1 - 4
M0 - 2
M1 - 2
M2 - 1

Test2 - 0
M0 - 1
M1 - 1
M2 - 1
Test2 - 1
M0 - 1
M1 - 2
M2 - 1
Test2 - 2
M0 - 0
M2 - 1
Test2 - 3
M0 - 2
M1 - 1
M2 - 1
Test2 - 4
M0 - 2
M1 - 2
M2 - 1

Test3 - 0
M0 - 1
M1 - 1
M3 - 1
Test3 - 1
M0 - 1
M1 - 2
M3 - 1
Test3 - 2
M0 - 0
M2 - 1
M3 - 1
Test3 - 3
M0 - 0
M2 - 2
M3 - 1
Test3 - 4
M0 - 2
M1 - 1
M3 - 1
Test3 - 5
M0 - 2
M1 - 2
M3 - 1

Test4 - 0
M0 - 1
M1 - 1
M3 - 1
Test4 - 1
M0 - 1
M1 - 2
M3 - 1
Test4 - 2
M0 - 0
M2 - 1
M3 - 1
Test4 - 3
M0 - 0
M2 - 2
M3 - 1
Test4 - 4
M0 - 2
M1 - 1
M3 - 1
Test4 - 5
M0 - 2
M1 - 2
M3 - 1

Test5 - 0
M0 - 1
M1 - 1
M4 - 1
Test5 - 1
M0 - 1
M1 - 2
M4 - 1
Test5 - 2
M0 - 2
M1 - 1
M4 - 1
Test5 - 3
M0 - 2
M1 - 2
M4 - 1
Test5 - 4
M0 - 0
M2 - 1
M3 - 1
M4 - 1
Test5 - 5
M0 - 0
M2 - 1
M3 - 2
M4 - 1
Test5 - 6
M0 - 0
M2 - 2
M3 - 1
M4 - 1
Test5 - 7
M0 - 0
M2 - 2
M3 - 2
M4 - 1
Test5 - 8
M0 - 0
M2 - 0
M4 - 1

Test6 - 0
M0 - 1
M1 - 1
M5 - 1
Test6 - 1
M0 - 1
M1 - 2
M5 - 1
Test6 - 2
M0 - 2
M1 - 1
M5 - 1
Test6 - 3
M0 - 2
M1 - 2
M5 - 1
Test6 - 4
M0 - 0
M2 - 1
M3 - 1
M5 - 1
Test6 - 5
M0 - 0
M2 - 1
M3 - 2
M5 - 1
Test6 - 6
M0 - 0
M2 - 2
M3 - 1
M5 - 1
Test6 - 7
M0 - 0
M2 - 2
M3 - 2
M5 - 1
Test6 - 8
M0 - 0
M2 - 0
M4 - 1
M5 - 1
Test6 - 9
M0 - 0
M2 - 0
M4 - 2
M5 - 1
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_If_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Sub Main()
    End Sub

    Sub Test1()
        On Error Resume Next
        M0()
	If M1() Then
            M2()
        End if
        M3()
    End Sub

    Sub Test2()
        On Error Resume Next
        M0()
	If M1() Then M2()
        M3()
    End Sub

    Sub Test3()
        On Error Resume Next
        M0()
	If M1() Then
            M2()
        Else
            M3()
        End if
        M4()
    End Sub

    Sub Test4()
        On Error Resume Next
        M0()
	If M1() Then M2() Else M3()
        M4()
    End Sub

    Sub Test5()
        On Error Resume Next
        M0()
	If M1() Then
            M2()
        ElseIf M3()
            M4()
        End if
        M5()
    End Sub

    Sub Test6()
        On Error Resume Next
        M0()
	If M1() Then
            M2()
        ElseIf M3()
            M4()
        Else 
            M5()
        End if
        M6()
    End Sub

    Function M0() As Boolean
        Return true
    End Function

    Function M1() As Boolean
        Return true
    End Function

    Function M2() As Boolean
        Return true
    End Function

    Function M3() As Boolean
        Return true
    End Function

    Function M4() As Boolean
        Return true
    End Function

    Function M5() As Boolean
        Return true
    End Function

    Function M6() As Boolean
        Return true
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Test1",
            <![CDATA[
{
  // Code size      152 (0x98)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Function Program.M0() As Boolean"
    IL_000e:  pop
    IL_000f:  ldc.i4.3
    IL_0010:  stloc.2
    IL_0011:  call       "Function Program.M1() As Boolean"
    IL_0016:  brfalse.s  IL_0020
    IL_0018:  ldc.i4.4
    IL_0019:  stloc.2
    IL_001a:  call       "Function Program.M2() As Boolean"
    IL_001f:  pop
    IL_0020:  ldc.i4.5
    IL_0021:  stloc.2
    IL_0022:  call       "Function Program.M3() As Boolean"
    IL_0027:  pop
    IL_0028:  leave.s    IL_008f
    IL_002a:  ldloc.1
    IL_002b:  ldc.i4.1
    IL_002c:  add
    IL_002d:  ldc.i4.0
    IL_002e:  stloc.1
    IL_002f:  switch    (
        IL_0050,
        IL_0000,
        IL_0007,
        IL_000f,
        IL_0018,
        IL_0020,
        IL_0028)
    IL_0050:  leave.s    IL_0084
    IL_0052:  ldloc.2
    IL_0053:  stloc.1
    IL_0054:  ldloc.0
    IL_0055:  switch    (
        IL_0062,
        IL_002a)
    IL_0062:  leave.s    IL_0084
  }
  filter
  {
    IL_0064:  isinst     "System.Exception"
    IL_0069:  ldnull
    IL_006a:  cgt.un
    IL_006c:  ldloc.0
    IL_006d:  ldc.i4.0
    IL_006e:  cgt.un
    IL_0070:  and
    IL_0071:  ldloc.1
    IL_0072:  ldc.i4.0
    IL_0073:  ceq
    IL_0075:  and
    IL_0076:  endfilter
  }  // end filter
  {  // handler
    IL_0078:  castclass  "System.Exception"
    IL_007d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0082:  leave.s    IL_0052
  }
  IL_0084:  ldc.i4     0x800a0033
  IL_0089:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_008e:  throw
  IL_008f:  ldloc.1
  IL_0090:  brfalse.s  IL_0097
  IL_0092:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0097:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test2",
            <![CDATA[
{
  // Code size      152 (0x98)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Function Program.M0() As Boolean"
    IL_000e:  pop
    IL_000f:  ldc.i4.3
    IL_0010:  stloc.2
    IL_0011:  call       "Function Program.M1() As Boolean"
    IL_0016:  brfalse.s  IL_0020
    IL_0018:  ldc.i4.4
    IL_0019:  stloc.2
    IL_001a:  call       "Function Program.M2() As Boolean"
    IL_001f:  pop
    IL_0020:  ldc.i4.5
    IL_0021:  stloc.2
    IL_0022:  call       "Function Program.M3() As Boolean"
    IL_0027:  pop
    IL_0028:  leave.s    IL_008f
    IL_002a:  ldloc.1
    IL_002b:  ldc.i4.1
    IL_002c:  add
    IL_002d:  ldc.i4.0
    IL_002e:  stloc.1
    IL_002f:  switch    (
        IL_0050,
        IL_0000,
        IL_0007,
        IL_000f,
        IL_0018,
        IL_0020,
        IL_0028)
    IL_0050:  leave.s    IL_0084
    IL_0052:  ldloc.2
    IL_0053:  stloc.1
    IL_0054:  ldloc.0
    IL_0055:  switch    (
        IL_0062,
        IL_002a)
    IL_0062:  leave.s    IL_0084
  }
  filter
  {
    IL_0064:  isinst     "System.Exception"
    IL_0069:  ldnull
    IL_006a:  cgt.un
    IL_006c:  ldloc.0
    IL_006d:  ldc.i4.0
    IL_006e:  cgt.un
    IL_0070:  and
    IL_0071:  ldloc.1
    IL_0072:  ldc.i4.0
    IL_0073:  ceq
    IL_0075:  and
    IL_0076:  endfilter
  }  // end filter
  {  // handler
    IL_0078:  castclass  "System.Exception"
    IL_007d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0082:  leave.s    IL_0052
  }
  IL_0084:  ldc.i4     0x800a0033
  IL_0089:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_008e:  throw
  IL_008f:  ldloc.1
  IL_0090:  brfalse.s  IL_0097
  IL_0092:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0097:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test3",
            <![CDATA[
{
  // Code size      170 (0xaa)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Function Program.M0() As Boolean"
    IL_000e:  pop
    IL_000f:  ldc.i4.3
    IL_0010:  stloc.2
    IL_0011:  call       "Function Program.M1() As Boolean"
    IL_0016:  brfalse.s  IL_0022
    IL_0018:  ldc.i4.4
    IL_0019:  stloc.2
    IL_001a:  call       "Function Program.M2() As Boolean"
    IL_001f:  pop
    IL_0020:  br.s       IL_002a
    IL_0022:  ldc.i4.6
    IL_0023:  stloc.2
    IL_0024:  call       "Function Program.M3() As Boolean"
    IL_0029:  pop
    IL_002a:  ldc.i4.7
    IL_002b:  stloc.2
    IL_002c:  call       "Function Program.M4() As Boolean"
    IL_0031:  pop
    IL_0032:  leave.s    IL_00a1
    IL_0034:  ldloc.1
    IL_0035:  ldc.i4.1
    IL_0036:  add
    IL_0037:  ldc.i4.0
    IL_0038:  stloc.1
    IL_0039:  switch    (
        IL_0062,
        IL_0000,
        IL_0007,
        IL_000f,
        IL_0018,
        IL_002a,
        IL_0022,
        IL_002a,
        IL_0032)
    IL_0062:  leave.s    IL_0096
    IL_0064:  ldloc.2
    IL_0065:  stloc.1
    IL_0066:  ldloc.0
    IL_0067:  switch    (
        IL_0074,
        IL_0034)
    IL_0074:  leave.s    IL_0096
  }
  filter
  {
    IL_0076:  isinst     "System.Exception"
    IL_007b:  ldnull
    IL_007c:  cgt.un
    IL_007e:  ldloc.0
    IL_007f:  ldc.i4.0
    IL_0080:  cgt.un
    IL_0082:  and
    IL_0083:  ldloc.1
    IL_0084:  ldc.i4.0
    IL_0085:  ceq
    IL_0087:  and
    IL_0088:  endfilter
  }  // end filter
  {  // handler
    IL_008a:  castclass  "System.Exception"
    IL_008f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0094:  leave.s    IL_0064
  }
  IL_0096:  ldc.i4     0x800a0033
  IL_009b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a0:  throw
  IL_00a1:  ldloc.1
  IL_00a2:  brfalse.s  IL_00a9
  IL_00a4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a9:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test4",
            <![CDATA[
{
  // Code size      170 (0xaa)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Function Program.M0() As Boolean"
    IL_000e:  pop
    IL_000f:  ldc.i4.3
    IL_0010:  stloc.2
    IL_0011:  call       "Function Program.M1() As Boolean"
    IL_0016:  brfalse.s  IL_0022
    IL_0018:  ldc.i4.4
    IL_0019:  stloc.2
    IL_001a:  call       "Function Program.M2() As Boolean"
    IL_001f:  pop
    IL_0020:  br.s       IL_002a
    IL_0022:  ldc.i4.6
    IL_0023:  stloc.2
    IL_0024:  call       "Function Program.M3() As Boolean"
    IL_0029:  pop
    IL_002a:  ldc.i4.7
    IL_002b:  stloc.2
    IL_002c:  call       "Function Program.M4() As Boolean"
    IL_0031:  pop
    IL_0032:  leave.s    IL_00a1
    IL_0034:  ldloc.1
    IL_0035:  ldc.i4.1
    IL_0036:  add
    IL_0037:  ldc.i4.0
    IL_0038:  stloc.1
    IL_0039:  switch    (
        IL_0062,
        IL_0000,
        IL_0007,
        IL_000f,
        IL_0018,
        IL_002a,
        IL_0022,
        IL_002a,
        IL_0032)
    IL_0062:  leave.s    IL_0096
    IL_0064:  ldloc.2
    IL_0065:  stloc.1
    IL_0066:  ldloc.0
    IL_0067:  switch    (
        IL_0074,
        IL_0034)
    IL_0074:  leave.s    IL_0096
  }
  filter
  {
    IL_0076:  isinst     "System.Exception"
    IL_007b:  ldnull
    IL_007c:  cgt.un
    IL_007e:  ldloc.0
    IL_007f:  ldc.i4.0
    IL_0080:  cgt.un
    IL_0082:  and
    IL_0083:  ldloc.1
    IL_0084:  ldc.i4.0
    IL_0085:  ceq
    IL_0087:  and
    IL_0088:  endfilter
  }  // end filter
  {  // handler
    IL_008a:  castclass  "System.Exception"
    IL_008f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0094:  leave.s    IL_0064
  }
  IL_0096:  ldc.i4     0x800a0033
  IL_009b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a0:  throw
  IL_00a1:  ldloc.1
  IL_00a2:  brfalse.s  IL_00a9
  IL_00a4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a9:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test5",
            <![CDATA[
{
  // Code size      183 (0xb7)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Function Program.M0() As Boolean"
    IL_000e:  pop
    IL_000f:  ldc.i4.3
    IL_0010:  stloc.2
    IL_0011:  call       "Function Program.M1() As Boolean"
    IL_0016:  brfalse.s  IL_0022
    IL_0018:  ldc.i4.4
    IL_0019:  stloc.2
    IL_001a:  call       "Function Program.M2() As Boolean"
    IL_001f:  pop
    IL_0020:  br.s       IL_0033
    IL_0022:  ldc.i4.6
    IL_0023:  stloc.2
    IL_0024:  call       "Function Program.M3() As Boolean"
    IL_0029:  brfalse.s  IL_0033
    IL_002b:  ldc.i4.7
    IL_002c:  stloc.2
    IL_002d:  call       "Function Program.M4() As Boolean"
    IL_0032:  pop
    IL_0033:  ldc.i4.8
    IL_0034:  stloc.2
    IL_0035:  call       "Function Program.M5() As Boolean"
    IL_003a:  pop
    IL_003b:  leave.s    IL_00ae
    IL_003d:  ldloc.1
    IL_003e:  ldc.i4.1
    IL_003f:  add
    IL_0040:  ldc.i4.0
    IL_0041:  stloc.1
    IL_0042:  switch    (
        IL_006f,
        IL_0000,
        IL_0007,
        IL_000f,
        IL_0018,
        IL_0033,
        IL_0022,
        IL_002b,
        IL_0033,
        IL_003b)
    IL_006f:  leave.s    IL_00a3
    IL_0071:  ldloc.2
    IL_0072:  stloc.1
    IL_0073:  ldloc.0
    IL_0074:  switch    (
        IL_0081,
        IL_003d)
    IL_0081:  leave.s    IL_00a3
  }
  filter
  {
    IL_0083:  isinst     "System.Exception"
    IL_0088:  ldnull
    IL_0089:  cgt.un
    IL_008b:  ldloc.0
    IL_008c:  ldc.i4.0
    IL_008d:  cgt.un
    IL_008f:  and
    IL_0090:  ldloc.1
    IL_0091:  ldc.i4.0
    IL_0092:  ceq
    IL_0094:  and
    IL_0095:  endfilter
  }  // end filter
  {  // handler
    IL_0097:  castclass  "System.Exception"
    IL_009c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00a1:  leave.s    IL_0071
  }
  IL_00a3:  ldc.i4     0x800a0033
  IL_00a8:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00ad:  throw
  IL_00ae:  ldloc.1
  IL_00af:  brfalse.s  IL_00b6
  IL_00b1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b6:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test6",
            <![CDATA[
{
  // Code size      203 (0xcb)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Function Program.M0() As Boolean"
    IL_000e:  pop
    IL_000f:  ldc.i4.3
    IL_0010:  stloc.2
    IL_0011:  call       "Function Program.M1() As Boolean"
    IL_0016:  brfalse.s  IL_0022
    IL_0018:  ldc.i4.4
    IL_0019:  stloc.2
    IL_001a:  call       "Function Program.M2() As Boolean"
    IL_001f:  pop
    IL_0020:  br.s       IL_003e
    IL_0022:  ldc.i4.6
    IL_0023:  stloc.2
    IL_0024:  call       "Function Program.M3() As Boolean"
    IL_0029:  brfalse.s  IL_0035
    IL_002b:  ldc.i4.7
    IL_002c:  stloc.2
    IL_002d:  call       "Function Program.M4() As Boolean"
    IL_0032:  pop
    IL_0033:  br.s       IL_003e
    IL_0035:  ldc.i4.s   9
    IL_0037:  stloc.2
    IL_0038:  call       "Function Program.M5() As Boolean"
    IL_003d:  pop
    IL_003e:  ldc.i4.s   10
    IL_0040:  stloc.2
    IL_0041:  call       "Function Program.M6() As Boolean"
    IL_0046:  pop
    IL_0047:  leave.s    IL_00c2
    IL_0049:  ldloc.1
    IL_004a:  ldc.i4.1
    IL_004b:  add
    IL_004c:  ldc.i4.0
    IL_004d:  stloc.1
    IL_004e:  switch    (
        IL_0083,
        IL_0000,
        IL_0007,
        IL_000f,
        IL_0018,
        IL_003e,
        IL_0022,
        IL_002b,
        IL_003e,
        IL_0035,
        IL_003e,
        IL_0047)
    IL_0083:  leave.s    IL_00b7
    IL_0085:  ldloc.2
    IL_0086:  stloc.1
    IL_0087:  ldloc.0
    IL_0088:  switch    (
        IL_0095,
        IL_0049)
    IL_0095:  leave.s    IL_00b7
  }
  filter
  {
    IL_0097:  isinst     "System.Exception"
    IL_009c:  ldnull
    IL_009d:  cgt.un
    IL_009f:  ldloc.0
    IL_00a0:  ldc.i4.0
    IL_00a1:  cgt.un
    IL_00a3:  and
    IL_00a4:  ldloc.1
    IL_00a5:  ldc.i4.0
    IL_00a6:  ceq
    IL_00a8:  and
    IL_00a9:  endfilter
  }  // end filter
  {  // handler
    IL_00ab:  castclass  "System.Exception"
    IL_00b0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b5:  leave.s    IL_0085
  }
  IL_00b7:  ldc.i4     0x800a0033
  IL_00bc:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c1:  throw
  IL_00c2:  ldloc.1
  IL_00c3:  brfalse.s  IL_00ca
  IL_00c5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ca:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Test1",
            <![CDATA[
{
  // Code size      173 (0xad)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Function Program.M0() As Boolean"
    IL_0012:  pop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.M1() As Boolean"
    IL_001a:  stloc.3
    IL_001b:  ldloc.3
    IL_001c:  brfalse.s  IL_0027
    IL_001e:  ldc.i4.4
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  pop
    IL_0026:  nop
    IL_0027:  nop
    IL_0028:  ldc.i4.6
    IL_0029:  stloc.2
    IL_002a:  call       "Function Program.M3() As Boolean"
    IL_002f:  pop
    IL_0030:  leave.s    IL_00a3
    IL_0032:  ldloc.1
    IL_0033:  ldc.i4.1
    IL_0034:  add
    IL_0035:  ldc.i4.0
    IL_0036:  stloc.1
    IL_0037:  switch    (
        IL_005c,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_001e,
        IL_0026,
        IL_0028,
        IL_0030)
    IL_005c:  leave.s    IL_0098
    IL_005e:  ldloc.2
    IL_005f:  stloc.1
    IL_0060:  ldloc.0
    IL_0061:  ldc.i4.s   -2
    IL_0063:  bgt.s      IL_0068
    IL_0065:  ldc.i4.1
    IL_0066:  br.s       IL_0069
    IL_0068:  ldloc.0
    IL_0069:  switch    (
        IL_0076,
        IL_0032)
    IL_0076:  leave.s    IL_0098
  }
  filter
  {
    IL_0078:  isinst     "System.Exception"
    IL_007d:  ldnull
    IL_007e:  cgt.un
    IL_0080:  ldloc.0
    IL_0081:  ldc.i4.0
    IL_0082:  cgt.un
    IL_0084:  and
    IL_0085:  ldloc.1
    IL_0086:  ldc.i4.0
    IL_0087:  ceq
    IL_0089:  and
    IL_008a:  endfilter
  }  // end filter
  {  // handler
    IL_008c:  castclass  "System.Exception"
    IL_0091:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0096:  leave.s    IL_005e
  }
  IL_0098:  ldc.i4     0x800a0033
  IL_009d:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a2:  throw
  IL_00a3:  ldloc.1
  IL_00a4:  brfalse.s  IL_00ac
  IL_00a6:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ab:  nop
  IL_00ac:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test2",
            <![CDATA[
{
  // Code size      167 (0xa7)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Function Program.M0() As Boolean"
    IL_0012:  pop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.M1() As Boolean"
    IL_001a:  stloc.3
    IL_001b:  ldloc.3
    IL_001c:  brfalse.s  IL_0026
    IL_001e:  ldc.i4.4
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  pop
    IL_0026:  ldc.i4.5
    IL_0027:  stloc.2
    IL_0028:  call       "Function Program.M3() As Boolean"
    IL_002d:  pop
    IL_002e:  leave.s    IL_009d
    IL_0030:  ldloc.1
    IL_0031:  ldc.i4.1
    IL_0032:  add
    IL_0033:  ldc.i4.0
    IL_0034:  stloc.1
    IL_0035:  switch    (
        IL_0056,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_001e,
        IL_0026,
        IL_002e)
    IL_0056:  leave.s    IL_0092
    IL_0058:  ldloc.2
    IL_0059:  stloc.1
    IL_005a:  ldloc.0
    IL_005b:  ldc.i4.s   -2
    IL_005d:  bgt.s      IL_0062
    IL_005f:  ldc.i4.1
    IL_0060:  br.s       IL_0063
    IL_0062:  ldloc.0
    IL_0063:  switch    (
        IL_0070,
        IL_0030)
    IL_0070:  leave.s    IL_0092
  }
  filter
  {
    IL_0072:  isinst     "System.Exception"
    IL_0077:  ldnull
    IL_0078:  cgt.un
    IL_007a:  ldloc.0
    IL_007b:  ldc.i4.0
    IL_007c:  cgt.un
    IL_007e:  and
    IL_007f:  ldloc.1
    IL_0080:  ldc.i4.0
    IL_0081:  ceq
    IL_0083:  and
    IL_0084:  endfilter
  }  // end filter
  {  // handler
    IL_0086:  castclass  "System.Exception"
    IL_008b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0090:  leave.s    IL_0058
  }
  IL_0092:  ldc.i4     0x800a0033
  IL_0097:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_009c:  throw
  IL_009d:  ldloc.1
  IL_009e:  brfalse.s  IL_00a6
  IL_00a0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a5:  nop
  IL_00a6:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test3",
            <![CDATA[
{
  // Code size      192 (0xc0)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Function Program.M0() As Boolean"
    IL_0012:  pop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.M1() As Boolean"
    IL_001a:  stloc.3
    IL_001b:  ldloc.3
    IL_001c:  brfalse.s  IL_0029
    IL_001e:  ldc.i4.4
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  pop
    IL_0026:  nop
    IL_0027:  br.s       IL_0033
    IL_0029:  nop
    IL_002a:  ldc.i4.6
    IL_002b:  stloc.2
    IL_002c:  call       "Function Program.M3() As Boolean"
    IL_0031:  pop
    IL_0032:  nop
    IL_0033:  ldc.i4.8
    IL_0034:  stloc.2
    IL_0035:  call       "Function Program.M4() As Boolean"
    IL_003a:  pop
    IL_003b:  leave.s    IL_00b6
    IL_003d:  ldloc.1
    IL_003e:  ldc.i4.1
    IL_003f:  add
    IL_0040:  ldc.i4.0
    IL_0041:  stloc.1
    IL_0042:  switch    (
        IL_006f,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_001e,
        IL_0026,
        IL_002a,
        IL_0032,
        IL_0033,
        IL_003b)
    IL_006f:  leave.s    IL_00ab
    IL_0071:  ldloc.2
    IL_0072:  stloc.1
    IL_0073:  ldloc.0
    IL_0074:  ldc.i4.s   -2
    IL_0076:  bgt.s      IL_007b
    IL_0078:  ldc.i4.1
    IL_0079:  br.s       IL_007c
    IL_007b:  ldloc.0
    IL_007c:  switch    (
        IL_0089,
        IL_003d)
    IL_0089:  leave.s    IL_00ab
  }
  filter
  {
    IL_008b:  isinst     "System.Exception"
    IL_0090:  ldnull
    IL_0091:  cgt.un
    IL_0093:  ldloc.0
    IL_0094:  ldc.i4.0
    IL_0095:  cgt.un
    IL_0097:  and
    IL_0098:  ldloc.1
    IL_0099:  ldc.i4.0
    IL_009a:  ceq
    IL_009c:  and
    IL_009d:  endfilter
  }  // end filter
  {  // handler
    IL_009f:  castclass  "System.Exception"
    IL_00a4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00a9:  leave.s    IL_0071
  }
  IL_00ab:  ldc.i4     0x800a0033
  IL_00b0:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b5:  throw
  IL_00b6:  ldloc.1
  IL_00b7:  brfalse.s  IL_00bf
  IL_00b9:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00be:  nop
  IL_00bf:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test4",
            <![CDATA[
{
  // Code size      186 (0xba)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Function Program.M0() As Boolean"
    IL_0012:  pop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.M1() As Boolean"
    IL_001a:  stloc.3
    IL_001b:  ldloc.3
    IL_001c:  brfalse.s  IL_0028
    IL_001e:  ldc.i4.4
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  pop
    IL_0026:  br.s       IL_0031
    IL_0028:  nop
    IL_0029:  ldc.i4.6
    IL_002a:  stloc.2
    IL_002b:  call       "Function Program.M3() As Boolean"
    IL_0030:  pop
    IL_0031:  ldc.i4.7
    IL_0032:  stloc.2
    IL_0033:  call       "Function Program.M4() As Boolean"
    IL_0038:  pop
    IL_0039:  leave.s    IL_00b0
    IL_003b:  ldloc.1
    IL_003c:  ldc.i4.1
    IL_003d:  add
    IL_003e:  ldc.i4.0
    IL_003f:  stloc.1
    IL_0040:  switch    (
        IL_0069,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_001e,
        IL_0026,
        IL_0029,
        IL_0031,
        IL_0039)
    IL_0069:  leave.s    IL_00a5
    IL_006b:  ldloc.2
    IL_006c:  stloc.1
    IL_006d:  ldloc.0
    IL_006e:  ldc.i4.s   -2
    IL_0070:  bgt.s      IL_0075
    IL_0072:  ldc.i4.1
    IL_0073:  br.s       IL_0076
    IL_0075:  ldloc.0
    IL_0076:  switch    (
        IL_0083,
        IL_003b)
    IL_0083:  leave.s    IL_00a5
  }
  filter
  {
    IL_0085:  isinst     "System.Exception"
    IL_008a:  ldnull
    IL_008b:  cgt.un
    IL_008d:  ldloc.0
    IL_008e:  ldc.i4.0
    IL_008f:  cgt.un
    IL_0091:  and
    IL_0092:  ldloc.1
    IL_0093:  ldc.i4.0
    IL_0094:  ceq
    IL_0096:  and
    IL_0097:  endfilter
  }  // end filter
  {  // handler
    IL_0099:  castclass  "System.Exception"
    IL_009e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00a3:  leave.s    IL_006b
  }
  IL_00a5:  ldc.i4     0x800a0033
  IL_00aa:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00af:  throw
  IL_00b0:  ldloc.1
  IL_00b1:  brfalse.s  IL_00b9
  IL_00b3:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b8:  nop
  IL_00b9:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test5",
            <![CDATA[
{
  // Code size      209 (0xd1)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Function Program.M0() As Boolean"
    IL_0012:  pop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.M1() As Boolean"
    IL_001a:  stloc.3
    IL_001b:  ldloc.3
    IL_001c:  brfalse.s  IL_0029
    IL_001e:  ldc.i4.4
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  pop
    IL_0026:  nop
    IL_0027:  br.s       IL_003f
    IL_0029:  ldc.i4.6
    IL_002a:  stloc.2
    IL_002b:  call       "Function Program.M3() As Boolean"
    IL_0030:  stloc.s    V_4
    IL_0032:  ldloc.s    V_4
    IL_0034:  brfalse.s  IL_003f
    IL_0036:  ldc.i4.7
    IL_0037:  stloc.2
    IL_0038:  call       "Function Program.M4() As Boolean"
    IL_003d:  pop
    IL_003e:  nop
    IL_003f:  ldc.i4.s   9
    IL_0041:  stloc.2
    IL_0042:  call       "Function Program.M5() As Boolean"
    IL_0047:  pop
    IL_0048:  leave.s    IL_00c7
    IL_004a:  ldloc.1
    IL_004b:  ldc.i4.1
    IL_004c:  add
    IL_004d:  ldc.i4.0
    IL_004e:  stloc.1
    IL_004f:  switch    (
        IL_0080,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_001e,
        IL_0026,
        IL_0029,
        IL_0036,
        IL_003e,
        IL_003f,
        IL_0048)
    IL_0080:  leave.s    IL_00bc
    IL_0082:  ldloc.2
    IL_0083:  stloc.1
    IL_0084:  ldloc.0
    IL_0085:  ldc.i4.s   -2
    IL_0087:  bgt.s      IL_008c
    IL_0089:  ldc.i4.1
    IL_008a:  br.s       IL_008d
    IL_008c:  ldloc.0
    IL_008d:  switch    (
        IL_009a,
        IL_004a)
    IL_009a:  leave.s    IL_00bc
  }
  filter
  {
    IL_009c:  isinst     "System.Exception"
    IL_00a1:  ldnull
    IL_00a2:  cgt.un
    IL_00a4:  ldloc.0
    IL_00a5:  ldc.i4.0
    IL_00a6:  cgt.un
    IL_00a8:  and
    IL_00a9:  ldloc.1
    IL_00aa:  ldc.i4.0
    IL_00ab:  ceq
    IL_00ad:  and
    IL_00ae:  endfilter
  }  // end filter
  {  // handler
    IL_00b0:  castclass  "System.Exception"
    IL_00b5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ba:  leave.s    IL_0082
  }
  IL_00bc:  ldc.i4     0x800a0033
  IL_00c1:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c6:  throw
  IL_00c7:  ldloc.1
  IL_00c8:  brfalse.s  IL_00d0
  IL_00ca:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00cf:  nop
  IL_00d0:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Program.Test6",
            <![CDATA[
{
  // Code size      233 (0xe9)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Function Program.M0() As Boolean"
    IL_0012:  pop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.M1() As Boolean"
    IL_001a:  stloc.3
    IL_001b:  ldloc.3
    IL_001c:  brfalse.s  IL_0029
    IL_001e:  ldc.i4.4
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  pop
    IL_0026:  nop
    IL_0027:  br.s       IL_004c
    IL_0029:  ldc.i4.6
    IL_002a:  stloc.2
    IL_002b:  call       "Function Program.M3() As Boolean"
    IL_0030:  stloc.s    V_4
    IL_0032:  ldloc.s    V_4
    IL_0034:  brfalse.s  IL_0041
    IL_0036:  ldc.i4.7
    IL_0037:  stloc.2
    IL_0038:  call       "Function Program.M4() As Boolean"
    IL_003d:  pop
    IL_003e:  nop
    IL_003f:  br.s       IL_004c
    IL_0041:  nop
    IL_0042:  ldc.i4.s   9
    IL_0044:  stloc.2
    IL_0045:  call       "Function Program.M5() As Boolean"
    IL_004a:  pop
    IL_004b:  nop
    IL_004c:  ldc.i4.s   11
    IL_004e:  stloc.2
    IL_004f:  call       "Function Program.M6() As Boolean"
    IL_0054:  pop
    IL_0055:  leave      IL_00df
    IL_005a:  ldloc.1
    IL_005b:  ldc.i4.1
    IL_005c:  add
    IL_005d:  ldc.i4.0
    IL_005e:  stloc.1
    IL_005f:  switch    (
        IL_0098,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_001e,
        IL_0026,
        IL_0029,
        IL_0036,
        IL_003e,
        IL_0042,
        IL_004b,
        IL_004c,
        IL_0055)
    IL_0098:  leave.s    IL_00d4
    IL_009a:  ldloc.2
    IL_009b:  stloc.1
    IL_009c:  ldloc.0
    IL_009d:  ldc.i4.s   -2
    IL_009f:  bgt.s      IL_00a4
    IL_00a1:  ldc.i4.1
    IL_00a2:  br.s       IL_00a5
    IL_00a4:  ldloc.0
    IL_00a5:  switch    (
        IL_00b2,
        IL_005a)
    IL_00b2:  leave.s    IL_00d4
  }
  filter
  {
    IL_00b4:  isinst     "System.Exception"
    IL_00b9:  ldnull
    IL_00ba:  cgt.un
    IL_00bc:  ldloc.0
    IL_00bd:  ldc.i4.0
    IL_00be:  cgt.un
    IL_00c0:  and
    IL_00c1:  ldloc.1
    IL_00c2:  ldc.i4.0
    IL_00c3:  ceq
    IL_00c5:  and
    IL_00c6:  endfilter
  }  // end filter
  {  // handler
    IL_00c8:  castclass  "System.Exception"
    IL_00cd:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d2:  leave.s    IL_009a
  }
  IL_00d4:  ldc.i4     0x800a0033
  IL_00d9:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00de:  throw
  IL_00df:  ldloc.1
  IL_00e0:  brfalse.s  IL_00e8
  IL_00e2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00e7:  nop
  IL_00e8:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Select_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()

    Sub Main()
        Dim states = {({-1, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0}),
                      ({0, -1, 0, 0, 0, 0}),
                      ({1, 0, 0, 0, 0, 0}),
                      ({1, 0, -1, 0, 0, 0}),
                      ({2, 0, 0, 0, 0, 0}),
                      ({2, 0, 0, -1, 0, 0}),
                      ({3, 0, 0, 0, 0, 0}),
                      ({3, 0, 0, 0, -1, 0}),
                      ({4, 0, 0, 0, 0, 0}),
                      ({-2, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        Select Case M(0)
            Case 0
                M(1)
            Case 1
                M(2)
            Case 2
                M(3)
            Case 3
                M(4)
        End Select
        M(5)
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        System.Console.WriteLine("M{0} - {1}", num, state(num))
        If state(num) = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return state(num)
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
Test - 0
M0 - -1
OnError
M5 - 0
Test - 1
M0 - 0
M1 - 0
M5 - 0
Test - 2
M0 - 0
M1 - -1
OnError
M5 - 0
Test - 3
M0 - 1
M2 - 0
M5 - 0
Test - 4
M0 - 1
M2 - -1
OnError
M5 - 0
Test - 5
M0 - 2
M3 - 0
M5 - 0
Test - 6
M0 - 2
M3 - -1
OnError
M5 - 0
Test - 7
M0 - 3
M4 - 0
M5 - 0
Test - 8
M0 - 3
M4 - -1
OnError
M5 - 0
Test - 9
M0 - 4
M5 - 0
Test - 10
M0 - -2
M5 - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_Select_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Select Case M1()
            Case 0
                M2()
            Case 1
                M3()
            Case 2
                M4()
            Case 3
                M5()
        End Select
        M6()
    End Sub

    Sub M0()
    End Sub

    Function M1() As Integer
        Return 1
    End Function

    Sub M2()
    End Sub

    Sub M3()
    End Sub

    Sub M4()
    End Sub

    Sub M5()
    End Sub

    Sub M6()
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      237 (0xed)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.3
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.M1() As Integer"
    IL_0015:  stloc.3
    IL_0016:  ldloc.3
    IL_0017:  switch    (
    IL_002e,
    IL_0037,
    IL_0040,
    IL_004a)
    IL_002c:  br.s       IL_0052
    IL_002e:  ldc.i4.5
    IL_002f:  stloc.2
    IL_0030:  call       "Sub Program.M2()"
    IL_0035:  br.s       IL_0052
    IL_0037:  ldc.i4.7
    IL_0038:  stloc.2
    IL_0039:  call       "Sub Program.M3()"
    IL_003e:  br.s       IL_0052
    IL_0040:  ldc.i4.s   9
    IL_0042:  stloc.2
    IL_0043:  call       "Sub Program.M4()"
    IL_0048:  br.s       IL_0052
    IL_004a:  ldc.i4.s   11
    IL_004c:  stloc.2
    IL_004d:  call       "Sub Program.M5()"
    IL_0052:  ldc.i4.s   13
    IL_0054:  stloc.2
    IL_0055:  call       "Sub Program.M6()"
    IL_005a:  leave      IL_00e4
    IL_005f:  ldloc.1
    IL_0060:  ldc.i4.1
    IL_0061:  add
    IL_0062:  ldc.i4.0
    IL_0063:  stloc.1
    IL_0064:  switch    (
        IL_00a5,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_0052,
        IL_002e,
        IL_0052,
        IL_0037,
        IL_0052,
        IL_0040,
        IL_0052,
        IL_004a,
        IL_0052,
        IL_0052,
        IL_005a)
    IL_00a5:  leave.s    IL_00d9
    IL_00a7:  ldloc.2
    IL_00a8:  stloc.1
    IL_00a9:  ldloc.0
    IL_00aa:  switch    (
        IL_00b7,
        IL_005f)
    IL_00b7:  leave.s    IL_00d9
  }
  filter
  {
    IL_00b9:  isinst     "System.Exception"
    IL_00be:  ldnull
    IL_00bf:  cgt.un
    IL_00c1:  ldloc.0
    IL_00c2:  ldc.i4.0
    IL_00c3:  cgt.un
    IL_00c5:  and
    IL_00c6:  ldloc.1
    IL_00c7:  ldc.i4.0
    IL_00c8:  ceq
    IL_00ca:  and
    IL_00cb:  endfilter
  }  // end filter
  {  // handler
    IL_00cd:  castclass  "System.Exception"
    IL_00d2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d7:  leave.s    IL_00a7
  }
  IL_00d9:  ldc.i4     0x800a0033
  IL_00de:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00e3:  throw
  IL_00e4:  ldloc.1
  IL_00e5:  brfalse.s  IL_00ec
  IL_00e7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ec:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      264 (0x108)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  nop
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.M1() As Integer"
    IL_001b:  stloc.3
    IL_001c:  ldloc.3
    IL_001d:  switch    (
        IL_0034,
        IL_003f,
        IL_004a,
        IL_0056)
    IL_0032:  br.s       IL_0062
    IL_0034:  nop
    IL_0035:  ldc.i4.5
    IL_0036:  stloc.2
    IL_0037:  call       "Sub Program.M2()"
    IL_003c:  nop
    IL_003d:  br.s       IL_0062
    IL_003f:  nop
    IL_0040:  ldc.i4.7
    IL_0041:  stloc.2
    IL_0042:  call       "Sub Program.M3()"
    IL_0047:  nop
    IL_0048:  br.s       IL_0062
    IL_004a:  nop
    IL_004b:  ldc.i4.s   9
    IL_004d:  stloc.2
    IL_004e:  call       "Sub Program.M4()"
    IL_0053:  nop
    IL_0054:  br.s       IL_0062
    IL_0056:  nop
    IL_0057:  ldc.i4.s   11
    IL_0059:  stloc.2
    IL_005a:  call       "Sub Program.M5()"
    IL_005f:  nop
    IL_0060:  br.s       IL_0062
    IL_0062:  nop
    IL_0063:  ldc.i4.s   13
    IL_0065:  stloc.2
    IL_0066:  call       "Sub Program.M6()"
    IL_006b:  nop
    IL_006c:  leave      IL_00fe
    IL_0071:  ldloc.1
    IL_0072:  ldc.i4.1
    IL_0073:  add
    IL_0074:  ldc.i4.0
    IL_0075:  stloc.1
    IL_0076:  switch    (
        IL_00b7,
        IL_0002,
        IL_000b,
        IL_0014,
        IL_0062,
        IL_0035,
        IL_003d,
        IL_0040,
        IL_0048,
        IL_004b,
        IL_0054,
        IL_0057,
        IL_0060,
        IL_0063,
        IL_006c)
    IL_00b7:  leave.s    IL_00f3
    IL_00b9:  ldloc.2
    IL_00ba:  stloc.1
    IL_00bb:  ldloc.0
    IL_00bc:  ldc.i4.s   -2
    IL_00be:  bgt.s      IL_00c3
    IL_00c0:  ldc.i4.1
    IL_00c1:  br.s       IL_00c4
    IL_00c3:  ldloc.0
    IL_00c4:  switch    (
        IL_00d1,
        IL_0071)
    IL_00d1:  leave.s    IL_00f3
  }
  filter
  {
    IL_00d3:  isinst     "System.Exception"
    IL_00d8:  ldnull
    IL_00d9:  cgt.un
    IL_00db:  ldloc.0
    IL_00dc:  ldc.i4.0
    IL_00dd:  cgt.un
    IL_00df:  and
    IL_00e0:  ldloc.1
    IL_00e1:  ldc.i4.0
    IL_00e2:  ceq
    IL_00e4:  and
    IL_00e5:  endfilter
  }  // end filter
  {  // handler
    IL_00e7:  castclass  "System.Exception"
    IL_00ec:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00f1:  leave.s    IL_00b9
  }
  IL_00f3:  ldc.i4     0x800a0033
  IL_00f8:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00fd:  throw
  IL_00fe:  ldloc.1
  IL_00ff:  brfalse.s  IL_0107
  IL_0101:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0106:  nop
  IL_0107:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Select_2()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()

    Sub Main()
        Dim states = {({-1, 0, 0, 0}),
                      ({0, 0, 0, 0}),
                      ({0, -1, 0, 0}),
                      ({1, 0, 0, 0}),
                      ({1, 0, -1, 0}),
                      ({2, 0, 0, 0}),
                      ({-2, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        Select Case M(0)
            Case 0
                M(1)
            Case 1
                M(2)
        End Select
        M(3)
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        System.Console.WriteLine("M{0} - {1}", num, state(num))
        If state(num) = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return state(num)
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
Test - 0
M0 - -1
OnError
M3 - 0
Test - 1
M0 - 0
M1 - 0
M3 - 0
Test - 2
M0 - 0
M1 - -1
OnError
M3 - 0
Test - 3
M0 - 1
M2 - 0
M3 - 0
Test - 4
M0 - 1
M2 - -1
OnError
M3 - 0
Test - 5
M0 - 2
M3 - 0
Test - 6
M0 - -2
M3 - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Select_3()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Select Case M1()
            Case 0
                M2()
            Case 1
                M3()
        End Select
        M4()
    End Sub

    Sub M0()
    End Sub

    Function M1() As Integer
        Return 1
    End Function

    Sub M2()
    End Sub

    Sub M3()
    End Sub

    Sub M4()
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      183 (0xb7)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.1
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.2
  IL_0009:  call       "Sub Program.M0()"
  IL_000e:  ldc.i4.3
  IL_000f:  stloc.2
  IL_0010:  call       "Function Program.M1() As Integer"
  IL_0015:  stloc.3
  IL_0016:  ldloc.3
  IL_0017:  brfalse.s  IL_001f
  IL_0019:  ldloc.3
  IL_001a:  ldc.i4.1
  IL_001b:  beq.s      IL_0028
  IL_001d:  br.s       IL_002f
  IL_001f:  ldc.i4.5
  IL_0020:  stloc.2
  IL_0021:  call       "Sub Program.M2()"
  IL_0026:  br.s       IL_002f
  IL_0028:  ldc.i4.7
  IL_0029:  stloc.2
  IL_002a:  call       "Sub Program.M3()"
  IL_002f:  ldc.i4.s   9
  IL_0031:  stloc.2
  IL_0032:  call       "Sub Program.M4()"
  IL_0037:  leave.s    IL_00ae
  IL_0039:  ldloc.1
  IL_003a:  ldc.i4.1
  IL_003b:  add
  IL_003c:  ldc.i4.0
  IL_003d:  stloc.1
  IL_003e:  switch    (
  IL_006f,
  IL_0000,
  IL_0007,
  IL_000e,
  IL_002f,
  IL_001f,
  IL_002f,
  IL_0028,
  IL_002f,
  IL_002f,
  IL_0037)
  IL_006f:  leave.s    IL_00a3
  IL_0071:  ldloc.2
  IL_0072:  stloc.1
  IL_0073:  ldloc.0
  IL_0074:  switch    (
  IL_0081,
  IL_0039)
  IL_0081:  leave.s    IL_00a3
}
  filter
{
  IL_0083:  isinst     "System.Exception"
  IL_0088:  ldnull
  IL_0089:  cgt.un
  IL_008b:  ldloc.0
  IL_008c:  ldc.i4.0
  IL_008d:  cgt.un
  IL_008f:  and
  IL_0090:  ldloc.1
  IL_0091:  ldc.i4.0
  IL_0092:  ceq
  IL_0094:  and
  IL_0095:  endfilter
}  // end filter
{  // handler
  IL_0097:  castclass  "System.Exception"
  IL_009c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00a1:  leave.s    IL_0071
}
  IL_00a3:  ldc.i4     0x800a0033
  IL_00a8:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00ad:  throw
  IL_00ae:  ldloc.1
  IL_00af:  brfalse.s  IL_00b6
  IL_00b1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b6:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      208 (0xd0)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  nop
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.M1() As Integer"
    IL_001b:  stloc.3
    IL_001c:  ldloc.3
    IL_001d:  brfalse.s  IL_0027
    IL_001f:  br.s       IL_0021
    IL_0021:  ldloc.3
    IL_0022:  ldc.i4.1
    IL_0023:  beq.s      IL_0032
    IL_0025:  br.s       IL_003d
    IL_0027:  nop
    IL_0028:  ldc.i4.5
    IL_0029:  stloc.2
    IL_002a:  call       "Sub Program.M2()"
    IL_002f:  nop
    IL_0030:  br.s       IL_003d
    IL_0032:  nop
    IL_0033:  ldc.i4.7
    IL_0034:  stloc.2
    IL_0035:  call       "Sub Program.M3()"
    IL_003a:  nop
    IL_003b:  br.s       IL_003d
    IL_003d:  nop
    IL_003e:  ldc.i4.s   9
    IL_0040:  stloc.2
    IL_0041:  call       "Sub Program.M4()"
    IL_0046:  nop
    IL_0047:  leave.s    IL_00c6
    IL_0049:  ldloc.1
    IL_004a:  ldc.i4.1
    IL_004b:  add
    IL_004c:  ldc.i4.0
    IL_004d:  stloc.1
    IL_004e:  switch    (
        IL_007f,
        IL_0002,
        IL_000b,
        IL_0014,
        IL_003d,
        IL_0028,
        IL_0030,
        IL_0033,
        IL_003b,
        IL_003e,
        IL_0047)
    IL_007f:  leave.s    IL_00bb
    IL_0081:  ldloc.2
    IL_0082:  stloc.1
    IL_0083:  ldloc.0
    IL_0084:  ldc.i4.s   -2
    IL_0086:  bgt.s      IL_008b
    IL_0088:  ldc.i4.1
    IL_0089:  br.s       IL_008c
    IL_008b:  ldloc.0
    IL_008c:  switch    (
        IL_0099,
        IL_0049)
    IL_0099:  leave.s    IL_00bb
  }
  filter
  {
    IL_009b:  isinst     "System.Exception"
    IL_00a0:  ldnull
    IL_00a1:  cgt.un
    IL_00a3:  ldloc.0
    IL_00a4:  ldc.i4.0
    IL_00a5:  cgt.un
    IL_00a7:  and
    IL_00a8:  ldloc.1
    IL_00a9:  ldc.i4.0
    IL_00aa:  ceq
    IL_00ac:  and
    IL_00ad:  endfilter
  }  // end filter
  {  // handler
    IL_00af:  castclass  "System.Exception"
    IL_00b4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b9:  leave.s    IL_0081
  }
  IL_00bb:  ldc.i4     0x800a0033
  IL_00c0:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c5:  throw
  IL_00c6:  ldloc.1
  IL_00c7:  brfalse.s  IL_00cf
  IL_00c9:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ce:  nop
  IL_00cf:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Select_4()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()

    Sub Main()
        Dim states = {({-1, 0, 0, 0, 0, 0, 0}),
                      ({1, 1, 0, 0, 0, 0, 0}),
                      ({1, 1, -1, 0, 0, 0, 0}),
                      ({1, -1, 0, 0, 0, 0, 0}),
                      ({2, -1, 0, 2, 0, 0, 0}),
                      ({2, 1, 0, 2, 0, 0, 0}),
                      ({2, 1, 0, -1, 0, 0, 0}),
                      ({2, 1, 0, 2, -1, 0, 0}),
                      ({3, 1, 0, 2, 0, 0, 0}),
                      ({3, 1, 0, 2, 0, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        Select Case M(0)
            Case M(1)
                M(2)
            Case M(3)
                M(4)
            Case Else
                M(5)
        End Select
        M(6)
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        System.Console.WriteLine("M{0} - {1}", num, state(num))
        If state(num) = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return state(num)
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
Test - 0
M0 - -1
OnError
M6 - 0
Test - 1
M0 - 1
M1 - 1
M2 - 0
M6 - 0
Test - 2
M0 - 1
M1 - 1
M2 - -1
OnError
M6 - 0
Test - 3
M0 - 1
M1 - -1
OnError
M2 - 0
M6 - 0
Test - 4
M0 - 2
M1 - -1
OnError
M2 - 0
M6 - 0
Test - 5
M0 - 2
M1 - 1
M3 - 2
M4 - 0
M6 - 0
Test - 6
M0 - 2
M1 - 1
M3 - -1
OnError
M4 - 0
M6 - 0
Test - 7
M0 - 2
M1 - 1
M3 - 2
M4 - -1
OnError
M6 - 0
Test - 8
M0 - 3
M1 - 1
M3 - 2
M5 - 0
M6 - 0
Test - 9
M0 - 3
M1 - 1
M3 - 2
M5 - -1
OnError
M6 - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Select_5()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Select Case M1()
            Case M2()
                M3()
            Case M4()
                M5()
            Case Else
                M6()
        End Select
        M7()
    End Sub

    Sub M0()
    End Sub

    Function M1() As Integer
        Return 1
    End Function

    Function M2() As Integer
        Return 1
    End Function

    Sub M3()
    End Sub

    Function M4() As Integer
        Return 1
    End Function

    Sub M5()
    End Sub

    Sub M6()
    End Sub

    Sub M7()
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      220 (0xdc)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.1
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.2
  IL_0009:  call       "Sub Program.M0()"
  IL_000e:  ldc.i4.3
  IL_000f:  stloc.2
  IL_0010:  call       "Function Program.M1() As Integer"
  IL_0015:  stloc.3
  IL_0016:  ldc.i4.5
  IL_0017:  stloc.2
  IL_0018:  ldloc.3
  IL_0019:  call       "Function Program.M2() As Integer"
  IL_001e:  bne.un.s   IL_0029
  IL_0020:  ldc.i4.6
  IL_0021:  stloc.2
  IL_0022:  call       "Sub Program.M3()"
  IL_0027:  br.s       IL_0045
  IL_0029:  ldc.i4.8
  IL_002a:  stloc.2
  IL_002b:  ldloc.3
  IL_002c:  call       "Function Program.M4() As Integer"
  IL_0031:  bne.un.s   IL_003d
  IL_0033:  ldc.i4.s   9
  IL_0035:  stloc.2
  IL_0036:  call       "Sub Program.M5()"
  IL_003b:  br.s       IL_0045
  IL_003d:  ldc.i4.s   11
  IL_003f:  stloc.2
  IL_0040:  call       "Sub Program.M6()"
  IL_0045:  ldc.i4.s   12
  IL_0047:  stloc.2
  IL_0048:  call       "Sub Program.M7()"
  IL_004d:  leave      IL_00d3
  IL_0052:  ldloc.1
  IL_0053:  ldc.i4.1
  IL_0054:  add
  IL_0055:  ldc.i4.0
  IL_0056:  stloc.1
  IL_0057:  switch    (
  IL_0094,
  IL_0000,
  IL_0007,
  IL_000e,
  IL_0045,
  IL_0016,
  IL_0020,
  IL_0045,
  IL_0029,
  IL_0033,
  IL_0045,
  IL_003d,
  IL_0045,
  IL_004d)
  IL_0094:  leave.s    IL_00c8
  IL_0096:  ldloc.2
  IL_0097:  stloc.1
  IL_0098:  ldloc.0
  IL_0099:  switch    (
  IL_00a6,
  IL_0052)
  IL_00a6:  leave.s    IL_00c8
}
  filter
{
  IL_00a8:  isinst     "System.Exception"
  IL_00ad:  ldnull
  IL_00ae:  cgt.un
  IL_00b0:  ldloc.0
  IL_00b1:  ldc.i4.0
  IL_00b2:  cgt.un
  IL_00b4:  and
  IL_00b5:  ldloc.1
  IL_00b6:  ldc.i4.0
  IL_00b7:  ceq
  IL_00b9:  and
  IL_00ba:  endfilter
}  // end filter
{  // handler
  IL_00bc:  castclass  "System.Exception"
  IL_00c1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00c6:  leave.s    IL_0096
}
  IL_00c8:  ldc.i4     0x800a0033
  IL_00cd:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00d2:  throw
  IL_00d3:  ldloc.1
  IL_00d4:  brfalse.s  IL_00db
  IL_00d6:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00db:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      252 (0xfc)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  nop
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.M1() As Integer"
    IL_001b:  stloc.3
    IL_001c:  ldc.i4.5
    IL_001d:  stloc.2
    IL_001e:  ldloc.3
    IL_001f:  call       "Function Program.M2() As Integer"
    IL_0024:  ceq
    IL_0026:  stloc.s    V_4
    IL_0028:  ldloc.s    V_4
    IL_002a:  brfalse.s  IL_0036
    IL_002c:  ldc.i4.6
    IL_002d:  stloc.2
    IL_002e:  call       "Sub Program.M3()"
    IL_0033:  nop
    IL_0034:  br.s       IL_005a
    IL_0036:  ldc.i4.8
    IL_0037:  stloc.2
    IL_0038:  ldloc.3
    IL_0039:  call       "Function Program.M4() As Integer"
    IL_003e:  ceq
    IL_0040:  stloc.s    V_4
    IL_0042:  ldloc.s    V_4
    IL_0044:  brfalse.s  IL_0051
    IL_0046:  ldc.i4.s   9
    IL_0048:  stloc.2
    IL_0049:  call       "Sub Program.M5()"
    IL_004e:  nop
    IL_004f:  br.s       IL_005a
    IL_0051:  ldc.i4.s   11
    IL_0053:  stloc.2
    IL_0054:  call       "Sub Program.M6()"
    IL_0059:  nop
    IL_005a:  nop
    IL_005b:  ldc.i4.s   12
    IL_005d:  stloc.2
    IL_005e:  call       "Sub Program.M7()"
    IL_0063:  nop
    IL_0064:  leave      IL_00f2
    IL_0069:  ldloc.1
    IL_006a:  ldc.i4.1
    IL_006b:  add
    IL_006c:  ldc.i4.0
    IL_006d:  stloc.1
    IL_006e:  switch    (
        IL_00ab,
        IL_0002,
        IL_000b,
        IL_0014,
        IL_005a,
        IL_001c,
        IL_002c,
        IL_0034,
        IL_0036,
        IL_0046,
        IL_004f,
        IL_0051,
        IL_005b,
        IL_0064)
    IL_00ab:  leave.s    IL_00e7
    IL_00ad:  ldloc.2
    IL_00ae:  stloc.1
    IL_00af:  ldloc.0
    IL_00b0:  ldc.i4.s   -2
    IL_00b2:  bgt.s      IL_00b7
    IL_00b4:  ldc.i4.1
    IL_00b5:  br.s       IL_00b8
    IL_00b7:  ldloc.0
    IL_00b8:  switch    (
        IL_00c5,
        IL_0069)
    IL_00c5:  leave.s    IL_00e7
  }
  filter
  {
    IL_00c7:  isinst     "System.Exception"
    IL_00cc:  ldnull
    IL_00cd:  cgt.un
    IL_00cf:  ldloc.0
    IL_00d0:  ldc.i4.0
    IL_00d1:  cgt.un
    IL_00d3:  and
    IL_00d4:  ldloc.1
    IL_00d5:  ldc.i4.0
    IL_00d6:  ceq
    IL_00d8:  and
    IL_00d9:  endfilter
  }  // end filter
  {  // handler
    IL_00db:  castclass  "System.Exception"
    IL_00e0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00e5:  leave.s    IL_00ad
  }
  IL_00e7:  ldc.i4     0x800a0033
  IL_00ec:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00f1:  throw
  IL_00f2:  ldloc.1
  IL_00f3:  brfalse.s  IL_00fb
  IL_00f5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00fa:  nop
  IL_00fb:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Select_6()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()

    Sub Main()
        Dim states = {({-1, -1, 0}),
                      ({0, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        M(0)
        Select Case M(1)
        End Select
        M(2)
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        System.Console.WriteLine("M{0} - {1}", num, state(num))
        If state(num) = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return state(num)
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
Test - 0
M0 - -1
OnError
M1 - -1
OnError
M2 - 0
Test - 1
M0 - 0
M1 - -1
OnError
M2 - 0]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_While_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, 0, 0, 0}),
                      ({1, 0, 0, 0}),
                      ({1, -1, 0, 0}),
                      ({1, -1, -1, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            current = 0
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        While M(0) <> 0
            M(1)
        End While
        M(2)
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M{0} - {1}", num, val)
        If val = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return val
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      231 (0xe7)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  br.s       IL_0016
    IL_000c:  ldc.i4.4
    IL_000d:  stloc.2
    IL_000e:  ldc.i4.1
    IL_000f:  call       "Function Program.M(Integer) As Integer"
    IL_0014:  pop
    IL_0015:  nop
    IL_0016:  ldc.i4.3
    IL_0017:  stloc.2
    IL_0018:  ldc.i4.0
    IL_0019:  call       "Function Program.M(Integer) As Integer"
    IL_001e:  ldc.i4.0
    IL_001f:  cgt.un
    IL_0021:  stloc.3
    IL_0022:  ldloc.3
    IL_0023:  brtrue.s   IL_000c
    IL_0025:  ldc.i4.6
    IL_0026:  stloc.2
    IL_0027:  ldc.i4.2
    IL_0028:  call       "Function Program.M(Integer) As Integer"
    IL_002d:  pop
    IL_002e:  br.s       IL_0057
    IL_0030:  nop
    IL_0031:  ldc.i4.8
    IL_0032:  stloc.2
    IL_0033:  ldstr      "OnError"
    IL_0038:  call       "Sub System.Console.WriteLine(String)"
    IL_003d:  nop
    IL_003e:  ldc.i4.s   9
    IL_0040:  stloc.2
    IL_0041:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0046:  nop
    IL_0047:  ldloc.1
    IL_0048:  brtrue.s   IL_0055
    IL_004a:  ldc.i4     0x800a0014
    IL_004f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0054:  throw
    IL_0055:  br.s       IL_005c
    IL_0057:  leave      IL_00dd
    IL_005c:  ldloc.1
    IL_005d:  ldc.i4.1
    IL_005e:  add
    IL_005f:  ldc.i4.0
    IL_0060:  stloc.1
    IL_0061:  switch    (
        IL_0092,
        IL_0002,
        IL_000a,
        IL_0016,
        IL_000c,
        IL_0015,
        IL_0025,
        IL_002e,
        IL_0031,
        IL_003e,
        IL_0057)
    IL_0092:  leave.s    IL_00d2
    IL_0094:  ldloc.2
    IL_0095:  stloc.1
    IL_0096:  ldloc.0
    IL_0097:  ldc.i4.s   -2
    IL_0099:  bgt.s      IL_009e
    IL_009b:  ldc.i4.1
    IL_009c:  br.s       IL_009f
    IL_009e:  ldloc.0
    IL_009f:  switch    (
        IL_00b0,
        IL_005c,
        IL_0030)
    IL_00b0:  leave.s    IL_00d2
  }
  filter
  {
    IL_00b2:  isinst     "System.Exception"
    IL_00b7:  ldnull
    IL_00b8:  cgt.un
    IL_00ba:  ldloc.0
    IL_00bb:  ldc.i4.0
    IL_00bc:  cgt.un
    IL_00be:  and
    IL_00bf:  ldloc.1
    IL_00c0:  ldc.i4.0
    IL_00c1:  ceq
    IL_00c3:  and
    IL_00c4:  endfilter
  }  // end filter
  {  // handler
    IL_00c6:  castclass  "System.Exception"
    IL_00cb:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d0:  leave.s    IL_0094
  }
  IL_00d2:  ldc.i4     0x800a0033
  IL_00d7:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00dc:  throw
  IL_00dd:  ldloc.1
  IL_00de:  brfalse.s  IL_00e6
  IL_00e0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00e5:  nop
  IL_00e6:  ret
}]]>)
 
            ' Changed from verifying output to checking IL - Bug 717949
            ' Leaving in expected output for  information purpose
 
            '            Dim expected =
            '            <![CDATA[
            'Test - 0
            'M0 - -1
            'OnError
            'M1 - 0
            'M0 - 0
            'M2 - 0
            'Test - 1
            'M0 - 1
            'M1 - 0
            'M0 - 0
            'M2 - 0
            'Test - 2
            'M0 - 1
            'M1 - -1
            'OnError
            'M0 - 0
            'M2 - 0
            'Test - 3
            'M0 - 1
            'M1 - -1
            'OnError
            'M0 - -1
            'OnError
            'M1 - 0
            'M0 - 0
            'M2 - 0
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[
{
  // Code size      205 (0xcd)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  br.s       IL_0012
    IL_0009:  ldc.i4.4
    IL_000a:  stloc.2
    IL_000b:  ldc.i4.1
    IL_000c:  call       "Function Program.M(Integer) As Integer"
    IL_0011:  pop
    IL_0012:  ldc.i4.3
    IL_0013:  stloc.2
    IL_0014:  ldc.i4.0
    IL_0015:  call       "Function Program.M(Integer) As Integer"
    IL_001a:  brtrue.s   IL_0009
    IL_001c:  ldc.i4.6
    IL_001d:  stloc.2
    IL_001e:  ldc.i4.2
    IL_001f:  call       "Function Program.M(Integer) As Integer"
    IL_0024:  pop
    IL_0025:  br.s       IL_0049
    IL_0027:  ldc.i4.8
    IL_0028:  stloc.2
    IL_0029:  ldstr      "OnError"
    IL_002e:  call       "Sub System.Console.WriteLine(String)"
    IL_0033:  ldc.i4.s   9
    IL_0035:  stloc.2
    IL_0036:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_003b:  ldloc.1
    IL_003c:  brtrue.s   IL_004b
    IL_003e:  ldc.i4     0x800a0014
    IL_0043:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0048:  throw
    IL_0049:  leave.s    IL_00c4
    IL_004b:  ldloc.1
    IL_004c:  ldc.i4.1
    IL_004d:  add
    IL_004e:  ldc.i4.0
    IL_004f:  stloc.1
    IL_0050:  switch    (
        IL_0081,
        IL_0000,
        IL_0012,
        IL_0012,
        IL_0009,
        IL_0012,
        IL_001c,
        IL_0049,
        IL_0027,
        IL_0033,
        IL_0049)
    IL_0081:  leave.s    IL_00b9
    IL_0083:  ldloc.2
    IL_0084:  stloc.1
    IL_0085:  ldloc.0
    IL_0086:  switch    (
        IL_0097,
        IL_004b,
        IL_0027)
    IL_0097:  leave.s    IL_00b9
  }
  filter
  {
    IL_0099:  isinst     "System.Exception"
    IL_009e:  ldnull
    IL_009f:  cgt.un
    IL_00a1:  ldloc.0
    IL_00a2:  ldc.i4.0
    IL_00a3:  cgt.un
    IL_00a5:  and
    IL_00a6:  ldloc.1
    IL_00a7:  ldc.i4.0
    IL_00a8:  ceq
    IL_00aa:  and
    IL_00ab:  endfilter
  }  // end filter
  {  // handler
    IL_00ad:  castclass  "System.Exception"
    IL_00b2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b7:  leave.s    IL_0083
  }
  IL_00b9:  ldc.i4     0x800a0033
  IL_00be:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c3:  throw
  IL_00c4:  ldloc.1
  IL_00c5:  brfalse.s  IL_00cc
  IL_00c7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00cc:  ret
}]]>)
 
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_While_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        While M1()
            If M4()
                Continue While
            End If
            M2()
ContinueLabel:
        End While
        M3()
    End Sub

    Sub M0()
    End Sub

    Function M1() As Boolean
        Return False
    End Function

    Sub M2()
    End Sub

    Sub M3()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      177 (0xb1)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  br.s       IL_0020
    IL_0010:  ldc.i4.5
    IL_0011:  stloc.2
    IL_0012:  call       "Function Program.M4() As Boolean"
    IL_0017:  brtrue.s   IL_0020
    IL_0019:  ldc.i4.7
    IL_001a:  stloc.2
    IL_001b:  call       "Sub Program.M2()"
    IL_0020:  ldc.i4.4
    IL_0021:  stloc.2
    IL_0022:  call       "Function Program.M1() As Boolean"
    IL_0027:  brtrue.s   IL_0010
    IL_0029:  ldc.i4.s   9
    IL_002b:  stloc.2
    IL_002c:  call       "Sub Program.M3()"
    IL_0031:  leave.s    IL_00a8
    IL_0033:  ldloc.1
    IL_0034:  ldc.i4.1
    IL_0035:  add
    IL_0036:  ldc.i4.0
    IL_0037:  stloc.1
    IL_0038:  switch    (
        IL_0069,
        IL_0000,
        IL_0007,
        IL_0020,
        IL_0020,
        IL_0010,
        IL_0020,
        IL_0019,
        IL_0020,
        IL_0029,
        IL_0031)
    IL_0069:  leave.s    IL_009d
    IL_006b:  ldloc.2
    IL_006c:  stloc.1
    IL_006d:  ldloc.0
    IL_006e:  switch    (
        IL_007b,
        IL_0033)
    IL_007b:  leave.s    IL_009d
  }
  filter
  {
    IL_007d:  isinst     "System.Exception"
    IL_0082:  ldnull
    IL_0083:  cgt.un
    IL_0085:  ldloc.0
    IL_0086:  ldc.i4.0
    IL_0087:  cgt.un
    IL_0089:  and
    IL_008a:  ldloc.1
    IL_008b:  ldc.i4.0
    IL_008c:  ceq
    IL_008e:  and
    IL_008f:  endfilter
  }  // end filter
  {  // handler
    IL_0091:  castclass  "System.Exception"
    IL_0096:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_009b:  leave.s    IL_006b
  }
  IL_009d:  ldc.i4     0x800a0033
  IL_00a2:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a7:  throw
  IL_00a8:  ldloc.1
  IL_00a9:  brfalse.s  IL_00b0
  IL_00ab:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b0:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      212 (0xd4)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  br.s       IL_002e
    IL_0015:  ldc.i4.5
    IL_0016:  stloc.2
    IL_0017:  call       "Function Program.M4() As Boolean"
    IL_001c:  stloc.3
    IL_001d:  ldloc.3
    IL_001e:  brfalse.s  IL_0023
    IL_0020:  br.s       IL_002e
    IL_0022:  nop
    IL_0023:  nop
    IL_0024:  ldc.i4.8
    IL_0025:  stloc.2
    IL_0026:  call       "Sub Program.M2()"
    IL_002b:  nop
    IL_002c:  nop
    IL_002d:  nop
    IL_002e:  ldc.i4.4
    IL_002f:  stloc.2
    IL_0030:  call       "Function Program.M1() As Boolean"
    IL_0035:  stloc.s    V_4
    IL_0037:  ldloc.s    V_4
    IL_0039:  brtrue.s   IL_0015
    IL_003b:  ldc.i4.s   10
    IL_003d:  stloc.2
    IL_003e:  call       "Sub Program.M3()"
    IL_0043:  nop
    IL_0044:  leave      IL_00ca
    IL_0049:  ldloc.1
    IL_004a:  ldc.i4.1
    IL_004b:  add
    IL_004c:  ldc.i4.0
    IL_004d:  stloc.1
    IL_004e:  switch    (
        IL_0083,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_002e,
        IL_0015,
        IL_0020,
        IL_0022,
        IL_0024,
        IL_002d,
        IL_003b,
        IL_0044)
    IL_0083:  leave.s    IL_00bf
    IL_0085:  ldloc.2
    IL_0086:  stloc.1
    IL_0087:  ldloc.0
    IL_0088:  ldc.i4.s   -2
    IL_008a:  bgt.s      IL_008f
    IL_008c:  ldc.i4.1
    IL_008d:  br.s       IL_0090
    IL_008f:  ldloc.0
    IL_0090:  switch    (
        IL_009d,
        IL_0049)
    IL_009d:  leave.s    IL_00bf
  }
  filter
  {
    IL_009f:  isinst     "System.Exception"
    IL_00a4:  ldnull
    IL_00a5:  cgt.un
    IL_00a7:  ldloc.0
    IL_00a8:  ldc.i4.0
    IL_00a9:  cgt.un
    IL_00ab:  and
    IL_00ac:  ldloc.1
    IL_00ad:  ldc.i4.0
    IL_00ae:  ceq
    IL_00b0:  and
    IL_00b1:  endfilter
  }  // end filter
  {  // handler
    IL_00b3:  castclass  "System.Exception"
    IL_00b8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00bd:  leave.s    IL_0085
  }
  IL_00bf:  ldc.i4     0x800a0033
  IL_00c4:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c9:  throw
  IL_00ca:  ldloc.1
  IL_00cb:  brfalse.s  IL_00d3
  IL_00cd:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00d2:  nop
  IL_00d3:  ret
}
]]>)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_Do_While_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Do While M1()
            If M4()
                Continue Do
            End If
            M2()
ContinueLabel:
        Loop
        M3()
    End Sub

    Sub M0()
    End Sub

    Function M1() As Boolean
        Return False
    End Function

    Sub M2()
    End Sub

    Sub M3()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      177 (0xb1)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  br.s       IL_0020
    IL_0010:  ldc.i4.5
    IL_0011:  stloc.2
    IL_0012:  call       "Function Program.M4() As Boolean"
    IL_0017:  brtrue.s   IL_0020
    IL_0019:  ldc.i4.7
    IL_001a:  stloc.2
    IL_001b:  call       "Sub Program.M2()"
    IL_0020:  ldc.i4.4
    IL_0021:  stloc.2
    IL_0022:  call       "Function Program.M1() As Boolean"
    IL_0027:  brtrue.s   IL_0010
    IL_0029:  ldc.i4.s   9
    IL_002b:  stloc.2
    IL_002c:  call       "Sub Program.M3()"
    IL_0031:  leave.s    IL_00a8
    IL_0033:  ldloc.1
    IL_0034:  ldc.i4.1
    IL_0035:  add
    IL_0036:  ldc.i4.0
    IL_0037:  stloc.1
    IL_0038:  switch    (
        IL_0069,
        IL_0000,
        IL_0007,
        IL_0020,
        IL_0020,
        IL_0010,
        IL_0020,
        IL_0019,
        IL_0020,
        IL_0029,
        IL_0031)
    IL_0069:  leave.s    IL_009d
    IL_006b:  ldloc.2
    IL_006c:  stloc.1
    IL_006d:  ldloc.0
    IL_006e:  switch    (
        IL_007b,
        IL_0033)
    IL_007b:  leave.s    IL_009d
  }
  filter
  {
    IL_007d:  isinst     "System.Exception"
    IL_0082:  ldnull
    IL_0083:  cgt.un
    IL_0085:  ldloc.0
    IL_0086:  ldc.i4.0
    IL_0087:  cgt.un
    IL_0089:  and
    IL_008a:  ldloc.1
    IL_008b:  ldc.i4.0
    IL_008c:  ceq
    IL_008e:  and
    IL_008f:  endfilter
  }  // end filter
  {  // handler
    IL_0091:  castclass  "System.Exception"
    IL_0096:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_009b:  leave.s    IL_006b
  }
  IL_009d:  ldc.i4     0x800a0033
  IL_00a2:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a7:  throw
  IL_00a8:  ldloc.1
  IL_00a9:  brfalse.s  IL_00b0
  IL_00ab:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b0:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      212 (0xd4)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  br.s       IL_002e
    IL_0015:  ldc.i4.5
    IL_0016:  stloc.2
    IL_0017:  call       "Function Program.M4() As Boolean"
    IL_001c:  stloc.3
    IL_001d:  ldloc.3
    IL_001e:  brfalse.s  IL_0023
    IL_0020:  br.s       IL_002e
    IL_0022:  nop
    IL_0023:  nop
    IL_0024:  ldc.i4.8
    IL_0025:  stloc.2
    IL_0026:  call       "Sub Program.M2()"
    IL_002b:  nop
    IL_002c:  nop
    IL_002d:  nop
    IL_002e:  ldc.i4.4
    IL_002f:  stloc.2
    IL_0030:  call       "Function Program.M1() As Boolean"
    IL_0035:  stloc.s    V_4
    IL_0037:  ldloc.s    V_4
    IL_0039:  brtrue.s   IL_0015
    IL_003b:  ldc.i4.s   10
    IL_003d:  stloc.2
    IL_003e:  call       "Sub Program.M3()"
    IL_0043:  nop
    IL_0044:  leave      IL_00ca
    IL_0049:  ldloc.1
    IL_004a:  ldc.i4.1
    IL_004b:  add
    IL_004c:  ldc.i4.0
    IL_004d:  stloc.1
    IL_004e:  switch    (
        IL_0083,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_002e,
        IL_0015,
        IL_0020,
        IL_0022,
        IL_0024,
        IL_002d,
        IL_003b,
        IL_0044)
    IL_0083:  leave.s    IL_00bf
    IL_0085:  ldloc.2
    IL_0086:  stloc.1
    IL_0087:  ldloc.0
    IL_0088:  ldc.i4.s   -2
    IL_008a:  bgt.s      IL_008f
    IL_008c:  ldc.i4.1
    IL_008d:  br.s       IL_0090
    IL_008f:  ldloc.0
    IL_0090:  switch    (
        IL_009d,
        IL_0049)
    IL_009d:  leave.s    IL_00bf
  }
  filter
  {
    IL_009f:  isinst     "System.Exception"
    IL_00a4:  ldnull
    IL_00a5:  cgt.un
    IL_00a7:  ldloc.0
    IL_00a8:  ldc.i4.0
    IL_00a9:  cgt.un
    IL_00ab:  and
    IL_00ac:  ldloc.1
    IL_00ad:  ldc.i4.0
    IL_00ae:  ceq
    IL_00b0:  and
    IL_00b1:  endfilter
  }  // end filter
  {  // handler
    IL_00b3:  castclass  "System.Exception"
    IL_00b8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00bd:  leave.s    IL_0085
  }
  IL_00bf:  ldc.i4     0x800a0033
  IL_00c4:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c9:  throw
  IL_00ca:  ldloc.1
  IL_00cb:  brfalse.s  IL_00d3
  IL_00cd:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00d2:  nop
  IL_00d3:  ret
}
]]>)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_Do_Until_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Do Until M1()
            If M4()
                Continue Do
            End If
            M2()
ContinueLabel:
        Loop
        M3()
    End Sub

    Sub M0()
    End Sub

    Function M1() As Boolean
        Return False
    End Function

    Sub M2()
    End Sub

    Sub M3()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      177 (0xb1)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  br.s       IL_0020
    IL_0010:  ldc.i4.5
    IL_0011:  stloc.2
    IL_0012:  call       "Function Program.M4() As Boolean"
    IL_0017:  brtrue.s   IL_0020
    IL_0019:  ldc.i4.7
    IL_001a:  stloc.2
    IL_001b:  call       "Sub Program.M2()"
    IL_0020:  ldc.i4.4
    IL_0021:  stloc.2
    IL_0022:  call       "Function Program.M1() As Boolean"
    IL_0027:  brfalse.s  IL_0010
    IL_0029:  ldc.i4.s   9
    IL_002b:  stloc.2
    IL_002c:  call       "Sub Program.M3()"
    IL_0031:  leave.s    IL_00a8
    IL_0033:  ldloc.1
    IL_0034:  ldc.i4.1
    IL_0035:  add
    IL_0036:  ldc.i4.0
    IL_0037:  stloc.1
    IL_0038:  switch    (
        IL_0069,
        IL_0000,
        IL_0007,
        IL_0020,
        IL_0020,
        IL_0010,
        IL_0020,
        IL_0019,
        IL_0020,
        IL_0029,
        IL_0031)
    IL_0069:  leave.s    IL_009d
    IL_006b:  ldloc.2
    IL_006c:  stloc.1
    IL_006d:  ldloc.0
    IL_006e:  switch    (
        IL_007b,
        IL_0033)
    IL_007b:  leave.s    IL_009d
  }
  filter
  {
    IL_007d:  isinst     "System.Exception"
    IL_0082:  ldnull
    IL_0083:  cgt.un
    IL_0085:  ldloc.0
    IL_0086:  ldc.i4.0
    IL_0087:  cgt.un
    IL_0089:  and
    IL_008a:  ldloc.1
    IL_008b:  ldc.i4.0
    IL_008c:  ceq
    IL_008e:  and
    IL_008f:  endfilter
  }  // end filter
  {  // handler
    IL_0091:  castclass  "System.Exception"
    IL_0096:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_009b:  leave.s    IL_006b
  }
  IL_009d:  ldc.i4     0x800a0033
  IL_00a2:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a7:  throw
  IL_00a8:  ldloc.1
  IL_00a9:  brfalse.s  IL_00b0
  IL_00ab:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b0:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      212 (0xd4)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  br.s       IL_002e
    IL_0015:  ldc.i4.5
    IL_0016:  stloc.2
    IL_0017:  call       "Function Program.M4() As Boolean"
    IL_001c:  stloc.3
    IL_001d:  ldloc.3
    IL_001e:  brfalse.s  IL_0023
    IL_0020:  br.s       IL_002e
    IL_0022:  nop
    IL_0023:  nop
    IL_0024:  ldc.i4.8
    IL_0025:  stloc.2
    IL_0026:  call       "Sub Program.M2()"
    IL_002b:  nop
    IL_002c:  nop
    IL_002d:  nop
    IL_002e:  ldc.i4.4
    IL_002f:  stloc.2
    IL_0030:  call       "Function Program.M1() As Boolean"
    IL_0035:  stloc.s    V_4
    IL_0037:  ldloc.s    V_4
    IL_0039:  brfalse.s  IL_0015
    IL_003b:  ldc.i4.s   10
    IL_003d:  stloc.2
    IL_003e:  call       "Sub Program.M3()"
    IL_0043:  nop
    IL_0044:  leave      IL_00ca
    IL_0049:  ldloc.1
    IL_004a:  ldc.i4.1
    IL_004b:  add
    IL_004c:  ldc.i4.0
    IL_004d:  stloc.1
    IL_004e:  switch    (
        IL_0083,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_002e,
        IL_0015,
        IL_0020,
        IL_0022,
        IL_0024,
        IL_002d,
        IL_003b,
        IL_0044)
    IL_0083:  leave.s    IL_00bf
    IL_0085:  ldloc.2
    IL_0086:  stloc.1
    IL_0087:  ldloc.0
    IL_0088:  ldc.i4.s   -2
    IL_008a:  bgt.s      IL_008f
    IL_008c:  ldc.i4.1
    IL_008d:  br.s       IL_0090
    IL_008f:  ldloc.0
    IL_0090:  switch    (
        IL_009d,
        IL_0049)
    IL_009d:  leave.s    IL_00bf
  }
  filter
  {
    IL_009f:  isinst     "System.Exception"
    IL_00a4:  ldnull
    IL_00a5:  cgt.un
    IL_00a7:  ldloc.0
    IL_00a8:  ldc.i4.0
    IL_00a9:  cgt.un
    IL_00ab:  and
    IL_00ac:  ldloc.1
    IL_00ad:  ldc.i4.0
    IL_00ae:  ceq
    IL_00b0:  and
    IL_00b1:  endfilter
  }  // end filter
  {  // handler
    IL_00b3:  castclass  "System.Exception"
    IL_00b8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00bd:  leave.s    IL_0085
  }
  IL_00bf:  ldc.i4     0x800a0033
  IL_00c4:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c9:  throw
  IL_00ca:  ldloc.1
  IL_00cb:  brfalse.s  IL_00d3
  IL_00cd:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00d2:  nop
  IL_00d3:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Do_Loop_While_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({0, -1, 0}),
                      ({-1, 0, 0}),
                      ({-1, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            current = 0
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        Do
            M(0)
        Loop While M(1) <> 0
        M(2)
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M{0} - {1}", num, val)
        If val = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return val
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      222 (0xde)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  nop
    IL_000b:  ldc.i4.3
    IL_000c:  stloc.2
    IL_000d:  ldc.i4.0
    IL_000e:  call       "Function Program.M(Integer) As Integer"
    IL_0013:  pop
    IL_0014:  nop
    IL_0015:  ldc.i4.4
    IL_0016:  stloc.2
    IL_0017:  ldc.i4.1
    IL_0018:  call       "Function Program.M(Integer) As Integer"
    IL_001d:  ldc.i4.0
    IL_001e:  cgt.un
    IL_0020:  stloc.3
    IL_0021:  ldloc.3
    IL_0022:  brtrue.s   IL_000a
    IL_0024:  ldc.i4.5
    IL_0025:  stloc.2
    IL_0026:  ldc.i4.2
    IL_0027:  call       "Function Program.M(Integer) As Integer"
    IL_002c:  pop
    IL_002d:  br.s       IL_0055
    IL_002f:  nop
    IL_0030:  ldc.i4.7
    IL_0031:  stloc.2
    IL_0032:  ldstr      "OnError"
    IL_0037:  call       "Sub System.Console.WriteLine(String)"
    IL_003c:  nop
    IL_003d:  ldc.i4.8
    IL_003e:  stloc.2
    IL_003f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0044:  nop
    IL_0045:  ldloc.1
    IL_0046:  brtrue.s   IL_0053
    IL_0048:  ldc.i4     0x800a0014
    IL_004d:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0052:  throw
    IL_0053:  br.s       IL_0057
    IL_0055:  leave.s    IL_00d4
    IL_0057:  ldloc.1
    IL_0058:  ldc.i4.1
    IL_0059:  add
    IL_005a:  ldc.i4.0
    IL_005b:  stloc.1
    IL_005c:  switch    (
        IL_0089,
        IL_0002,
        IL_000a,
        IL_000b,
        IL_0015,
        IL_0024,
        IL_002d,
        IL_0030,
        IL_003d,
        IL_0055)
    IL_0089:  leave.s    IL_00c9
    IL_008b:  ldloc.2
    IL_008c:  stloc.1
    IL_008d:  ldloc.0
    IL_008e:  ldc.i4.s   -2
    IL_0090:  bgt.s      IL_0095
    IL_0092:  ldc.i4.1
    IL_0093:  br.s       IL_0096
    IL_0095:  ldloc.0
    IL_0096:  switch    (
        IL_00a7,
        IL_0057,
        IL_002f)
    IL_00a7:  leave.s    IL_00c9
  }
  filter
  {
    IL_00a9:  isinst     "System.Exception"
    IL_00ae:  ldnull
    IL_00af:  cgt.un
    IL_00b1:  ldloc.0
    IL_00b2:  ldc.i4.0
    IL_00b3:  cgt.un
    IL_00b5:  and
    IL_00b6:  ldloc.1
    IL_00b7:  ldc.i4.0
    IL_00b8:  ceq
    IL_00ba:  and
    IL_00bb:  endfilter
  }  // end filter
  {  // handler
    IL_00bd:  castclass  "System.Exception"
    IL_00c2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00c7:  leave.s    IL_008b
  }
  IL_00c9:  ldc.i4     0x800a0033
  IL_00ce:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00d3:  throw
  IL_00d4:  ldloc.1
  IL_00d5:  brfalse.s  IL_00dd
  IL_00d7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00dc:  nop
  IL_00dd:  ret
}]]>)
 
            ' Changed from verifying output to checking IL - Bug 717949
            ' Leaving in expected output for  information purpose
 
            '            Dim expected =
            '            <![CDATA[
            'Test - 0
            'M0 - 0
            'M1 - -1
            'OnError
            'M2 - 0
            'Test - 1
            'M0 - -1
            'OnError
            'M1 - 0
            'M2 - 0
            'Test - 2
            'M0 - -1
            'OnError
            'M1 - -1
            'OnError
            'M2 - 0
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[
{
  // Code size      198 (0xc6)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.3
    IL_0008:  stloc.2
    IL_0009:  ldc.i4.0
    IL_000a:  call       "Function Program.M(Integer) As Integer"
    IL_000f:  pop
    IL_0010:  ldc.i4.4
    IL_0011:  stloc.2
    IL_0012:  ldc.i4.1
    IL_0013:  call       "Function Program.M(Integer) As Integer"
    IL_0018:  brtrue.s   IL_0007
    IL_001a:  ldc.i4.5
    IL_001b:  stloc.2
    IL_001c:  ldc.i4.2
    IL_001d:  call       "Function Program.M(Integer) As Integer"
    IL_0022:  pop
    IL_0023:  br.s       IL_0046
    IL_0025:  ldc.i4.7
    IL_0026:  stloc.2
    IL_0027:  ldstr      "OnError"
    IL_002c:  call       "Sub System.Console.WriteLine(String)"
    IL_0031:  ldc.i4.8
    IL_0032:  stloc.2
    IL_0033:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0038:  ldloc.1
    IL_0039:  brtrue.s   IL_0048
    IL_003b:  ldc.i4     0x800a0014
    IL_0040:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0045:  throw
    IL_0046:  leave.s    IL_00bd
    IL_0048:  ldloc.1
    IL_0049:  ldc.i4.1
    IL_004a:  add
    IL_004b:  ldc.i4.0
    IL_004c:  stloc.1
    IL_004d:  switch    (
        IL_007a,
        IL_0000,
        IL_0007,
        IL_0007,
        IL_0010,
        IL_001a,
        IL_0046,
        IL_0025,
        IL_0031,
        IL_0046)
    IL_007a:  leave.s    IL_00b2
    IL_007c:  ldloc.2
    IL_007d:  stloc.1
    IL_007e:  ldloc.0
    IL_007f:  switch    (
        IL_0090,
        IL_0048,
        IL_0025)
    IL_0090:  leave.s    IL_00b2
  }
  filter
  {
    IL_0092:  isinst     "System.Exception"
    IL_0097:  ldnull
    IL_0098:  cgt.un
    IL_009a:  ldloc.0
    IL_009b:  ldc.i4.0
    IL_009c:  cgt.un
    IL_009e:  and
    IL_009f:  ldloc.1
    IL_00a0:  ldc.i4.0
    IL_00a1:  ceq
    IL_00a3:  and
    IL_00a4:  endfilter
  }  // end filter
  {  // handler
    IL_00a6:  castclass  "System.Exception"
    IL_00ab:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b0:  leave.s    IL_007c
  }
  IL_00b2:  ldc.i4     0x800a0033
  IL_00b7:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00bc:  throw
  IL_00bd:  ldloc.1
  IL_00be:  brfalse.s  IL_00c5
  IL_00c0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c5:  ret
}]]>)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_Do_Loop_While_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Do 
            If M4()
                Continue Do
            End If
            M1()
ContinueLabel:
        Loop While M2()
        M3()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Function M2() As Boolean
        Return False
    End Function

    Sub M3()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      170 (0xaa)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.4
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.M4() As Boolean"
    IL_0015:  brtrue.s   IL_001e
    IL_0017:  ldc.i4.6
    IL_0018:  stloc.2
    IL_0019:  call       "Sub Program.M1()"
    IL_001e:  ldc.i4.7
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  brtrue.s   IL_000e
    IL_0027:  ldc.i4.8
    IL_0028:  stloc.2
    IL_0029:  call       "Sub Program.M3()"
    IL_002e:  leave.s    IL_00a1
    IL_0030:  ldloc.1
    IL_0031:  ldc.i4.1
    IL_0032:  add
    IL_0033:  ldc.i4.0
    IL_0034:  stloc.1
    IL_0035:  switch    (
        IL_0062,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_000e,
        IL_001e,
        IL_0017,
        IL_001e,
        IL_0027,
        IL_002e)
    IL_0062:  leave.s    IL_0096
    IL_0064:  ldloc.2
    IL_0065:  stloc.1
    IL_0066:  ldloc.0
    IL_0067:  switch    (
        IL_0074,
        IL_0030)
    IL_0074:  leave.s    IL_0096
  }
  filter
  {
    IL_0076:  isinst     "System.Exception"
    IL_007b:  ldnull
    IL_007c:  cgt.un
    IL_007e:  ldloc.0
    IL_007f:  ldc.i4.0
    IL_0080:  cgt.un
    IL_0082:  and
    IL_0083:  ldloc.1
    IL_0084:  ldc.i4.0
    IL_0085:  ceq
    IL_0087:  and
    IL_0088:  endfilter
  }  // end filter
  {  // handler
    IL_008a:  castclass  "System.Exception"
    IL_008f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0094:  leave.s    IL_0064
  }
  IL_0096:  ldc.i4     0x800a0033
  IL_009b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a0:  throw
  IL_00a1:  ldloc.1
  IL_00a2:  brfalse.s  IL_00a9
  IL_00a4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a9:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      204 (0xcc)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  nop
    IL_0014:  ldc.i4.4
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.M4() As Boolean"
    IL_001b:  stloc.3
    IL_001c:  ldloc.3
    IL_001d:  brfalse.s  IL_0022
    IL_001f:  br.s       IL_002d
    IL_0021:  nop
    IL_0022:  nop
    IL_0023:  ldc.i4.7
    IL_0024:  stloc.2
    IL_0025:  call       "Sub Program.M1()"
    IL_002a:  nop
    IL_002b:  nop
    IL_002c:  nop
    IL_002d:  ldc.i4.8
    IL_002e:  stloc.2
    IL_002f:  call       "Function Program.M2() As Boolean"
    IL_0034:  stloc.s    V_4
    IL_0036:  ldloc.s    V_4
    IL_0038:  brtrue.s   IL_0013
    IL_003a:  ldc.i4.s   9
    IL_003c:  stloc.2
    IL_003d:  call       "Sub Program.M3()"
    IL_0042:  nop
    IL_0043:  leave.s    IL_00c2
    IL_0045:  ldloc.1
    IL_0046:  ldc.i4.1
    IL_0047:  add
    IL_0048:  ldc.i4.0
    IL_0049:  stloc.1
    IL_004a:  switch    (
        IL_007b,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_0014,
        IL_001f,
        IL_0021,
        IL_0023,
        IL_002d,
        IL_003a,
        IL_0043)
    IL_007b:  leave.s    IL_00b7
    IL_007d:  ldloc.2
    IL_007e:  stloc.1
    IL_007f:  ldloc.0
    IL_0080:  ldc.i4.s   -2
    IL_0082:  bgt.s      IL_0087
    IL_0084:  ldc.i4.1
    IL_0085:  br.s       IL_0088
    IL_0087:  ldloc.0
    IL_0088:  switch    (
        IL_0095,
        IL_0045)
    IL_0095:  leave.s    IL_00b7
  }
  filter
  {
    IL_0097:  isinst     "System.Exception"
    IL_009c:  ldnull
    IL_009d:  cgt.un
    IL_009f:  ldloc.0
    IL_00a0:  ldc.i4.0
    IL_00a1:  cgt.un
    IL_00a3:  and
    IL_00a4:  ldloc.1
    IL_00a5:  ldc.i4.0
    IL_00a6:  ceq
    IL_00a8:  and
    IL_00a9:  endfilter
  }  // end filter
  {  // handler
    IL_00ab:  castclass  "System.Exception"
    IL_00b0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b5:  leave.s    IL_007d
  }
  IL_00b7:  ldc.i4     0x800a0033
  IL_00bc:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c1:  throw
  IL_00c2:  ldloc.1
  IL_00c3:  brfalse.s  IL_00cb
  IL_00c5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ca:  nop
  IL_00cb:  ret
}
]]>)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_Do_Loop_Until_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Do 
            If M4()
                Continue Do
            End If
            M1()
ContinueLabel:
        Loop Until M2()
        M3()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Function M2() As Boolean
        Return False
    End Function

    Sub M3()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      170 (0xaa)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.4
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.M4() As Boolean"
    IL_0015:  brtrue.s   IL_001e
    IL_0017:  ldc.i4.6
    IL_0018:  stloc.2
    IL_0019:  call       "Sub Program.M1()"
    IL_001e:  ldc.i4.7
    IL_001f:  stloc.2
    IL_0020:  call       "Function Program.M2() As Boolean"
    IL_0025:  brfalse.s  IL_000e
    IL_0027:  ldc.i4.8
    IL_0028:  stloc.2
    IL_0029:  call       "Sub Program.M3()"
    IL_002e:  leave.s    IL_00a1
    IL_0030:  ldloc.1
    IL_0031:  ldc.i4.1
    IL_0032:  add
    IL_0033:  ldc.i4.0
    IL_0034:  stloc.1
    IL_0035:  switch    (
        IL_0062,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_000e,
        IL_001e,
        IL_0017,
        IL_001e,
        IL_0027,
        IL_002e)
    IL_0062:  leave.s    IL_0096
    IL_0064:  ldloc.2
    IL_0065:  stloc.1
    IL_0066:  ldloc.0
    IL_0067:  switch    (
        IL_0074,
        IL_0030)
    IL_0074:  leave.s    IL_0096
  }
  filter
  {
    IL_0076:  isinst     "System.Exception"
    IL_007b:  ldnull
    IL_007c:  cgt.un
    IL_007e:  ldloc.0
    IL_007f:  ldc.i4.0
    IL_0080:  cgt.un
    IL_0082:  and
    IL_0083:  ldloc.1
    IL_0084:  ldc.i4.0
    IL_0085:  ceq
    IL_0087:  and
    IL_0088:  endfilter
  }  // end filter
  {  // handler
    IL_008a:  castclass  "System.Exception"
    IL_008f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0094:  leave.s    IL_0064
  }
  IL_0096:  ldc.i4     0x800a0033
  IL_009b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00a0:  throw
  IL_00a1:  ldloc.1
  IL_00a2:  brfalse.s  IL_00a9
  IL_00a4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a9:  ret
}
]]>)
        End Sub
 
        <Fact>
        Public Sub Resume_in_Do_Loop_Until_1_Debug()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Do 
            If M4()
                Continue Do
            End If
            M1()
ContinueLabel:
        Loop Until M2()
        M3()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Function M2() As Boolean
        Return False
    End Function

    Sub M3()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      204 (0xcc)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3,
                Boolean V_4)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  nop
    IL_0014:  ldc.i4.4
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.M4() As Boolean"
    IL_001b:  stloc.3
    IL_001c:  ldloc.3
    IL_001d:  brfalse.s  IL_0022
    IL_001f:  br.s       IL_002d
    IL_0021:  nop
    IL_0022:  nop
    IL_0023:  ldc.i4.7
    IL_0024:  stloc.2
    IL_0025:  call       "Sub Program.M1()"
    IL_002a:  nop
    IL_002b:  nop
    IL_002c:  nop
    IL_002d:  ldc.i4.8
    IL_002e:  stloc.2
    IL_002f:  call       "Function Program.M2() As Boolean"
    IL_0034:  stloc.s    V_4
    IL_0036:  ldloc.s    V_4
    IL_0038:  brfalse.s  IL_0013
    IL_003a:  ldc.i4.s   9
    IL_003c:  stloc.2
    IL_003d:  call       "Sub Program.M3()"
    IL_0042:  nop
    IL_0043:  leave.s    IL_00c2
    IL_0045:  ldloc.1
    IL_0046:  ldc.i4.1
    IL_0047:  add
    IL_0048:  ldc.i4.0
    IL_0049:  stloc.1
    IL_004a:  switch    (
        IL_007b,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_0014,
        IL_001f,
        IL_0021,
        IL_0023,
        IL_002d,
        IL_003a,
        IL_0043)
    IL_007b:  leave.s    IL_00b7
    IL_007d:  ldloc.2
    IL_007e:  stloc.1
    IL_007f:  ldloc.0
    IL_0080:  ldc.i4.s   -2
    IL_0082:  bgt.s      IL_0087
    IL_0084:  ldc.i4.1
    IL_0085:  br.s       IL_0088
    IL_0087:  ldloc.0
    IL_0088:  switch    (
        IL_0095,
        IL_0045)
    IL_0095:  leave.s    IL_00b7
  }
  filter
  {
    IL_0097:  isinst     "System.Exception"
    IL_009c:  ldnull
    IL_009d:  cgt.un
    IL_009f:  ldloc.0
    IL_00a0:  ldc.i4.0
    IL_00a1:  cgt.un
    IL_00a3:  and
    IL_00a4:  ldloc.1
    IL_00a5:  ldc.i4.0
    IL_00a6:  ceq
    IL_00a8:  and
    IL_00a9:  endfilter
  }  // end filter
  {  // handler
    IL_00ab:  castclass  "System.Exception"
    IL_00b0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b5:  leave.s    IL_007d
  }
  IL_00b7:  ldc.i4     0x800a0033
  IL_00bc:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c1:  throw
  IL_00c2:  ldloc.1
  IL_00c3:  brfalse.s  IL_00cb
  IL_00c5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ca:  nop
  IL_00cb:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Do_Loop_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({1, -1, 0})}

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("Test - {0}", i)
            state = states(i)
            current = 0
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        Do
            If M(0) = 0 Then
                Return
            End If
            M(1)
        Loop
        Return
OnError:
        System.Console.WriteLine("OnError")
        Resume Next
    End Sub

    Function M(num As Integer) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M{0} - {1}", num, val)
        If val = -1 Then
            Throw New System.NotSupportedException()
        End If

        Return val
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      232 (0xe8)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  nop
    IL_000b:  ldc.i4.3
    IL_000c:  stloc.2
    IL_000d:  ldc.i4.0
    IL_000e:  call       "Function Program.M(Integer) As Integer"
    IL_0013:  ldc.i4.0
    IL_0014:  ceq
    IL_0016:  stloc.3
    IL_0017:  ldloc.3
    IL_0018:  brfalse.s  IL_001d
    IL_001a:  br.s       IL_0054
    IL_001c:  nop
    IL_001d:  nop
    IL_001e:  ldc.i4.6
    IL_001f:  stloc.2
    IL_0020:  ldc.i4.1
    IL_0021:  call       "Function Program.M(Integer) As Integer"
    IL_0026:  pop
    IL_0027:  nop
    IL_0028:  br.s       IL_000a
    IL_002a:  br.s       IL_0054
    IL_002c:  nop
    IL_002d:  ldc.i4.s   9
    IL_002f:  stloc.2
    IL_0030:  ldstr      "OnError"
    IL_0035:  call       "Sub System.Console.WriteLine(String)"
    IL_003a:  nop
    IL_003b:  ldc.i4.s   10
    IL_003d:  stloc.2
    IL_003e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0043:  nop
    IL_0044:  ldloc.1
    IL_0045:  brtrue.s   IL_0052
    IL_0047:  ldc.i4     0x800a0014
    IL_004c:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0051:  throw
    IL_0052:  br.s       IL_0059
    IL_0054:  leave      IL_00de
    IL_0059:  ldloc.1
    IL_005a:  ldc.i4.1
    IL_005b:  add
    IL_005c:  ldc.i4.0
    IL_005d:  stloc.1
    IL_005e:  switch    (
        IL_0093,
        IL_0002,
        IL_000a,
        IL_000b,
        IL_001a,
        IL_001c,
        IL_001e,
        IL_0027,
        IL_002a,
        IL_002d,
        IL_003b,
        IL_0054)
    IL_0093:  leave.s    IL_00d3
    IL_0095:  ldloc.2
    IL_0096:  stloc.1
    IL_0097:  ldloc.0
    IL_0098:  ldc.i4.s   -2
    IL_009a:  bgt.s      IL_009f
    IL_009c:  ldc.i4.1
    IL_009d:  br.s       IL_00a0
    IL_009f:  ldloc.0
    IL_00a0:  switch    (
        IL_00b1,
        IL_0059,
        IL_002c)
    IL_00b1:  leave.s    IL_00d3
  }
  filter
  {
    IL_00b3:  isinst     "System.Exception"
    IL_00b8:  ldnull
    IL_00b9:  cgt.un
    IL_00bb:  ldloc.0
    IL_00bc:  ldc.i4.0
    IL_00bd:  cgt.un
    IL_00bf:  and
    IL_00c0:  ldloc.1
    IL_00c1:  ldc.i4.0
    IL_00c2:  ceq
    IL_00c4:  and
    IL_00c5:  endfilter
  }  // end filter
  {  // handler
    IL_00c7:  castclass  "System.Exception"
    IL_00cc:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d1:  leave.s    IL_0095
  }
  IL_00d3:  ldc.i4     0x800a0033
  IL_00d8:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00dd:  throw
  IL_00de:  ldloc.1
  IL_00df:  brfalse.s  IL_00e7
  IL_00e1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00e6:  nop
  IL_00e7:  ret
}]]>)
 
            ' Changed from verifying output to checking IL - Bug 717949
            ' Leaving in expected output for  information purpose
 
            '            Dim expected =
            '            <![CDATA[
            'Test - 0
            'M0 - 1
            'M1 - -1
            'OnError
            'M0 - 0]]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[
{
  // Code size      194 (0xc2)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.3
    IL_0008:  stloc.2
    IL_0009:  ldc.i4.0
    IL_000a:  call       "Function Program.M(Integer) As Integer"
    IL_000f:  brfalse.s  IL_003e
    IL_0011:  ldc.i4.5
    IL_0012:  stloc.2
    IL_0013:  ldc.i4.1
    IL_0014:  call       "Function Program.M(Integer) As Integer"
    IL_0019:  pop
    IL_001a:  br.s       IL_0007
    IL_001c:  ldc.i4.8
    IL_001d:  stloc.2
    IL_001e:  ldstr      "OnError"
    IL_0023:  call       "Sub System.Console.WriteLine(String)"
    IL_0028:  ldc.i4.s   9
    IL_002a:  stloc.2
    IL_002b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0030:  ldloc.1
    IL_0031:  brtrue.s   IL_0040
    IL_0033:  ldc.i4     0x800a0014
    IL_0038:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_003d:  throw
    IL_003e:  leave.s    IL_00b9
    IL_0040:  ldloc.1
    IL_0041:  ldc.i4.1
    IL_0042:  add
    IL_0043:  ldc.i4.0
    IL_0044:  stloc.1
    IL_0045:  switch    (
        IL_0076,
        IL_0000,
        IL_0007,
        IL_0007,
        IL_003e,
        IL_0011,
        IL_0007,
        IL_003e,
        IL_001c,
        IL_0028,
        IL_003e)
    IL_0076:  leave.s    IL_00ae
    IL_0078:  ldloc.2
    IL_0079:  stloc.1
    IL_007a:  ldloc.0
    IL_007b:  switch    (
        IL_008c,
        IL_0040,
        IL_001c)
    IL_008c:  leave.s    IL_00ae
  }
  filter
  {
    IL_008e:  isinst     "System.Exception"
    IL_0093:  ldnull
    IL_0094:  cgt.un
    IL_0096:  ldloc.0
    IL_0097:  ldc.i4.0
    IL_0098:  cgt.un
    IL_009a:  and
    IL_009b:  ldloc.1
    IL_009c:  ldc.i4.0
    IL_009d:  ceq
    IL_009f:  and
    IL_00a0:  endfilter
  }  // end filter
  {  // handler
    IL_00a2:  castclass  "System.Exception"
    IL_00a7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ac:  leave.s    IL_0078
  }
  IL_00ae:  ldc.i4     0x800a0033
  IL_00b3:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b8:  throw
  IL_00b9:  ldloc.1
  IL_00ba:  brfalse.s  IL_00c1
  IL_00bc:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c1:  ret
}]]>)
        End Sub
 
        <WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Do_Loop_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        Do 
            If M4()
                Continue Do
            End If
            M1()
ContinueLabel:
        Loop 
        M2()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      163 (0xa3)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.4
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.M4() As Boolean"
    IL_0015:  brtrue.s   IL_000e
    IL_0017:  ldc.i4.6
    IL_0018:  stloc.2
    IL_0019:  call       "Sub Program.M1()"
    IL_001e:  br.s       IL_000e
    IL_0020:  ldc.i4.8
    IL_0021:  stloc.2
    IL_0022:  call       "Sub Program.M2()"
    IL_0027:  leave.s    IL_009a
    IL_0029:  ldloc.1
    IL_002a:  ldc.i4.1
    IL_002b:  add
    IL_002c:  ldc.i4.0
    IL_002d:  stloc.1
    IL_002e:  switch    (
        IL_005b,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_000e,
        IL_000e,
        IL_0017,
        IL_000e,
        IL_0020,
        IL_0027)
    IL_005b:  leave.s    IL_008f
    IL_005d:  ldloc.2
    IL_005e:  stloc.1
    IL_005f:  ldloc.0
    IL_0060:  switch    (
        IL_006d,
        IL_0029)
    IL_006d:  leave.s    IL_008f
  }
  filter
  {
    IL_006f:  isinst     "System.Exception"
    IL_0074:  ldnull
    IL_0075:  cgt.un
    IL_0077:  ldloc.0
    IL_0078:  ldc.i4.0
    IL_0079:  cgt.un
    IL_007b:  and
    IL_007c:  ldloc.1
    IL_007d:  ldc.i4.0
    IL_007e:  ceq
    IL_0080:  and
    IL_0081:  endfilter
  }  // end filter
  {  // handler
    IL_0083:  castclass  "System.Exception"
    IL_0088:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_008d:  leave.s    IL_005d
  }
  IL_008f:  ldc.i4     0x800a0033
  IL_0094:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0099:  throw
  IL_009a:  ldloc.1
  IL_009b:  brfalse.s  IL_00a2
  IL_009d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a2:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      193 (0xc1)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  nop
    IL_0014:  ldc.i4.4
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.M4() As Boolean"
    IL_001b:  stloc.3
    IL_001c:  ldloc.3
    IL_001d:  brfalse.s  IL_0022
    IL_001f:  br.s       IL_002d
    IL_0021:  nop
    IL_0022:  nop
    IL_0023:  ldc.i4.7
    IL_0024:  stloc.2
    IL_0025:  call       "Sub Program.M1()"
    IL_002a:  nop
    IL_002b:  nop
    IL_002c:  nop
    IL_002d:  br.s       IL_0013
    IL_002f:  ldc.i4.s   9
    IL_0031:  stloc.2
    IL_0032:  call       "Sub Program.M2()"
    IL_0037:  nop
    IL_0038:  leave.s    IL_00b7
    IL_003a:  ldloc.1
    IL_003b:  ldc.i4.1
    IL_003c:  add
    IL_003d:  ldc.i4.0
    IL_003e:  stloc.1
    IL_003f:  switch    (
        IL_0070,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_0014,
        IL_001f,
        IL_0021,
        IL_0023,
        IL_002c,
        IL_002f,
        IL_0038)
    IL_0070:  leave.s    IL_00ac
    IL_0072:  ldloc.2
    IL_0073:  stloc.1
    IL_0074:  ldloc.0
    IL_0075:  ldc.i4.s   -2
    IL_0077:  bgt.s      IL_007c
    IL_0079:  ldc.i4.1
    IL_007a:  br.s       IL_007d
    IL_007c:  ldloc.0
    IL_007d:  switch    (
        IL_008a,
        IL_003a)
    IL_008a:  leave.s    IL_00ac
  }
  filter
  {
    IL_008c:  isinst     "System.Exception"
    IL_0091:  ldnull
    IL_0092:  cgt.un
    IL_0094:  ldloc.0
    IL_0095:  ldc.i4.0
    IL_0096:  cgt.un
    IL_0098:  and
    IL_0099:  ldloc.1
    IL_009a:  ldc.i4.0
    IL_009b:  ceq
    IL_009d:  and
    IL_009e:  endfilter
  }  // end filter
  {  // handler
    IL_00a0:  castclass  "System.Exception"
    IL_00a5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00aa:  leave.s    IL_0072
  }
  IL_00ac:  ldc.i4     0x800a0033
  IL_00b1:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b6:  throw
  IL_00b7:  ldloc.1
  IL_00b8:  brfalse.s  IL_00c0
  IL_00ba:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00bf:  nop
  IL_00c0:  ret
}
]]>)
        End Sub
 
        <Fact(), WorkItem(737273, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/737273")>
        Public Sub Resume_in_ForEach_Enumerable_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System
Imports System.Collections

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({1, 1, 1, 1, 1, -1, -1, 0, 0, 0}),
                      ({1, 1, 1, 1, -1, 0, 0, 0, 0, 0}),
                      ({1, 1, 1, -1, 0, 0, 0, 0, 0}),
                      ({1, 1, -1, 0, 0, 0}),
                      ({1, -1, 1, 1, 1}),
                      ({1, 1, 1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0}),
                      ({-1, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Test()
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        M("3")
        For Each o In GetEnumerable()
            M("0")
            M("1")
        Next
        M("2")
        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

    Function GetEnumerable() As IEnumerable
        M("GetEnumerable")
        Return New Enumerable()
    End Function

    Class Enumerable
        Implements IEnumerable

        Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
            M("GetEnumerator")
            Return New Enumerator()
        End Function
    End Class

    Class Enumerator
        Implements IEnumerator, IDisposable

        Public ReadOnly Property Current As Object Implements IEnumerator.Current
            Get
                M("Current")
                Return Nothing
            End Get
        End Property

        Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
            Return M("MoveNext") <> 0
        End Function

        Public Sub Reset() Implements IEnumerator.Reset
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            M("Dispose")
        End Sub

    End Class
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            CompileAndVerify(compilation).
                VerifyIL("Program.Test", <![CDATA[
{
  // Code size      312 (0x138)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "3"
    IL_000e:  call       "Function Program.M(String) As Integer"
    IL_0013:  pop
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
    IL_001b:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
    IL_0020:  stloc.3
    IL_0021:  br.s       IL_004b
    IL_0023:  ldloc.3
    IL_0024:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
    IL_0029:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
    IL_002e:  pop
    IL_002f:  ldc.i4.4
    IL_0030:  stloc.2
    IL_0031:  ldstr      "0"
    IL_0036:  call       "Function Program.M(String) As Integer"
    IL_003b:  pop
    IL_003c:  ldc.i4.5
    IL_003d:  stloc.2
    IL_003e:  ldstr      "1"
    IL_0043:  call       "Function Program.M(String) As Integer"
    IL_0048:  pop
    IL_0049:  ldc.i4.6
    IL_004a:  stloc.2
    IL_004b:  ldloc.3
    IL_004c:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
    IL_0051:  brtrue.s   IL_0023
    IL_0053:  ldc.i4.7
    IL_0054:  stloc.2
    IL_0055:  ldloc.3
    IL_0056:  isinst     "System.IDisposable"
    IL_005b:  brfalse.s  IL_0068
    IL_005d:  ldloc.3
    IL_005e:  isinst     "System.IDisposable"
    IL_0063:  callvirt   "Sub System.IDisposable.Dispose()"
    IL_0068:  ldc.i4.8
    IL_0069:  stloc.2
    IL_006a:  ldstr      "2"
    IL_006f:  call       "Function Program.M(String) As Integer"
    IL_0074:  pop
    IL_0075:  br.s       IL_00a9
    IL_0077:  ldc.i4.s   10
    IL_0079:  stloc.2
    IL_007a:  ldstr      "OnError - {0}"
    IL_007f:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_0084:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_0089:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_008e:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_0093:  ldc.i4.s   11
    IL_0095:  stloc.2
    IL_0096:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_009b:  ldloc.1
    IL_009c:  brtrue.s   IL_00ae
    IL_009e:  ldc.i4     0x800a0014
    IL_00a3:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00a8:  throw
    IL_00a9:  leave      IL_012f
    IL_00ae:  ldloc.1
    IL_00af:  ldc.i4.1
    IL_00b0:  add
    IL_00b1:  ldc.i4.0
    IL_00b2:  stloc.1
    IL_00b3:  switch    (
        IL_00ec,
        IL_0000,
        IL_0007,
        IL_0014,
        IL_002f,
        IL_003c,
        IL_0049,
        IL_0053,
        IL_0068,
        IL_00a9,
        IL_0077,
        IL_0093,
        IL_00a9)
    IL_00ec:  leave.s    IL_0124
    IL_00ee:  ldloc.2
    IL_00ef:  stloc.1
    IL_00f0:  ldloc.0
    IL_00f1:  switch    (
        IL_0102,
        IL_00ae,
        IL_0077)
    IL_0102:  leave.s    IL_0124
  }
  filter
  {
    IL_0104:  isinst     "System.Exception"
    IL_0109:  ldnull
    IL_010a:  cgt.un
    IL_010c:  ldloc.0
    IL_010d:  ldc.i4.0
    IL_010e:  cgt.un
    IL_0110:  and
    IL_0111:  ldloc.1
    IL_0112:  ldc.i4.0
    IL_0113:  ceq
    IL_0115:  and
    IL_0116:  endfilter
  }  // end filter
  {  // handler
    IL_0118:  castclass  "System.Exception"
    IL_011d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0122:  leave.s    IL_00ee
  }
  IL_0124:  ldc.i4     0x800a0033
  IL_0129:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_012e:  throw
  IL_012f:  ldloc.1
  IL_0130:  brfalse.s  IL_0137
  IL_0132:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0137:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation).
                VerifyIL("Program.Test", <![CDATA[
{
  // Code size      335 (0x14f)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3,
                Object V_4, //o
                Boolean V_5)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  ldc.i4.2
    IL_000b:  stloc.2
    IL_000c:  ldstr      "3"
    IL_0011:  call       "Function Program.M(String) As Integer"
    IL_0016:  pop
    IL_0017:  ldc.i4.3
    IL_0018:  stloc.2
    IL_0019:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
    IL_001e:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
    IL_0023:  stloc.3
    IL_0024:  br.s       IL_004f
    IL_0026:  ldloc.3
    IL_0027:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
    IL_002c:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
    IL_0031:  stloc.s    V_4
    IL_0033:  ldc.i4.4
    IL_0034:  stloc.2
    IL_0035:  ldstr      "0"
    IL_003a:  call       "Function Program.M(String) As Integer"
    IL_003f:  pop
    IL_0040:  ldc.i4.5
    IL_0041:  stloc.2
    IL_0042:  ldstr      "1"
    IL_0047:  call       "Function Program.M(String) As Integer"
    IL_004c:  pop
    IL_004d:  ldc.i4.6
    IL_004e:  stloc.2
    IL_004f:  ldloc.3
    IL_0050:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
    IL_0055:  stloc.s    V_5
    IL_0057:  ldloc.s    V_5
    IL_0059:  brtrue.s   IL_0026
    IL_005b:  ldc.i4.7
    IL_005c:  stloc.2
    IL_005d:  ldloc.3
    IL_005e:  isinst     "System.IDisposable"
    IL_0063:  brfalse.s  IL_0071
    IL_0065:  ldloc.3
    IL_0066:  isinst     "System.IDisposable"
    IL_006b:  callvirt   "Sub System.IDisposable.Dispose()"
    IL_0070:  nop
    IL_0071:  ldc.i4.8
    IL_0072:  stloc.2
    IL_0073:  ldstr      "2"
    IL_0078:  call       "Function Program.M(String) As Integer"
    IL_007d:  pop
    IL_007e:  br.s       IL_00b7
    IL_0080:  nop
    IL_0081:  ldc.i4.s   10
    IL_0083:  stloc.2
    IL_0084:  ldstr      "OnError - {0}"
    IL_0089:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_008e:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_0093:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_0098:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_009d:  nop
    IL_009e:  ldc.i4.s   11
    IL_00a0:  stloc.2
    IL_00a1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00a6:  nop
    IL_00a7:  ldloc.1
    IL_00a8:  brtrue.s   IL_00b5
    IL_00aa:  ldc.i4     0x800a0014
    IL_00af:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00b4:  throw
    IL_00b5:  br.s       IL_00bc
    IL_00b7:  leave      IL_0145
    IL_00bc:  ldloc.1
    IL_00bd:  ldc.i4.1
    IL_00be:  add
    IL_00bf:  ldc.i4.0
    IL_00c0:  stloc.1
    IL_00c1:  switch    (
        IL_00fa,
        IL_0002,
        IL_000a,
        IL_0017,
        IL_0033,
        IL_0040,
        IL_004d,
        IL_005b,
        IL_0071,
        IL_007e,
        IL_0081,
        IL_009e,
        IL_00b7)
    IL_00fa:  leave.s    IL_013a
    IL_00fc:  ldloc.2
    IL_00fd:  stloc.1
    IL_00fe:  ldloc.0
    IL_00ff:  ldc.i4.s   -2
    IL_0101:  bgt.s      IL_0106
    IL_0103:  ldc.i4.1
    IL_0104:  br.s       IL_0107
    IL_0106:  ldloc.0
    IL_0107:  switch    (
        IL_0118,
        IL_00bc,
        IL_0080)
    IL_0118:  leave.s    IL_013a
  }
  filter
  {
    IL_011a:  isinst     "System.Exception"
    IL_011f:  ldnull
    IL_0120:  cgt.un
    IL_0122:  ldloc.0
    IL_0123:  ldc.i4.0
    IL_0124:  cgt.un
    IL_0126:  and
    IL_0127:  ldloc.1
    IL_0128:  ldc.i4.0
    IL_0129:  ceq
    IL_012b:  and
    IL_012c:  endfilter
  }  // end filter
  {  // handler
    IL_012e:  castclass  "System.Exception"
    IL_0133:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0138:  leave.s    IL_00fc
  }
  IL_013a:  ldc.i4     0x800a0033
  IL_013f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0144:  throw
  IL_0145:  ldloc.1
  IL_0146:  brfalse.s  IL_014e
  IL_0148:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_014d:  nop
  IL_014e:  ret
}
]]>)
 
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_ForEach_Enumerable_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        For Each o In GetEnumerable()
            If M4()
                Continue For
            End If
            M1()
ContinueLabel:
        Next
        M2()
    End Sub

    Function GetEnumerable() As System.Collections.IEnumerable
        Return Nothing
    End Function

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub

    Function M4() As Boolean
        Return False
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      224 (0xe0)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.3
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
    IL_0015:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
    IL_001a:  stloc.3
    IL_001b:  br.s       IL_003b
    IL_001d:  ldloc.3
    IL_001e:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
    IL_0023:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
    IL_0028:  pop
    IL_0029:  ldc.i4.4
    IL_002a:  stloc.2
    IL_002b:  call       "Function Program.M4() As Boolean"
    IL_0030:  brtrue.s   IL_0039
    IL_0032:  ldc.i4.6
    IL_0033:  stloc.2
    IL_0034:  call       "Sub Program.M1()"
    IL_0039:  ldc.i4.7
    IL_003a:  stloc.2
    IL_003b:  ldloc.3
    IL_003c:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
    IL_0041:  brtrue.s   IL_001d
    IL_0043:  ldc.i4.8
    IL_0044:  stloc.2
    IL_0045:  ldloc.3
    IL_0046:  isinst     "System.IDisposable"
    IL_004b:  brfalse.s  IL_0058
    IL_004d:  ldloc.3
    IL_004e:  isinst     "System.IDisposable"
    IL_0053:  callvirt   "Sub System.IDisposable.Dispose()"
    IL_0058:  ldc.i4.s   9
    IL_005a:  stloc.2
    IL_005b:  call       "Sub Program.M2()"
    IL_0060:  leave.s    IL_00d7
    IL_0062:  ldloc.1
    IL_0063:  ldc.i4.1
    IL_0064:  add
    IL_0065:  ldc.i4.0
    IL_0066:  stloc.1
    IL_0067:  switch    (
        IL_0098,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_0029,
        IL_0039,
        IL_0032,
        IL_0039,
        IL_0043,
        IL_0058,
        IL_0060)
    IL_0098:  leave.s    IL_00cc
    IL_009a:  ldloc.2
    IL_009b:  stloc.1
    IL_009c:  ldloc.0
    IL_009d:  switch    (
        IL_00aa,
        IL_0062)
    IL_00aa:  leave.s    IL_00cc
  }
  filter
  {
    IL_00ac:  isinst     "System.Exception"
    IL_00b1:  ldnull
    IL_00b2:  cgt.un
    IL_00b4:  ldloc.0
    IL_00b5:  ldc.i4.0
    IL_00b6:  cgt.un
    IL_00b8:  and
    IL_00b9:  ldloc.1
    IL_00ba:  ldc.i4.0
    IL_00bb:  ceq
    IL_00bd:  and
    IL_00be:  endfilter
  }  // end filter
  {  // handler
    IL_00c0:  castclass  "System.Exception"
    IL_00c5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ca:  leave.s    IL_009a
  }
  IL_00cc:  ldc.i4     0x800a0033
  IL_00d1:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00d6:  throw
  IL_00d7:  ldloc.1
  IL_00d8:  brfalse.s  IL_00df
  IL_00da:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00df:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      263 (0x107)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3,
                Object V_4, //o
                Boolean V_5,
                Boolean V_6)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
    IL_001a:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
    IL_001f:  stloc.3
    IL_0020:  br.s       IL_004b
    IL_0022:  ldloc.3
    IL_0023:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
    IL_0028:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
    IL_002d:  stloc.s    V_4
    IL_002f:  ldc.i4.4
    IL_0030:  stloc.2
    IL_0031:  call       "Function Program.M4() As Boolean"
    IL_0036:  stloc.s    V_5
    IL_0038:  ldloc.s    V_5
    IL_003a:  brfalse.s  IL_003f
    IL_003c:  br.s       IL_0049
    IL_003e:  nop
    IL_003f:  nop
    IL_0040:  ldc.i4.7
    IL_0041:  stloc.2
    IL_0042:  call       "Sub Program.M1()"
    IL_0047:  nop
    IL_0048:  nop
    IL_0049:  ldc.i4.8
    IL_004a:  stloc.2
    IL_004b:  ldloc.3
    IL_004c:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
    IL_0051:  stloc.s    V_6
    IL_0053:  ldloc.s    V_6
    IL_0055:  brtrue.s   IL_0022
    IL_0057:  ldc.i4.s   9
    IL_0059:  stloc.2
    IL_005a:  ldloc.3
    IL_005b:  isinst     "System.IDisposable"
    IL_0060:  brfalse.s  IL_006e
    IL_0062:  ldloc.3
    IL_0063:  isinst     "System.IDisposable"
    IL_0068:  callvirt   "Sub System.IDisposable.Dispose()"
    IL_006d:  nop
    IL_006e:  ldc.i4.s   10
    IL_0070:  stloc.2
    IL_0071:  call       "Sub Program.M2()"
    IL_0076:  nop
    IL_0077:  leave      IL_00fd
    IL_007c:  ldloc.1
    IL_007d:  ldc.i4.1
    IL_007e:  add
    IL_007f:  ldc.i4.0
    IL_0080:  stloc.1
    IL_0081:  switch    (
        IL_00b6,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_002f,
        IL_003c,
        IL_003e,
        IL_0040,
        IL_0049,
        IL_0057,
        IL_006e,
        IL_0077)
    IL_00b6:  leave.s    IL_00f2
    IL_00b8:  ldloc.2
    IL_00b9:  stloc.1
    IL_00ba:  ldloc.0
    IL_00bb:  ldc.i4.s   -2
    IL_00bd:  bgt.s      IL_00c2
    IL_00bf:  ldc.i4.1
    IL_00c0:  br.s       IL_00c3
    IL_00c2:  ldloc.0
    IL_00c3:  switch    (
        IL_00d0,
        IL_007c)
    IL_00d0:  leave.s    IL_00f2
  }
  filter
  {
    IL_00d2:  isinst     "System.Exception"
    IL_00d7:  ldnull
    IL_00d8:  cgt.un
    IL_00da:  ldloc.0
    IL_00db:  ldc.i4.0
    IL_00dc:  cgt.un
    IL_00de:  and
    IL_00df:  ldloc.1
    IL_00e0:  ldc.i4.0
    IL_00e1:  ceq
    IL_00e3:  and
    IL_00e4:  endfilter
  }  // end filter
  {  // handler
    IL_00e6:  castclass  "System.Exception"
    IL_00eb:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00f0:  leave.s    IL_00b8
  }
  IL_00f2:  ldc.i4     0x800a0033
  IL_00f7:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00fc:  throw
  IL_00fd:  ldloc.1
  IL_00fe:  brfalse.s  IL_0106
  IL_0100:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0105:  nop
  IL_0106:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_ForEach_Enumerable_2()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System
Imports System.Collections

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-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, -1, 1}),
                      ({1, 1, 1, 0, -1})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        M("3")
        For Each o In GetEnumerable()
            M("0")
            M("1")
        Next
        M("2")
        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

    Function GetEnumerable() As IEnumerable
        M("GetEnumerable")
        Return New Enumerable()
    End Function

    Class Enumerable
        Implements IEnumerable

        Public Function GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
            M("GetEnumerator")
            Return New Enumerator()
        End Function
    End Class

    Class Enumerator
        Implements IEnumerator, IDisposable

        Public ReadOnly Property Current As Object Implements IEnumerator.Current
            Get
                M("Current")
                Return Nothing
            End Get
        End Property

        Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
            Return M("MoveNext") <> 0
        End Function

        Public Sub Reset() Implements IEnumerator.Reset
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            M("Dispose")
        End Sub

    End Class
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      287 (0x11f)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3,
                Object V_4, //o
                Boolean V_5)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  ldc.i4.1
    IL_0003:  stloc.2
    IL_0004:  ldstr      "3"
    IL_0009:  call       "Function Program.M(String) As Integer"
    IL_000e:  pop
    .try
    {
      IL_000f:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
      IL_0014:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
      IL_0019:  stloc.3
      IL_001a:  br.s       IL_0040
      IL_001c:  ldloc.3
      IL_001d:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
      IL_0022:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
      IL_0027:  stloc.s    V_4
      IL_0029:  ldstr      "0"
      IL_002e:  call       "Function Program.M(String) As Integer"
      IL_0033:  pop
      IL_0034:  ldstr      "1"
      IL_0039:  call       "Function Program.M(String) As Integer"
      IL_003e:  pop
      IL_003f:  nop
      IL_0040:  ldloc.3
      IL_0041:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
      IL_0046:  stloc.s    V_5
      IL_0048:  ldloc.s    V_5
      IL_004a:  brtrue.s   IL_001c
      IL_004c:  leave.s    IL_0063
    }
    finally
    {
      IL_004e:  ldloc.3
      IL_004f:  isinst     "System.IDisposable"
      IL_0054:  brfalse.s  IL_0062
      IL_0056:  ldloc.3
      IL_0057:  isinst     "System.IDisposable"
      IL_005c:  callvirt   "Sub System.IDisposable.Dispose()"
      IL_0061:  nop
      IL_0062:  endfinally
    }
    IL_0063:  ldc.i4.2
    IL_0064:  stloc.2
    IL_0065:  ldstr      "2"
    IL_006a:  call       "Function Program.M(String) As Integer"
    IL_006f:  pop
    IL_0070:  br.s       IL_00a6
    IL_0072:  ldc.i4.4
    IL_0073:  stloc.2
    IL_0074:  ldstr      "OnError - {0}"
    IL_0079:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_007e:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_0083:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_0088:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_008d:  nop
    IL_008e:  ldc.i4.5
    IL_008f:  stloc.2
    IL_0090:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0095:  nop
    IL_0096:  ldloc.1
    IL_0097:  brtrue.s   IL_00a4
    IL_0099:  ldc.i4     0x800a0014
    IL_009e:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00a3:  throw
    IL_00a4:  br.s       IL_00a8
    IL_00a6:  leave.s    IL_0115
    IL_00a8:  ldloc.1
    IL_00a9:  ldc.i4.1
    IL_00aa:  add
    IL_00ab:  ldc.i4.0
    IL_00ac:  stloc.1
    IL_00ad:  switch    (
        IL_00ce,
        IL_0002,
        IL_0063,
        IL_0070,
        IL_0072,
        IL_008e,
        IL_00a6)
    IL_00ce:  leave.s    IL_010a
    IL_00d0:  ldloc.2
    IL_00d1:  stloc.1
    IL_00d2:  ldloc.0
    IL_00d3:  ldc.i4.s   -2
    IL_00d5:  bgt.s      IL_00da
    IL_00d7:  ldc.i4.1
    IL_00d8:  br.s       IL_00db
    IL_00da:  ldloc.0
    IL_00db:  switch    (
        IL_00e8,
        IL_00a8)
    IL_00e8:  leave.s    IL_010a
  }
  filter
  {
    IL_00ea:  isinst     "System.Exception"
    IL_00ef:  ldnull
    IL_00f0:  cgt.un
    IL_00f2:  ldloc.0
    IL_00f3:  ldc.i4.0
    IL_00f4:  cgt.un
    IL_00f6:  and
    IL_00f7:  ldloc.1
    IL_00f8:  ldc.i4.0
    IL_00f9:  ceq
    IL_00fb:  and
    IL_00fc:  endfilter
  }  // end filter
  {  // handler
    IL_00fe:  castclass  "System.Exception"
    IL_0103:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0108:  leave.s    IL_00d0
  }
  IL_010a:  ldc.i4     0x800a0033
  IL_010f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0114:  throw
  IL_0115:  ldloc.1
  IL_0116:  brfalse.s  IL_011e
  IL_0118:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_011d:  nop
  IL_011e:  ret
}]]>)
 
            ' Changed from verifying output to checking IL - Bug 717949
            ' Leaving in expected output for  information purpose
 
            '            Dim expected =
            '            <![CDATA[
            '--- Test - 0
            'M(3) - -1
            'Exception - Program+TestException
            '--- Test - 1
            'M(3) - 1
            'M(GetEnumerable) - -1
            'Exception - Program+TestException
            '--- Test - 2
            'M(3) - 1
            'M(GetEnumerable) - 1
            'M(GetEnumerator) - -1
            'Exception - Program+TestException
            '--- Test - 3
            'M(3) - 1
            'M(GetEnumerable) - 1
            'M(GetEnumerator) - 1
            'M(MoveNext) - -1
            'M(Dispose) - 1
            'Exception - Program+TestException
            '--- Test - 4
            'M(3) - 1
            'M(GetEnumerable) - 1
            'M(GetEnumerator) - 1
            'M(MoveNext) - -1
            'M(Dispose) - -1
            'Exception - Program+TestException
            '--- Test - 5
            'M(3) - 1
            'M(GetEnumerable) - 1
            'M(GetEnumerator) - 1
            'M(MoveNext) - 1
            'M(Current) - -1
            'M(Dispose) - 1
            'Exception - Program+TestException
            '--- Test - 6
            'M(3) - 1
            'M(GetEnumerable) - 1
            'M(GetEnumerator) - 1
            'M(MoveNext) - 1
            'M(Current) - 1
            'M(0) - -1
            'M(Dispose) - 1
            'Exception - Program+TestException
            '--- Test - 7
            'M(3) - 1
            'M(GetEnumerable) - 1
            'M(GetEnumerator) - 1
            'M(MoveNext) - 0
            'M(Dispose) - -1
            'Exception - Program+TestException
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[
{
  // Code size      265 (0x109)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3)
  .try
  {
    IL_0000:  ldc.i4.1
    IL_0001:  stloc.2
    IL_0002:  ldstr      "3"
    IL_0007:  call       "Function Program.M(String) As Integer"
    IL_000c:  pop
    .try
    {
      IL_000d:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
      IL_0012:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
      IL_0017:  stloc.3
      IL_0018:  br.s       IL_003c
      IL_001a:  ldloc.3
      IL_001b:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
      IL_0020:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
      IL_0025:  pop
      IL_0026:  ldstr      "0"
      IL_002b:  call       "Function Program.M(String) As Integer"
      IL_0030:  pop
      IL_0031:  ldstr      "1"
      IL_0036:  call       "Function Program.M(String) As Integer"
      IL_003b:  pop
      IL_003c:  ldloc.3
      IL_003d:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
      IL_0042:  brtrue.s   IL_001a
      IL_0044:  leave.s    IL_005a
    }
    finally
    {
      IL_0046:  ldloc.3
      IL_0047:  isinst     "System.IDisposable"
      IL_004c:  brfalse.s  IL_0059
      IL_004e:  ldloc.3
      IL_004f:  isinst     "System.IDisposable"
      IL_0054:  callvirt   "Sub System.IDisposable.Dispose()"
      IL_0059:  endfinally
    }
    IL_005a:  ldc.i4.2
    IL_005b:  stloc.2
    IL_005c:  ldstr      "2"
    IL_0061:  call       "Function Program.M(String) As Integer"
    IL_0066:  pop
    IL_0067:  br.s       IL_0099
    IL_0069:  ldc.i4.4
    IL_006a:  stloc.2
    IL_006b:  ldstr      "OnError - {0}"
    IL_0070:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_0075:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_007a:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_007f:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_0084:  ldc.i4.5
    IL_0085:  stloc.2
    IL_0086:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_008b:  ldloc.1
    IL_008c:  brtrue.s   IL_009b
    IL_008e:  ldc.i4     0x800a0014
    IL_0093:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0098:  throw
    IL_0099:  leave.s    IL_0100
    IL_009b:  ldloc.1
    IL_009c:  ldc.i4.1
    IL_009d:  add
    IL_009e:  ldc.i4.0
    IL_009f:  stloc.1
    IL_00a0:  switch    (
        IL_00c1,
        IL_0000,
        IL_005a,
        IL_0099,
        IL_0069,
        IL_0084,
        IL_0099)
    IL_00c1:  leave.s    IL_00f5
    IL_00c3:  ldloc.2
    IL_00c4:  stloc.1
    IL_00c5:  ldloc.0
    IL_00c6:  switch    (
        IL_00d3,
        IL_009b)
    IL_00d3:  leave.s    IL_00f5
  }
  filter
  {
    IL_00d5:  isinst     "System.Exception"
    IL_00da:  ldnull
    IL_00db:  cgt.un
    IL_00dd:  ldloc.0
    IL_00de:  ldc.i4.0
    IL_00df:  cgt.un
    IL_00e1:  and
    IL_00e2:  ldloc.1
    IL_00e3:  ldc.i4.0
    IL_00e4:  ceq
    IL_00e6:  and
    IL_00e7:  endfilter
  }  // end filter
  {  // handler
    IL_00e9:  castclass  "System.Exception"
    IL_00ee:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00f3:  leave.s    IL_00c3
  }
  IL_00f5:  ldc.i4     0x800a0033
  IL_00fa:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00ff:  throw
  IL_0100:  ldloc.1
  IL_0101:  brfalse.s  IL_0108
  IL_0103:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0108:  ret
}]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_ForEach_Enumerable_3()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        Resume Next
        M0()
        For Each o In GetEnumerable()
            M1()
        Next
        M2()
    End Sub

    Function GetEnumerable() As System.Collections.IEnumerable
        Return Nothing
    End Function

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      199 (0xc7)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3)
  .try
{
  IL_0000:  ldc.i4.1
  IL_0001:  stloc.2
  IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0007:  ldloc.1
  IL_0008:  brtrue.s   IL_0061
  IL_000a:  ldc.i4     0x800a0014
  IL_000f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0014:  throw
  IL_0015:  ldc.i4.2
  IL_0016:  stloc.2
  IL_0017:  call       "Sub Program.M0()"
  .try
{
  IL_001c:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
  IL_0021:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
  IL_0026:  stloc.3
  IL_0027:  br.s       IL_003a
  IL_0029:  ldloc.3
  IL_002a:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
  IL_002f:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
  IL_0034:  pop
  IL_0035:  call       "Sub Program.M1()"
  IL_003a:  ldloc.3
  IL_003b:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
  IL_0040:  brtrue.s   IL_0029
  IL_0042:  leave.s    IL_0058
}
  finally
{
  IL_0044:  ldloc.3
  IL_0045:  isinst     "System.IDisposable"
  IL_004a:  brfalse.s  IL_0057
  IL_004c:  ldloc.3
  IL_004d:  isinst     "System.IDisposable"
  IL_0052:  callvirt   "Sub System.IDisposable.Dispose()"
  IL_0057:  endfinally
}
  IL_0058:  ldc.i4.3
  IL_0059:  stloc.2
  IL_005a:  call       "Sub Program.M2()"
  IL_005f:  leave.s    IL_00be
  IL_0061:  ldloc.1
  IL_0062:  ldc.i4.1
  IL_0063:  add
  IL_0064:  ldc.i4.0
  IL_0065:  stloc.1
  IL_0066:  switch    (
  IL_007f,
  IL_0000,
  IL_0015,
  IL_0058,
  IL_005f)
  IL_007f:  leave.s    IL_00b3
  IL_0081:  ldloc.2
  IL_0082:  stloc.1
  IL_0083:  ldloc.0
  IL_0084:  switch    (
  IL_0091,
  IL_0061)
  IL_0091:  leave.s    IL_00b3
}
  filter
{
  IL_0093:  isinst     "System.Exception"
  IL_0098:  ldnull
  IL_0099:  cgt.un
  IL_009b:  ldloc.0
  IL_009c:  ldc.i4.0
  IL_009d:  cgt.un
  IL_009f:  and
  IL_00a0:  ldloc.1
  IL_00a1:  ldc.i4.0
  IL_00a2:  ceq
  IL_00a4:  and
  IL_00a5:  endfilter
}  // end filter
{  // handler
  IL_00a7:  castclass  "System.Exception"
  IL_00ac:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00b1:  leave.s    IL_0081
}
  IL_00b3:  ldc.i4     0x800a0033
  IL_00b8:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00bd:  throw
  IL_00be:  ldloc.1
  IL_00bf:  brfalse.s  IL_00c6
  IL_00c1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c6:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      223 (0xdf)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.IEnumerator V_3,
                Object V_4, //o
                Boolean V_5)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  ldc.i4.1
    IL_0003:  stloc.2
    IL_0004:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0009:  nop
    IL_000a:  ldloc.1
    IL_000b:  brtrue.s   IL_0018
    IL_000d:  ldc.i4     0x800a0014
    IL_0012:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0017:  throw
    IL_0018:  br.s       IL_0070
    IL_001a:  ldc.i4.2
    IL_001b:  stloc.2
    IL_001c:  call       "Sub Program.M0()"
    IL_0021:  nop
    .try
    {
      IL_0022:  call       "Function Program.GetEnumerable() As System.Collections.IEnumerable"
      IL_0027:  callvirt   "Function System.Collections.IEnumerable.GetEnumerator() As System.Collections.IEnumerator"
      IL_002c:  stloc.3
      IL_002d:  br.s       IL_0043
      IL_002f:  ldloc.3
      IL_0030:  callvirt   "Function System.Collections.IEnumerator.get_Current() As Object"
      IL_0035:  call       "Function System.Runtime.CompilerServices.RuntimeHelpers.GetObjectValue(Object) As Object"
      IL_003a:  stloc.s    V_4
      IL_003c:  call       "Sub Program.M1()"
      IL_0041:  nop
      IL_0042:  nop
      IL_0043:  ldloc.3
      IL_0044:  callvirt   "Function System.Collections.IEnumerator.MoveNext() As Boolean"
      IL_0049:  stloc.s    V_5
      IL_004b:  ldloc.s    V_5
      IL_004d:  brtrue.s   IL_002f
      IL_004f:  leave.s    IL_0066
    }
    finally
    {
      IL_0051:  ldloc.3
      IL_0052:  isinst     "System.IDisposable"
      IL_0057:  brfalse.s  IL_0065
      IL_0059:  ldloc.3
      IL_005a:  isinst     "System.IDisposable"
      IL_005f:  callvirt   "Sub System.IDisposable.Dispose()"
      IL_0064:  nop
      IL_0065:  endfinally
    }
    IL_0066:  ldc.i4.3
    IL_0067:  stloc.2
    IL_0068:  call       "Sub Program.M2()"
    IL_006d:  nop
    IL_006e:  leave.s    IL_00d5
    IL_0070:  ldloc.1
    IL_0071:  ldc.i4.1
    IL_0072:  add
    IL_0073:  ldc.i4.0
    IL_0074:  stloc.1
    IL_0075:  switch    (
        IL_008e,
        IL_0002,
        IL_001a,
        IL_0066,
        IL_006e)
    IL_008e:  leave.s    IL_00ca
    IL_0090:  ldloc.2
    IL_0091:  stloc.1
    IL_0092:  ldloc.0
    IL_0093:  ldc.i4.s   -2
    IL_0095:  bgt.s      IL_009a
    IL_0097:  ldc.i4.1
    IL_0098:  br.s       IL_009b
    IL_009a:  ldloc.0
    IL_009b:  switch    (
        IL_00a8,
        IL_0070)
    IL_00a8:  leave.s    IL_00ca
  }
  filter
  {
    IL_00aa:  isinst     "System.Exception"
    IL_00af:  ldnull
    IL_00b0:  cgt.un
    IL_00b2:  ldloc.0
    IL_00b3:  ldc.i4.0
    IL_00b4:  cgt.un
    IL_00b6:  and
    IL_00b7:  ldloc.1
    IL_00b8:  ldc.i4.0
    IL_00b9:  ceq
    IL_00bb:  and
    IL_00bc:  endfilter
  }  // end filter
  {  // handler
    IL_00be:  castclass  "System.Exception"
    IL_00c3:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00c8:  leave.s    IL_0090
  }
  IL_00ca:  ldc.i4     0x800a0033
  IL_00cf:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00d4:  throw
  IL_00d5:  ldloc.1
  IL_00d6:  brfalse.s  IL_00de
  IL_00d8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00dd:  nop
  IL_00de:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_ForTo_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, -1, -1, 0}),
                      ({0, 0, -1, -1, -1, -1, 0}),
                      ({0, 0, 0, -1, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, -1, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, 0, -1, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        M("0")
        For i As LoopType = 0 To 1
            M("1")
            M("2")
        Next
        M("3")
        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

    Structure LoopType
        Private m_Val As Integer

        Public Sub New(x As Integer)
            m_Val = x
        End Sub

        Public Shared Widening Operator CType(x As Integer) As LoopType
            M("Operator CType")
            Return New LoopType(x)
        End Operator

        Public Shared Operator -(x As LoopType, y As LoopType) As LoopType
            M("Operator '-'")
            Return New LoopType(x.m_Val - y.m_Val)
        End Operator

        Public Shared Operator +(x As LoopType, y As LoopType) As LoopType
            M("Operator '+'")
            Return New LoopType(x.m_Val + y.m_Val)
        End Operator

        Public Shared Operator >=(x As LoopType, y As LoopType) As Boolean
            M("Operator '>='")
            Return x.m_Val >= y.m_Val
        End Operator

        Public Shared Operator <=(x As LoopType, y As LoopType) As Boolean
            M("Operator '<='")
            Return x.m_Val <= y.m_Val
        End Operator
    End Structure

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      354 (0x162)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Program.LoopType V_3,
                Program.LoopType V_4,
                Program.LoopType V_5,
                Boolean V_6,
                Program.LoopType V_7) //i
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  ldc.i4.2
    IL_000b:  stloc.2
    IL_000c:  ldstr      "0"
    IL_0011:  call       "Function Program.M(String) As Integer"
    IL_0016:  pop
    IL_0017:  ldc.i4.3
    IL_0018:  stloc.2
    IL_0019:  ldc.i4.0
    IL_001a:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_001f:  stloc.3
    IL_0020:  ldc.i4.1
    IL_0021:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_0026:  stloc.s    V_4
    IL_0028:  ldc.i4.1
    IL_0029:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_002e:  stloc.s    V_5
    IL_0030:  ldloc.s    V_5
    IL_0032:  ldloc.s    V_5
    IL_0034:  ldloc.s    V_5
    IL_0036:  call       "Function Program.LoopType.op_Subtraction(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_003b:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0040:  stloc.s    V_6
    IL_0042:  ldloc.3
    IL_0043:  stloc.s    V_7
    IL_0045:  br.s       IL_006e
    IL_0047:  ldc.i4.4
    IL_0048:  stloc.2
    IL_0049:  ldstr      "1"
    IL_004e:  call       "Function Program.M(String) As Integer"
    IL_0053:  pop
    IL_0054:  ldc.i4.5
    IL_0055:  stloc.2
    IL_0056:  ldstr      "2"
    IL_005b:  call       "Function Program.M(String) As Integer"
    IL_0060:  pop
    IL_0061:  ldc.i4.6
    IL_0062:  stloc.2
    IL_0063:  ldloc.s    V_7
    IL_0065:  ldloc.s    V_5
    IL_0067:  call       "Function Program.LoopType.op_Addition(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_006c:  stloc.s    V_7
    IL_006e:  ldloc.s    V_6
    IL_0070:  brtrue.s   IL_007d
    IL_0072:  ldloc.s    V_7
    IL_0074:  ldloc.s    V_4
    IL_0076:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_007b:  br.s       IL_0086
    IL_007d:  ldloc.s    V_7
    IL_007f:  ldloc.s    V_4
    IL_0081:  call       "Function Program.LoopType.op_LessThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0086:  brtrue.s   IL_0047
    IL_0088:  ldc.i4.7
    IL_0089:  stloc.2
    IL_008a:  ldstr      "3"
    IL_008f:  call       "Function Program.M(String) As Integer"
    IL_0094:  pop
    IL_0095:  br.s       IL_00ce
    IL_0097:  nop
    IL_0098:  ldc.i4.s   9
    IL_009a:  stloc.2
    IL_009b:  ldstr      "OnError - {0}"
    IL_00a0:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_00a5:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_00aa:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_00af:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_00b4:  nop
    IL_00b5:  ldc.i4.s   10
    IL_00b7:  stloc.2
    IL_00b8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00bd:  nop
    IL_00be:  ldloc.1
    IL_00bf:  brtrue.s   IL_00cc
    IL_00c1:  ldc.i4     0x800a0014
    IL_00c6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00cb:  throw
    IL_00cc:  br.s       IL_00d3
    IL_00ce:  leave      IL_0158
    IL_00d3:  ldloc.1
    IL_00d4:  ldc.i4.1
    IL_00d5:  add
    IL_00d6:  ldc.i4.0
    IL_00d7:  stloc.1
    IL_00d8:  switch    (
        IL_010d,
        IL_0002,
        IL_000a,
        IL_0017,
        IL_0047,
        IL_0054,
        IL_0061,
        IL_0088,
        IL_0095,
        IL_0098,
        IL_00b5,
        IL_00ce)
    IL_010d:  leave.s    IL_014d
    IL_010f:  ldloc.2
    IL_0110:  stloc.1
    IL_0111:  ldloc.0
    IL_0112:  ldc.i4.s   -2
    IL_0114:  bgt.s      IL_0119
    IL_0116:  ldc.i4.1
    IL_0117:  br.s       IL_011a
    IL_0119:  ldloc.0
    IL_011a:  switch    (
        IL_012b,
        IL_00d3,
        IL_0097)
    IL_012b:  leave.s    IL_014d
  }
  filter
  {
    IL_012d:  isinst     "System.Exception"
    IL_0132:  ldnull
    IL_0133:  cgt.un
    IL_0135:  ldloc.0
    IL_0136:  ldc.i4.0
    IL_0137:  cgt.un
    IL_0139:  and
    IL_013a:  ldloc.1
    IL_013b:  ldc.i4.0
    IL_013c:  ceq
    IL_013e:  and
    IL_013f:  endfilter
  }  // end filter
  {  // handler
    IL_0141:  castclass  "System.Exception"
    IL_0146:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_014b:  leave.s    IL_010f
  }
  IL_014d:  ldc.i4     0x800a0033
  IL_0152:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0157:  throw
  IL_0158:  ldloc.1
  IL_0159:  brfalse.s  IL_0161
  IL_015b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0160:  nop
  IL_0161:  ret
}]]>)
 
            ' Changed from verifying output to checking IL - Bug 717949
            ' Leaving in expected output for  information purpose
 
            '            Dim expected =
            '            <![CDATA[
            '--- Test - 0
            'M(0) - -1
            'OnError - Program+TestException
            'M(Operator CType) - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 1
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 2
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 3
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 4
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 5
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 6
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 7
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 8
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 9
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(3) - 0
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      354 (0x162)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Program.LoopType V_3,
                Program.LoopType V_4,
                Program.LoopType V_5,
                Boolean V_6,
                Program.LoopType V_7) //i
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  ldc.i4.2
    IL_000b:  stloc.2
    IL_000c:  ldstr      "0"
    IL_0011:  call       "Function Program.M(String) As Integer"
    IL_0016:  pop
    IL_0017:  ldc.i4.3
    IL_0018:  stloc.2
    IL_0019:  ldc.i4.0
    IL_001a:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_001f:  stloc.3
    IL_0020:  ldc.i4.1
    IL_0021:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_0026:  stloc.s    V_4
    IL_0028:  ldc.i4.1
    IL_0029:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_002e:  stloc.s    V_5
    IL_0030:  ldloc.s    V_5
    IL_0032:  ldloc.s    V_5
    IL_0034:  ldloc.s    V_5
    IL_0036:  call       "Function Program.LoopType.op_Subtraction(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_003b:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0040:  stloc.s    V_6
    IL_0042:  ldloc.3
    IL_0043:  stloc.s    V_7
    IL_0045:  br.s       IL_006e
    IL_0047:  ldc.i4.4
    IL_0048:  stloc.2
    IL_0049:  ldstr      "1"
    IL_004e:  call       "Function Program.M(String) As Integer"
    IL_0053:  pop
    IL_0054:  ldc.i4.5
    IL_0055:  stloc.2
    IL_0056:  ldstr      "2"
    IL_005b:  call       "Function Program.M(String) As Integer"
    IL_0060:  pop
    IL_0061:  ldc.i4.6
    IL_0062:  stloc.2
    IL_0063:  ldloc.s    V_7
    IL_0065:  ldloc.s    V_5
    IL_0067:  call       "Function Program.LoopType.op_Addition(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_006c:  stloc.s    V_7
    IL_006e:  ldloc.s    V_6
    IL_0070:  brtrue.s   IL_007d
    IL_0072:  ldloc.s    V_7
    IL_0074:  ldloc.s    V_4
    IL_0076:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_007b:  br.s       IL_0086
    IL_007d:  ldloc.s    V_7
    IL_007f:  ldloc.s    V_4
    IL_0081:  call       "Function Program.LoopType.op_LessThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0086:  brtrue.s   IL_0047
    IL_0088:  ldc.i4.7
    IL_0089:  stloc.2
    IL_008a:  ldstr      "3"
    IL_008f:  call       "Function Program.M(String) As Integer"
    IL_0094:  pop
    IL_0095:  br.s       IL_00ce
    IL_0097:  nop
    IL_0098:  ldc.i4.s   9
    IL_009a:  stloc.2
    IL_009b:  ldstr      "OnError - {0}"
    IL_00a0:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_00a5:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_00aa:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_00af:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_00b4:  nop
    IL_00b5:  ldc.i4.s   10
    IL_00b7:  stloc.2
    IL_00b8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00bd:  nop
    IL_00be:  ldloc.1
    IL_00bf:  brtrue.s   IL_00cc
    IL_00c1:  ldc.i4     0x800a0014
    IL_00c6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00cb:  throw
    IL_00cc:  br.s       IL_00d3
    IL_00ce:  leave      IL_0158
    IL_00d3:  ldloc.1
    IL_00d4:  ldc.i4.1
    IL_00d5:  add
    IL_00d6:  ldc.i4.0
    IL_00d7:  stloc.1
    IL_00d8:  switch    (
        IL_010d,
        IL_0002,
        IL_000a,
        IL_0017,
        IL_0047,
        IL_0054,
        IL_0061,
        IL_0088,
        IL_0095,
        IL_0098,
        IL_00b5,
        IL_00ce)
    IL_010d:  leave.s    IL_014d
    IL_010f:  ldloc.2
    IL_0110:  stloc.1
    IL_0111:  ldloc.0
    IL_0112:  ldc.i4.s   -2
    IL_0114:  bgt.s      IL_0119
    IL_0116:  ldc.i4.1
    IL_0117:  br.s       IL_011a
    IL_0119:  ldloc.0
    IL_011a:  switch    (
        IL_012b,
        IL_00d3,
        IL_0097)
    IL_012b:  leave.s    IL_014d
  }
  filter
  {
    IL_012d:  isinst     "System.Exception"
    IL_0132:  ldnull
    IL_0133:  cgt.un
    IL_0135:  ldloc.0
    IL_0136:  ldc.i4.0
    IL_0137:  cgt.un
    IL_0139:  and
    IL_013a:  ldloc.1
    IL_013b:  ldc.i4.0
    IL_013c:  ceq
    IL_013e:  and
    IL_013f:  endfilter
  }  // end filter
  {  // handler
    IL_0141:  castclass  "System.Exception"
    IL_0146:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_014b:  leave.s    IL_010f
  }
  IL_014d:  ldc.i4     0x800a0033
  IL_0152:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0157:  throw
  IL_0158:  ldloc.1
  IL_0159:  brfalse.s  IL_0161
  IL_015b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0160:  nop
  IL_0161:  ret
}]]>)
 
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_ForTo_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        For i As LoopType = 0 To 1
            If M4()
                Continue For
            End If
            M1()
ContinueLabel:
        Next
        M2()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub

    Function M4() As Boolean
        Return False
    End Function

    Structure LoopType
        Private m_Val As Integer

        Public Sub New(x As Integer)
            m_Val = x
        End Sub

        Public Shared Widening Operator CType(x As Integer) As LoopType
            Return New LoopType(x)
        End Operator

        Public Shared Operator -(x As LoopType, y As LoopType) As LoopType
            Return New LoopType(x.m_Val - y.m_Val)
        End Operator

        Public Shared Operator +(x As LoopType, y As LoopType) As LoopType
            Return New LoopType(x.m_Val + y.m_Val)
        End Operator

        Public Shared Operator >=(x As LoopType, y As LoopType) As Boolean
            Return x.m_Val >= y.m_Val
        End Operator

        Public Shared Operator <=(x As LoopType, y As LoopType) As Boolean
            Return x.m_Val <= y.m_Val
        End Operator
    End Structure

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      243 (0xf3)
  .maxstack  4
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Program.LoopType V_3,
                Program.LoopType V_4,
                Boolean V_5,
                Program.LoopType V_6) //i
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.3
    IL_000f:  stloc.2
    IL_0010:  ldc.i4.0
    IL_0011:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_0016:  ldc.i4.1
    IL_0017:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_001c:  stloc.3
    IL_001d:  ldc.i4.1
    IL_001e:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_0023:  stloc.s    V_4
    IL_0025:  ldloc.s    V_4
    IL_0027:  ldloc.s    V_4
    IL_0029:  ldloc.s    V_4
    IL_002b:  call       "Function Program.LoopType.op_Subtraction(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_0030:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0035:  stloc.s    V_5
    IL_0037:  stloc.s    V_6
    IL_0039:  br.s       IL_0058
    IL_003b:  ldc.i4.4
    IL_003c:  stloc.2
    IL_003d:  call       "Function Program.M4() As Boolean"
    IL_0042:  brtrue.s   IL_004b
    IL_0044:  ldc.i4.6
    IL_0045:  stloc.2
    IL_0046:  call       "Sub Program.M1()"
    IL_004b:  ldc.i4.7
    IL_004c:  stloc.2
    IL_004d:  ldloc.s    V_6
    IL_004f:  ldloc.s    V_4
    IL_0051:  call       "Function Program.LoopType.op_Addition(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_0056:  stloc.s    V_6
    IL_0058:  ldloc.s    V_5
    IL_005a:  brtrue.s   IL_0066
    IL_005c:  ldloc.s    V_6
    IL_005e:  ldloc.3
    IL_005f:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0064:  br.s       IL_006e
    IL_0066:  ldloc.s    V_6
    IL_0068:  ldloc.3
    IL_0069:  call       "Function Program.LoopType.op_LessThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_006e:  brtrue.s   IL_003b
    IL_0070:  ldc.i4.8
    IL_0071:  stloc.2
    IL_0072:  call       "Sub Program.M2()"
    IL_0077:  leave.s    IL_00ea
    IL_0079:  ldloc.1
    IL_007a:  ldc.i4.1
    IL_007b:  add
    IL_007c:  ldc.i4.0
    IL_007d:  stloc.1
    IL_007e:  switch    (
        IL_00ab,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_003b,
        IL_004b,
        IL_0044,
        IL_004b,
        IL_0070,
        IL_0077)
    IL_00ab:  leave.s    IL_00df
    IL_00ad:  ldloc.2
    IL_00ae:  stloc.1
    IL_00af:  ldloc.0
    IL_00b0:  switch    (
        IL_00bd,
        IL_0079)
    IL_00bd:  leave.s    IL_00df
  }
  filter
  {
    IL_00bf:  isinst     "System.Exception"
    IL_00c4:  ldnull
    IL_00c5:  cgt.un
    IL_00c7:  ldloc.0
    IL_00c8:  ldc.i4.0
    IL_00c9:  cgt.un
    IL_00cb:  and
    IL_00cc:  ldloc.1
    IL_00cd:  ldc.i4.0
    IL_00ce:  ceq
    IL_00d0:  and
    IL_00d1:  endfilter
  }  // end filter
  {  // handler
    IL_00d3:  castclass  "System.Exception"
    IL_00d8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00dd:  leave.s    IL_00ad
  }
  IL_00df:  ldc.i4     0x800a0033
  IL_00e4:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00e9:  throw
  IL_00ea:  ldloc.1
  IL_00eb:  brfalse.s  IL_00f2
  IL_00ed:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00f2:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      278 (0x116)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Program.LoopType V_3,
                Program.LoopType V_4,
                Program.LoopType V_5,
                Boolean V_6,
                Program.LoopType V_7, //i
                Boolean V_8)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  ldc.i4.0
    IL_0016:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_001b:  stloc.3
    IL_001c:  ldc.i4.1
    IL_001d:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_0022:  stloc.s    V_4
    IL_0024:  ldc.i4.1
    IL_0025:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_002a:  stloc.s    V_5
    IL_002c:  ldloc.s    V_5
    IL_002e:  ldloc.s    V_5
    IL_0030:  ldloc.s    V_5
    IL_0032:  call       "Function Program.LoopType.op_Subtraction(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_0037:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_003c:  stloc.s    V_6
    IL_003e:  ldloc.3
    IL_003f:  stloc.s    V_7
    IL_0041:  br.s       IL_006a
    IL_0043:  ldc.i4.4
    IL_0044:  stloc.2
    IL_0045:  call       "Function Program.M4() As Boolean"
    IL_004a:  stloc.s    V_8
    IL_004c:  ldloc.s    V_8
    IL_004e:  brfalse.s  IL_0053
    IL_0050:  br.s       IL_005d
    IL_0052:  nop
    IL_0053:  nop
    IL_0054:  ldc.i4.7
    IL_0055:  stloc.2
    IL_0056:  call       "Sub Program.M1()"
    IL_005b:  nop
    IL_005c:  nop
    IL_005d:  ldc.i4.8
    IL_005e:  stloc.2
    IL_005f:  ldloc.s    V_7
    IL_0061:  ldloc.s    V_5
    IL_0063:  call       "Function Program.LoopType.op_Addition(Program.LoopType, Program.LoopType) As Program.LoopType"
    IL_0068:  stloc.s    V_7
    IL_006a:  ldloc.s    V_6
    IL_006c:  brtrue.s   IL_0079
    IL_006e:  ldloc.s    V_7
    IL_0070:  ldloc.s    V_4
    IL_0072:  call       "Function Program.LoopType.op_GreaterThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0077:  br.s       IL_0082
    IL_0079:  ldloc.s    V_7
    IL_007b:  ldloc.s    V_4
    IL_007d:  call       "Function Program.LoopType.op_LessThanOrEqual(Program.LoopType, Program.LoopType) As Boolean"
    IL_0082:  brtrue.s   IL_0043
    IL_0084:  ldc.i4.s   9
    IL_0086:  stloc.2
    IL_0087:  call       "Sub Program.M2()"
    IL_008c:  nop
    IL_008d:  leave.s    IL_010c
    IL_008f:  ldloc.1
    IL_0090:  ldc.i4.1
    IL_0091:  add
    IL_0092:  ldc.i4.0
    IL_0093:  stloc.1
    IL_0094:  switch    (
        IL_00c5,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_0043,
        IL_0050,
        IL_0052,
        IL_0054,
        IL_005d,
        IL_0084,
        IL_008d)
    IL_00c5:  leave.s    IL_0101
    IL_00c7:  ldloc.2
    IL_00c8:  stloc.1
    IL_00c9:  ldloc.0
    IL_00ca:  ldc.i4.s   -2
    IL_00cc:  bgt.s      IL_00d1
    IL_00ce:  ldc.i4.1
    IL_00cf:  br.s       IL_00d2
    IL_00d1:  ldloc.0
    IL_00d2:  switch    (
        IL_00df,
        IL_008f)
    IL_00df:  leave.s    IL_0101
  }
  filter
  {
    IL_00e1:  isinst     "System.Exception"
    IL_00e6:  ldnull
    IL_00e7:  cgt.un
    IL_00e9:  ldloc.0
    IL_00ea:  ldc.i4.0
    IL_00eb:  cgt.un
    IL_00ed:  and
    IL_00ee:  ldloc.1
    IL_00ef:  ldc.i4.0
    IL_00f0:  ceq
    IL_00f2:  and
    IL_00f3:  endfilter
  }  // end filter
  {  // handler
    IL_00f5:  castclass  "System.Exception"
    IL_00fa:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ff:  leave.s    IL_00c7
  }
  IL_0101:  ldc.i4     0x800a0033
  IL_0106:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_010b:  throw
  IL_010c:  ldloc.1
  IL_010d:  brfalse.s  IL_0115
  IL_010f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0114:  nop
  IL_0115:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_ForTo_2()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, -1, 0}),
                      ({0, -1, -1, -1, 0}),
                      ({0, 0, -1, -1, -1, 0}),
                      ({0, 0, 0, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, 0, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        M("0")
        For i As Object = CType(0, LoopType) To 1
            M("1")
            M("2")
        Next
        M("3")
        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

    Structure LoopType
        Private m_Val As Integer

        Public Sub New(x As Integer)
            m_Val = x
        End Sub

        Public Shared Widening Operator CType(x As Integer) As LoopType
            M("Operator CType")
            Return New LoopType(x)
        End Operator

        Public Shared Operator -(x As LoopType, y As LoopType) As LoopType
            M("Operator '-'")
            Return New LoopType(x.m_Val - y.m_Val)
        End Operator

        Public Shared Operator +(x As LoopType, y As LoopType) As LoopType
            M("Operator '+'")
            Return New LoopType(x.m_Val + y.m_Val)
        End Operator

        Public Shared Operator >=(x As LoopType, y As LoopType) As Boolean
            M("Operator '>='")
            Return x.m_Val >= y.m_Val
        End Operator

        Public Shared Operator <=(x As LoopType, y As LoopType) As Boolean
            M("Operator '<='")
            Return x.m_Val <= y.m_Val
        End Operator
    End Structure

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      327 (0x147)
  .maxstack  6
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Object V_3,
                Object V_4, //i
                Boolean V_5,
                Boolean V_6)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  ldc.i4.2
    IL_000b:  stloc.2
    IL_000c:  ldstr      "0"
    IL_0011:  call       "Function Program.M(String) As Integer"
    IL_0016:  pop
    IL_0017:  ldc.i4.3
    IL_0018:  stloc.2
    IL_0019:  ldloc.s    V_4
    IL_001b:  ldc.i4.0
    IL_001c:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_0021:  box        "Program.LoopType"
    IL_0026:  ldc.i4.1
    IL_0027:  box        "Integer"
    IL_002c:  ldc.i4.1
    IL_002d:  box        "Integer"
    IL_0032:  ldloca.s   V_3
    IL_0034:  ldloca.s   V_4
    IL_0036:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForLoopInitObj(Object, Object, Object, Object, ByRef Object, ByRef Object) As Boolean"
    IL_003b:  stloc.s    V_5
    IL_003d:  ldloc.s    V_5
    IL_003f:  brfalse.s  IL_006d
    IL_0041:  ldc.i4.4
    IL_0042:  stloc.2
    IL_0043:  ldstr      "1"
    IL_0048:  call       "Function Program.M(String) As Integer"
    IL_004d:  pop
    IL_004e:  ldc.i4.5
    IL_004f:  stloc.2
    IL_0050:  ldstr      "2"
    IL_0055:  call       "Function Program.M(String) As Integer"
    IL_005a:  pop
    IL_005b:  ldc.i4.6
    IL_005c:  stloc.2
    IL_005d:  ldloc.s    V_4
    IL_005f:  ldloc.3
    IL_0060:  ldloca.s   V_4
    IL_0062:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForNextCheckObj(Object, Object, ByRef Object) As Boolean"
    IL_0067:  stloc.s    V_6
    IL_0069:  ldloc.s    V_6
    IL_006b:  brtrue.s   IL_0041
    IL_006d:  ldc.i4.7
    IL_006e:  stloc.2
    IL_006f:  ldstr      "3"
    IL_0074:  call       "Function Program.M(String) As Integer"
    IL_0079:  pop
    IL_007a:  br.s       IL_00b3
    IL_007c:  nop
    IL_007d:  ldc.i4.s   9
    IL_007f:  stloc.2
    IL_0080:  ldstr      "OnError - {0}"
    IL_0085:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_008a:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_008f:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_0094:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_0099:  nop
    IL_009a:  ldc.i4.s   10
    IL_009c:  stloc.2
    IL_009d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00a2:  nop
    IL_00a3:  ldloc.1
    IL_00a4:  brtrue.s   IL_00b1
    IL_00a6:  ldc.i4     0x800a0014
    IL_00ab:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00b0:  throw
    IL_00b1:  br.s       IL_00b8
    IL_00b3:  leave      IL_013d
    IL_00b8:  ldloc.1
    IL_00b9:  ldc.i4.1
    IL_00ba:  add
    IL_00bb:  ldc.i4.0
    IL_00bc:  stloc.1
    IL_00bd:  switch    (
        IL_00f2,
        IL_0002,
        IL_000a,
        IL_0017,
        IL_0041,
        IL_004e,
        IL_005b,
        IL_006d,
        IL_007a,
        IL_007d,
        IL_009a,
        IL_00b3)
    IL_00f2:  leave.s    IL_0132
    IL_00f4:  ldloc.2
    IL_00f5:  stloc.1
    IL_00f6:  ldloc.0
    IL_00f7:  ldc.i4.s   -2
    IL_00f9:  bgt.s      IL_00fe
    IL_00fb:  ldc.i4.1
    IL_00fc:  br.s       IL_00ff
    IL_00fe:  ldloc.0
    IL_00ff:  switch    (
        IL_0110,
        IL_00b8,
        IL_007c)
    IL_0110:  leave.s    IL_0132
  }
  filter
  {
    IL_0112:  isinst     "System.Exception"
    IL_0117:  ldnull
    IL_0118:  cgt.un
    IL_011a:  ldloc.0
    IL_011b:  ldc.i4.0
    IL_011c:  cgt.un
    IL_011e:  and
    IL_011f:  ldloc.1
    IL_0120:  ldc.i4.0
    IL_0121:  ceq
    IL_0123:  and
    IL_0124:  endfilter
  }  // end filter
  {  // handler
    IL_0126:  castclass  "System.Exception"
    IL_012b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0130:  leave.s    IL_00f4
  }
  IL_0132:  ldc.i4     0x800a0033
  IL_0137:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_013c:  throw
  IL_013d:  ldloc.1
  IL_013e:  brfalse.s  IL_0146
  IL_0140:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0145:  nop
  IL_0146:  ret
}]]>)
 
            ' Changed from verifying output to checking IL - Bug 717949
            ' Leaving in expected output for  information purpose
 
            '            Dim expected =
            '            <![CDATA[
            '--- Test - 0
            'M(0) - -1
            'OnError - Program+TestException
            'M(Operator CType) - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.Exception
            'M(3) - 0
            '--- Test - 1
            'M(0) - 0
            'M(Operator CType) - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.Exception
            'M(3) - 0
            '--- Test - 2
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - -1
            'OnError - System.ArgumentException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.Exception
            'M(3) - 0
            '--- Test - 3
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - -1
            'OnError - System.ArgumentException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.Exception
            'M(3) - 0
            '--- Test - 4
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.Exception
            'M(3) - 0
            '--- Test - 5
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.Exception
            'M(3) - 0
            '--- Test - 6
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - -1
            'OnError - Program+TestException
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(3) - 0
            '--- Test - 7
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - -1
            'OnError - Program+TestException
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(3) - 0
            '--- Test - 8
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 9
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - -1
            'OnError - Program+TestException
            'M(3) - 0
            '--- Test - 10
            'M(0) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator CType) - 0
            'M(Operator '-') - 0
            'M(Operator '>=') - 0
            'M(Operator '<=') - 0
            'M(1) - 0
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - 0
            'M(Operator '+') - 0
            'M(Operator '<=') - 0
            'M(3) - 0
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[
{
  // Code size      299 (0x12b)
  .maxstack  6
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Object V_3,
                Object V_4) //i
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "0"
    IL_000e:  call       "Function Program.M(String) As Integer"
    IL_0013:  pop
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  ldloc.s    V_4
    IL_0018:  ldc.i4.0
    IL_0019:  call       "Function Program.LoopType.op_Implicit(Integer) As Program.LoopType"
    IL_001e:  box        "Program.LoopType"
    IL_0023:  ldc.i4.1
    IL_0024:  box        "Integer"
    IL_0029:  ldc.i4.1
    IL_002a:  box        "Integer"
    IL_002f:  ldloca.s   V_3
    IL_0031:  ldloca.s   V_4
    IL_0033:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForLoopInitObj(Object, Object, Object, Object, ByRef Object, ByRef Object) As Boolean"
    IL_0038:  brfalse.s  IL_0062
    IL_003a:  ldc.i4.4
    IL_003b:  stloc.2
    IL_003c:  ldstr      "1"
    IL_0041:  call       "Function Program.M(String) As Integer"
    IL_0046:  pop
    IL_0047:  ldc.i4.5
    IL_0048:  stloc.2
    IL_0049:  ldstr      "2"
    IL_004e:  call       "Function Program.M(String) As Integer"
    IL_0053:  pop
    IL_0054:  ldc.i4.6
    IL_0055:  stloc.2
    IL_0056:  ldloc.s    V_4
    IL_0058:  ldloc.3
    IL_0059:  ldloca.s   V_4
    IL_005b:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForNextCheckObj(Object, Object, ByRef Object) As Boolean"
    IL_0060:  brtrue.s   IL_003a
    IL_0062:  ldc.i4.7
    IL_0063:  stloc.2
    IL_0064:  ldstr      "3"
    IL_0069:  call       "Function Program.M(String) As Integer"
    IL_006e:  pop
    IL_006f:  br.s       IL_00a3
    IL_0071:  ldc.i4.s   9
    IL_0073:  stloc.2
    IL_0074:  ldstr      "OnError - {0}"
    IL_0079:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_007e:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_0083:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_0088:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_008d:  ldc.i4.s   10
    IL_008f:  stloc.2
    IL_0090:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0095:  ldloc.1
    IL_0096:  brtrue.s   IL_00a5
    IL_0098:  ldc.i4     0x800a0014
    IL_009d:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00a2:  throw
    IL_00a3:  leave.s    IL_0122
    IL_00a5:  ldloc.1
    IL_00a6:  ldc.i4.1
    IL_00a7:  add
    IL_00a8:  ldc.i4.0
    IL_00a9:  stloc.1
    IL_00aa:  switch    (
        IL_00df,
        IL_0000,
        IL_0007,
        IL_0014,
        IL_003a,
        IL_0047,
        IL_0054,
        IL_0062,
        IL_00a3,
        IL_0071,
        IL_008d,
        IL_00a3)
    IL_00df:  leave.s    IL_0117
    IL_00e1:  ldloc.2
    IL_00e2:  stloc.1
    IL_00e3:  ldloc.0
    IL_00e4:  switch    (
        IL_00f5,
        IL_00a5,
        IL_0071)
    IL_00f5:  leave.s    IL_0117
  }
  filter
  {
    IL_00f7:  isinst     "System.Exception"
    IL_00fc:  ldnull
    IL_00fd:  cgt.un
    IL_00ff:  ldloc.0
    IL_0100:  ldc.i4.0
    IL_0101:  cgt.un
    IL_0103:  and
    IL_0104:  ldloc.1
    IL_0105:  ldc.i4.0
    IL_0106:  ceq
    IL_0108:  and
    IL_0109:  endfilter
  }  // end filter
  {  // handler
    IL_010b:  castclass  "System.Exception"
    IL_0110:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0115:  leave.s    IL_00e1
  }
  IL_0117:  ldc.i4     0x800a0033
  IL_011c:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0121:  throw
  IL_0122:  ldloc.1
  IL_0123:  brfalse.s  IL_012a
  IL_0125:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_012a:  ret
}]]>)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_ForTo_3()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        For i As Object = New LoopType(0) To 1
            If M4()
                Continue For
            End If
            M1()
ContinueLabel:
        Next
        M2()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub

    Function M4() As Boolean
        Return False
    End Function

    Structure LoopType
        Private m_Val As Integer

        Public Sub New(x As Integer)
            m_Val = x
        End Sub

        Public Shared Widening Operator CType(x As Integer) As LoopType
            Return New LoopType(x)
        End Operator

        Public Shared Operator -(x As LoopType, y As LoopType) As LoopType
            Return New LoopType(x.m_Val - y.m_Val)
        End Operator

        Public Shared Operator +(x As LoopType, y As LoopType) As LoopType
            Return New LoopType(x.m_Val + y.m_Val)
        End Operator

        Public Shared Operator >=(x As LoopType, y As LoopType) As Boolean
            Return x.m_Val >= y.m_Val
        End Operator

        Public Shared Operator <=(x As LoopType, y As LoopType) As Boolean
            Return x.m_Val <= y.m_Val
        End Operator
    End Structure

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      213 (0xd5)
  .maxstack  6
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Object V_3,
                Object V_4) //i
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.3
    IL_000f:  stloc.2
    IL_0010:  ldloc.s    V_4
    IL_0012:  ldc.i4.0
    IL_0013:  newobj     "Sub Program.LoopType..ctor(Integer)"
    IL_0018:  box        "Program.LoopType"
    IL_001d:  ldc.i4.1
    IL_001e:  box        "Integer"
    IL_0023:  ldc.i4.1
    IL_0024:  box        "Integer"
    IL_0029:  ldloca.s   V_3
    IL_002b:  ldloca.s   V_4
    IL_002d:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForLoopInitObj(Object, Object, Object, Object, ByRef Object, ByRef Object) As Boolean"
    IL_0032:  brfalse.s  IL_0052
    IL_0034:  ldc.i4.4
    IL_0035:  stloc.2
    IL_0036:  call       "Function Program.M4() As Boolean"
    IL_003b:  brtrue.s   IL_0044
    IL_003d:  ldc.i4.6
    IL_003e:  stloc.2
    IL_003f:  call       "Sub Program.M1()"
    IL_0044:  ldc.i4.7
    IL_0045:  stloc.2
    IL_0046:  ldloc.s    V_4
    IL_0048:  ldloc.3
    IL_0049:  ldloca.s   V_4
    IL_004b:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForNextCheckObj(Object, Object, ByRef Object) As Boolean"
    IL_0050:  brtrue.s   IL_0034
    IL_0052:  ldc.i4.8
    IL_0053:  stloc.2
    IL_0054:  call       "Sub Program.M2()"
    IL_0059:  leave.s    IL_00cc
    IL_005b:  ldloc.1
    IL_005c:  ldc.i4.1
    IL_005d:  add
    IL_005e:  ldc.i4.0
    IL_005f:  stloc.1
    IL_0060:  switch    (
        IL_008d,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_0034,
        IL_0044,
        IL_003d,
        IL_0044,
        IL_0052,
        IL_0059)
    IL_008d:  leave.s    IL_00c1
    IL_008f:  ldloc.2
    IL_0090:  stloc.1
    IL_0091:  ldloc.0
    IL_0092:  switch    (
        IL_009f,
        IL_005b)
    IL_009f:  leave.s    IL_00c1
  }
  filter
  {
    IL_00a1:  isinst     "System.Exception"
    IL_00a6:  ldnull
    IL_00a7:  cgt.un
    IL_00a9:  ldloc.0
    IL_00aa:  ldc.i4.0
    IL_00ab:  cgt.un
    IL_00ad:  and
    IL_00ae:  ldloc.1
    IL_00af:  ldc.i4.0
    IL_00b0:  ceq
    IL_00b2:  and
    IL_00b3:  endfilter
  }  // end filter
  {  // handler
    IL_00b5:  castclass  "System.Exception"
    IL_00ba:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00bf:  leave.s    IL_008f
  }
  IL_00c1:  ldc.i4     0x800a0033
  IL_00c6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00cb:  throw
  IL_00cc:  ldloc.1
  IL_00cd:  brfalse.s  IL_00d4
  IL_00cf:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00d4:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      251 (0xfb)
  .maxstack  6
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Object V_3,
                Object V_4, //i
                Boolean V_5,
                Boolean V_6,
                Boolean V_7)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  ldloc.s    V_4
    IL_0017:  ldc.i4.0
    IL_0018:  newobj     "Sub Program.LoopType..ctor(Integer)"
    IL_001d:  box        "Program.LoopType"
    IL_0022:  ldc.i4.1
    IL_0023:  box        "Integer"
    IL_0028:  ldc.i4.1
    IL_0029:  box        "Integer"
    IL_002e:  ldloca.s   V_3
    IL_0030:  ldloca.s   V_4
    IL_0032:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForLoopInitObj(Object, Object, Object, Object, ByRef Object, ByRef Object) As Boolean"
    IL_0037:  stloc.s    V_5
    IL_0039:  ldloc.s    V_5
    IL_003b:  brfalse.s  IL_0069
    IL_003d:  ldc.i4.4
    IL_003e:  stloc.2
    IL_003f:  call       "Function Program.M4() As Boolean"
    IL_0044:  stloc.s    V_6
    IL_0046:  ldloc.s    V_6
    IL_0048:  brfalse.s  IL_004d
    IL_004a:  br.s       IL_0057
    IL_004c:  nop
    IL_004d:  nop
    IL_004e:  ldc.i4.7
    IL_004f:  stloc.2
    IL_0050:  call       "Sub Program.M1()"
    IL_0055:  nop
    IL_0056:  nop
    IL_0057:  ldc.i4.8
    IL_0058:  stloc.2
    IL_0059:  ldloc.s    V_4
    IL_005b:  ldloc.3
    IL_005c:  ldloca.s   V_4
    IL_005e:  call       "Function Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl.ForNextCheckObj(Object, Object, ByRef Object) As Boolean"
    IL_0063:  stloc.s    V_7
    IL_0065:  ldloc.s    V_7
    IL_0067:  brtrue.s   IL_003d
    IL_0069:  ldc.i4.s   9
    IL_006b:  stloc.2
    IL_006c:  call       "Sub Program.M2()"
    IL_0071:  nop
    IL_0072:  leave.s    IL_00f1
    IL_0074:  ldloc.1
    IL_0075:  ldc.i4.1
    IL_0076:  add
    IL_0077:  ldc.i4.0
    IL_0078:  stloc.1
    IL_0079:  switch    (
        IL_00aa,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_003d,
        IL_004a,
        IL_004c,
        IL_004e,
        IL_0057,
        IL_0069,
        IL_0072)
    IL_00aa:  leave.s    IL_00e6
    IL_00ac:  ldloc.2
    IL_00ad:  stloc.1
    IL_00ae:  ldloc.0
    IL_00af:  ldc.i4.s   -2
    IL_00b1:  bgt.s      IL_00b6
    IL_00b3:  ldc.i4.1
    IL_00b4:  br.s       IL_00b7
    IL_00b6:  ldloc.0
    IL_00b7:  switch    (
        IL_00c4,
        IL_0074)
    IL_00c4:  leave.s    IL_00e6
  }
  filter
  {
    IL_00c6:  isinst     "System.Exception"
    IL_00cb:  ldnull
    IL_00cc:  cgt.un
    IL_00ce:  ldloc.0
    IL_00cf:  ldc.i4.0
    IL_00d0:  cgt.un
    IL_00d2:  and
    IL_00d3:  ldloc.1
    IL_00d4:  ldc.i4.0
    IL_00d5:  ceq
    IL_00d7:  and
    IL_00d8:  endfilter
  }  // end filter
  {  // handler
    IL_00da:  castclass  "System.Exception"
    IL_00df:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00e4:  leave.s    IL_00ac
  }
  IL_00e6:  ldc.i4     0x800a0033
  IL_00eb:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00f0:  throw
  IL_00f1:  ldloc.1
  IL_00f2:  brfalse.s  IL_00fa
  IL_00f4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00f9:  nop
  IL_00fa:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_ForEach_String_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
            Dim states = {({-1, -1, -1, -1, 0}),
                      ({0, -1, 0, 0, 0}),
                      ({0, 0, -1, -1, -1, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        M("0")
        For Each c In GetString()
            System.Console.WriteLine("c={0}", Microsoft.VisualBasic.Strings.AscW(c))
            M("1")
            M("2")
        Next
        M("3")
        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function GetString() As String
        M("GetString")
        Return "ab"
    End Function

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[{
  // Code size      338 (0x152)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                String V_3,
                Integer V_4,
                Char V_5, //c
                Boolean V_6)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  ldc.i4.2
    IL_000b:  stloc.2
    IL_000c:  ldstr      "0"
    IL_0011:  call       "Function Program.M(String) As Integer"
    IL_0016:  pop
    IL_0017:  ldc.i4.3
    IL_0018:  stloc.2
    IL_0019:  call       "Function Program.GetString() As String"
    IL_001e:  stloc.3
    IL_001f:  ldc.i4.0
    IL_0020:  stloc.s    V_4
    IL_0022:  br.s       IL_0064
    IL_0024:  ldloc.3
    IL_0025:  ldloc.s    V_4
    IL_0027:  callvirt   "Function String.get_Chars(Integer) As Char"
    IL_002c:  stloc.s    V_5
    IL_002e:  ldc.i4.4
    IL_002f:  stloc.2
    IL_0030:  ldstr      "c={0}"
    IL_0035:  ldloc.s    V_5
    IL_0037:  box        "Integer"
    IL_003c:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_0041:  nop
    IL_0042:  ldc.i4.5
    IL_0043:  stloc.2
    IL_0044:  ldstr      "1"
    IL_0049:  call       "Function Program.M(String) As Integer"
    IL_004e:  pop
    IL_004f:  ldc.i4.6
    IL_0050:  stloc.2
    IL_0051:  ldstr      "2"
    IL_0056:  call       "Function Program.M(String) As Integer"
    IL_005b:  pop
    IL_005c:  ldc.i4.7
    IL_005d:  stloc.2
    IL_005e:  ldloc.s    V_4
    IL_0060:  ldc.i4.1
    IL_0061:  add.ovf
    IL_0062:  stloc.s    V_4
    IL_0064:  ldloc.s    V_4
    IL_0066:  ldloc.3
    IL_0067:  callvirt   "Function String.get_Length() As Integer"
    IL_006c:  clt
    IL_006e:  stloc.s    V_6
    IL_0070:  ldloc.s    V_6
    IL_0072:  brtrue.s   IL_0024
    IL_0074:  ldc.i4.8
    IL_0075:  stloc.2
    IL_0076:  ldstr      "3"
    IL_007b:  call       "Function Program.M(String) As Integer"
    IL_0080:  pop
    IL_0081:  br.s       IL_00ba
    IL_0083:  nop
    IL_0084:  ldc.i4.s   10
    IL_0086:  stloc.2
    IL_0087:  ldstr      "OnError - {0}"
    IL_008c:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_0091:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_0096:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_009b:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_00a0:  nop
    IL_00a1:  ldc.i4.s   11
    IL_00a3:  stloc.2
    IL_00a4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00a9:  nop
    IL_00aa:  ldloc.1
    IL_00ab:  brtrue.s   IL_00b8
    IL_00ad:  ldc.i4     0x800a0014
    IL_00b2:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00b7:  throw
    IL_00b8:  br.s       IL_00bf
    IL_00ba:  leave      IL_0148
    IL_00bf:  ldloc.1
    IL_00c0:  ldc.i4.1
    IL_00c1:  add
    IL_00c2:  ldc.i4.0
    IL_00c3:  stloc.1
    IL_00c4:  switch    (
        IL_00fd,
        IL_0002,
        IL_000a,
        IL_0017,
        IL_002e,
        IL_0042,
        IL_004f,
        IL_005c,
        IL_0074,
        IL_0081,
        IL_0084,
        IL_00a1,
        IL_00ba)
    IL_00fd:  leave.s    IL_013d
    IL_00ff:  ldloc.2
    IL_0100:  stloc.1
    IL_0101:  ldloc.0
    IL_0102:  ldc.i4.s   -2
    IL_0104:  bgt.s      IL_0109
    IL_0106:  ldc.i4.1
    IL_0107:  br.s       IL_010a
    IL_0109:  ldloc.0
    IL_010a:  switch    (
        IL_011b,
        IL_00bf,
        IL_0083)
    IL_011b:  leave.s    IL_013d
  }
  filter
  {
    IL_011d:  isinst     "System.Exception"
    IL_0122:  ldnull
    IL_0123:  cgt.un
    IL_0125:  ldloc.0
    IL_0126:  ldc.i4.0
    IL_0127:  cgt.un
    IL_0129:  and
    IL_012a:  ldloc.1
    IL_012b:  ldc.i4.0
    IL_012c:  ceq
    IL_012e:  and
    IL_012f:  endfilter
  }  // end filter
  {  // handler
    IL_0131:  castclass  "System.Exception"
    IL_0136:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_013b:  leave.s    IL_00ff
  }
  IL_013d:  ldc.i4     0x800a0033
  IL_0142:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0147:  throw
  IL_0148:  ldloc.1
  IL_0149:  brfalse.s  IL_0151
  IL_014b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0150:  nop
  IL_0151:  ret
}]]>)
 
            '            Dim expected =
            '            <![CDATA[
            '--- Test - 0
            'M(0) - -1
            'OnError - Program+TestException
            'M(GetString) - -1
            'OnError - Program+TestException
            'c=0
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'OnError - System.NullReferenceException
            'M(3) - 0
            '--- Test - 1
            'M(0) - 0
            'M(GetString) - -1
            'OnError - Program+TestException
            'c=0
            'M(1) - 0
            'M(2) - 0
            'OnError - System.NullReferenceException
            'M(3) - 0
            '--- Test - 2
            'M(0) - 0
            'M(GetString) - 0
            'c=97
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'c=98
            'M(1) - -1
            'OnError - Program+TestException
            'M(2) - -1
            'OnError - Program+TestException
            'M(3) - 0
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Program.Test",
            <![CDATA[
{
  // Code size      314 (0x13a)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                String V_3,
                Integer V_4,
                Char V_5) //c
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "0"
    IL_000e:  call       "Function Program.M(String) As Integer"
    IL_0013:  pop
    IL_0014:  ldc.i4.3
    IL_0015:  stloc.2
    IL_0016:  call       "Function Program.GetString() As String"
    IL_001b:  stloc.3
    IL_001c:  ldc.i4.0
    IL_001d:  stloc.s    V_4
    IL_001f:  br.s       IL_0060
    IL_0021:  ldloc.3
    IL_0022:  ldloc.s    V_4
    IL_0024:  callvirt   "Function String.get_Chars(Integer) As Char"
    IL_0029:  stloc.s    V_5
    IL_002b:  ldc.i4.4
    IL_002c:  stloc.2
    IL_002d:  ldstr      "c={0}"
    IL_0032:  ldloc.s    V_5
    IL_0034:  box        "Integer"
    IL_0039:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_003e:  ldc.i4.5
    IL_003f:  stloc.2
    IL_0040:  ldstr      "1"
    IL_0045:  call       "Function Program.M(String) As Integer"
    IL_004a:  pop
    IL_004b:  ldc.i4.6
    IL_004c:  stloc.2
    IL_004d:  ldstr      "2"
    IL_0052:  call       "Function Program.M(String) As Integer"
    IL_0057:  pop
    IL_0058:  ldc.i4.7
    IL_0059:  stloc.2
    IL_005a:  ldloc.s    V_4
    IL_005c:  ldc.i4.1
    IL_005d:  add.ovf
    IL_005e:  stloc.s    V_4
    IL_0060:  ldloc.s    V_4
    IL_0062:  ldloc.3
    IL_0063:  callvirt   "Function String.get_Length() As Integer"
    IL_0068:  blt.s      IL_0021
    IL_006a:  ldc.i4.8
    IL_006b:  stloc.2
    IL_006c:  ldstr      "3"
    IL_0071:  call       "Function Program.M(String) As Integer"
    IL_0076:  pop
    IL_0077:  br.s       IL_00ab
    IL_0079:  ldc.i4.s   10
    IL_007b:  stloc.2
    IL_007c:  ldstr      "OnError - {0}"
    IL_0081:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_0086:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_008b:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_0090:  call       "Sub System.Console.WriteLine(String, Object)"
    IL_0095:  ldc.i4.s   11
    IL_0097:  stloc.2
    IL_0098:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_009d:  ldloc.1
    IL_009e:  brtrue.s   IL_00b0
    IL_00a0:  ldc.i4     0x800a0014
    IL_00a5:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00aa:  throw
    IL_00ab:  leave      IL_0131
    IL_00b0:  ldloc.1
    IL_00b1:  ldc.i4.1
    IL_00b2:  add
    IL_00b3:  ldc.i4.0
    IL_00b4:  stloc.1
    IL_00b5:  switch    (
        IL_00ee,
        IL_0000,
        IL_0007,
        IL_0014,
        IL_002b,
        IL_003e,
        IL_004b,
        IL_0058,
        IL_006a,
        IL_00ab,
        IL_0079,
        IL_0095,
        IL_00ab)
    IL_00ee:  leave.s    IL_0126
    IL_00f0:  ldloc.2
    IL_00f1:  stloc.1
    IL_00f2:  ldloc.0
    IL_00f3:  switch    (
        IL_0104,
        IL_00b0,
        IL_0079)
    IL_0104:  leave.s    IL_0126
  }
  filter
  {
    IL_0106:  isinst     "System.Exception"
    IL_010b:  ldnull
    IL_010c:  cgt.un
    IL_010e:  ldloc.0
    IL_010f:  ldc.i4.0
    IL_0110:  cgt.un
    IL_0112:  and
    IL_0113:  ldloc.1
    IL_0114:  ldc.i4.0
    IL_0115:  ceq
    IL_0117:  and
    IL_0118:  endfilter
  }  // end filter
  {  // handler
    IL_011a:  castclass  "System.Exception"
    IL_011f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0124:  leave.s    IL_00f0
  }
  IL_0126:  ldc.i4     0x800a0033
  IL_012b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0130:  throw
  IL_0131:  ldloc.1
  IL_0132:  brfalse.s  IL_0139
  IL_0134:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0139:  ret
}]]>)
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_ForEach_String_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        For Each c In GetString()
            If M4()
                Continue For
            End If
            M1()
ContinueLabel:
        Next
        M2()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub

    Function M4() As Boolean
        Return False
    End Function

    Function GetString() As String
        Return "ab"
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      201 (0xc9)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                String V_3,
                Integer V_4)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.3
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.GetString() As String"
    IL_0015:  stloc.3
    IL_0016:  ldc.i4.0
    IL_0017:  stloc.s    V_4
    IL_0019:  br.s       IL_003c
    IL_001b:  ldloc.3
    IL_001c:  ldloc.s    V_4
    IL_001e:  callvirt   "Function String.get_Chars(Integer) As Char"
    IL_0023:  pop
    IL_0024:  ldc.i4.4
    IL_0025:  stloc.2
    IL_0026:  call       "Function Program.M4() As Boolean"
    IL_002b:  brtrue.s   IL_0034
    IL_002d:  ldc.i4.6
    IL_002e:  stloc.2
    IL_002f:  call       "Sub Program.M1()"
    IL_0034:  ldc.i4.7
    IL_0035:  stloc.2
    IL_0036:  ldloc.s    V_4
    IL_0038:  ldc.i4.1
    IL_0039:  add.ovf
    IL_003a:  stloc.s    V_4
    IL_003c:  ldloc.s    V_4
    IL_003e:  ldloc.3
    IL_003f:  callvirt   "Function String.get_Length() As Integer"
    IL_0044:  blt.s      IL_001b
    IL_0046:  ldc.i4.8
    IL_0047:  stloc.2
    IL_0048:  call       "Sub Program.M2()"
    IL_004d:  leave.s    IL_00c0
    IL_004f:  ldloc.1
    IL_0050:  ldc.i4.1
    IL_0051:  add
    IL_0052:  ldc.i4.0
    IL_0053:  stloc.1
    IL_0054:  switch    (
        IL_0081,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_0024,
        IL_0034,
        IL_002d,
        IL_0034,
        IL_0046,
        IL_004d)
    IL_0081:  leave.s    IL_00b5
    IL_0083:  ldloc.2
    IL_0084:  stloc.1
    IL_0085:  ldloc.0
    IL_0086:  switch    (
        IL_0093,
        IL_004f)
    IL_0093:  leave.s    IL_00b5
  }
  filter
  {
    IL_0095:  isinst     "System.Exception"
    IL_009a:  ldnull
    IL_009b:  cgt.un
    IL_009d:  ldloc.0
    IL_009e:  ldc.i4.0
    IL_009f:  cgt.un
    IL_00a1:  and
    IL_00a2:  ldloc.1
    IL_00a3:  ldc.i4.0
    IL_00a4:  ceq
    IL_00a6:  and
    IL_00a7:  endfilter
  }  // end filter
  {  // handler
    IL_00a9:  castclass  "System.Exception"
    IL_00ae:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b3:  leave.s    IL_0083
  }
  IL_00b5:  ldc.i4     0x800a0033
  IL_00ba:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00bf:  throw
  IL_00c0:  ldloc.1
  IL_00c1:  brfalse.s  IL_00c8
  IL_00c3:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c8:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      238 (0xee)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                String V_3,
                Integer V_4,
                Char V_5, //c
                Boolean V_6,
                Boolean V_7)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.GetString() As String"
    IL_001a:  stloc.3
    IL_001b:  ldc.i4.0
    IL_001c:  stloc.s    V_4
    IL_001e:  br.s       IL_004c
    IL_0020:  ldloc.3
    IL_0021:  ldloc.s    V_4
    IL_0023:  callvirt   "Function String.get_Chars(Integer) As Char"
    IL_0028:  stloc.s    V_5
    IL_002a:  ldc.i4.4
    IL_002b:  stloc.2
    IL_002c:  call       "Function Program.M4() As Boolean"
    IL_0031:  stloc.s    V_6
    IL_0033:  ldloc.s    V_6
    IL_0035:  brfalse.s  IL_003a
    IL_0037:  br.s       IL_0044
    IL_0039:  nop
    IL_003a:  nop
    IL_003b:  ldc.i4.7
    IL_003c:  stloc.2
    IL_003d:  call       "Sub Program.M1()"
    IL_0042:  nop
    IL_0043:  nop
    IL_0044:  ldc.i4.8
    IL_0045:  stloc.2
    IL_0046:  ldloc.s    V_4
    IL_0048:  ldc.i4.1
    IL_0049:  add.ovf
    IL_004a:  stloc.s    V_4
    IL_004c:  ldloc.s    V_4
    IL_004e:  ldloc.3
    IL_004f:  callvirt   "Function String.get_Length() As Integer"
    IL_0054:  clt
    IL_0056:  stloc.s    V_7
    IL_0058:  ldloc.s    V_7
    IL_005a:  brtrue.s   IL_0020
    IL_005c:  ldc.i4.s   9
    IL_005e:  stloc.2
    IL_005f:  call       "Sub Program.M2()"
    IL_0064:  nop
    IL_0065:  leave.s    IL_00e4
    IL_0067:  ldloc.1
    IL_0068:  ldc.i4.1
    IL_0069:  add
    IL_006a:  ldc.i4.0
    IL_006b:  stloc.1
    IL_006c:  switch    (
        IL_009d,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_002a,
        IL_0037,
        IL_0039,
        IL_003b,
        IL_0044,
        IL_005c,
        IL_0065)
    IL_009d:  leave.s    IL_00d9
    IL_009f:  ldloc.2
    IL_00a0:  stloc.1
    IL_00a1:  ldloc.0
    IL_00a2:  ldc.i4.s   -2
    IL_00a4:  bgt.s      IL_00a9
    IL_00a6:  ldc.i4.1
    IL_00a7:  br.s       IL_00aa
    IL_00a9:  ldloc.0
    IL_00aa:  switch    (
        IL_00b7,
        IL_0067)
    IL_00b7:  leave.s    IL_00d9
  }
  filter
  {
    IL_00b9:  isinst     "System.Exception"
    IL_00be:  ldnull
    IL_00bf:  cgt.un
    IL_00c1:  ldloc.0
    IL_00c2:  ldc.i4.0
    IL_00c3:  cgt.un
    IL_00c5:  and
    IL_00c6:  ldloc.1
    IL_00c7:  ldc.i4.0
    IL_00c8:  ceq
    IL_00ca:  and
    IL_00cb:  endfilter
  }  // end filter
  {  // handler
    IL_00cd:  castclass  "System.Exception"
    IL_00d2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d7:  leave.s    IL_009f
  }
  IL_00d9:  ldc.i4     0x800a0033
  IL_00de:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00e3:  throw
  IL_00e4:  ldloc.1
  IL_00e5:  brfalse.s  IL_00ed
  IL_00e7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ec:  nop
  IL_00ed:  ret
}
]]>)
        End Sub
 
        <Fact(), WorkItem(737273, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/737273")>
        Public Sub Resume_in_ForEach_Array_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, -1, 0}),
                      ({0, -1, 0, 0, 0}),
                      ({0, 0, -1, -1, -1, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError
        M("0")
        For Each c In GetArray()
            System.Console.WriteLine("c={0}", Microsoft.VisualBasic.Strings.AscW(c))
            M("1")
            M("2")
        Next
        M("3")
        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function GetArray() As Char()
        M("GetArray")
        Return "ab"
    End Function

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            CompileAndVerify(compilation)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation)
 
        End Sub
 
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub Resume_in_ForEach_Array_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Module Program

    Sub Main()
        On Error Resume Next
        M0()
        For Each c In GetArray()
            If M4()
                Continue For
            End If
            M1()
ContinueLabel:
        Next
        M2()
    End Sub

    Sub M0()
    End Sub

    Sub M1()
    End Sub

    Sub M2()
    End Sub

    Function M4() As Boolean
        Return False
    End Function

    Function GetArray() As Char()
        Return "ab"
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      194 (0xc2)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Char() V_3,
                Integer V_4)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  call       "Sub Program.M0()"
    IL_000e:  ldc.i4.3
    IL_000f:  stloc.2
    IL_0010:  call       "Function Program.GetArray() As Char()"
    IL_0015:  stloc.3
    IL_0016:  ldc.i4.0
    IL_0017:  stloc.s    V_4
    IL_0019:  br.s       IL_0038
    IL_001b:  ldloc.3
    IL_001c:  ldloc.s    V_4
    IL_001e:  ldelem.u2
    IL_001f:  pop
    IL_0020:  ldc.i4.4
    IL_0021:  stloc.2
    IL_0022:  call       "Function Program.M4() As Boolean"
    IL_0027:  brtrue.s   IL_0030
    IL_0029:  ldc.i4.6
    IL_002a:  stloc.2
    IL_002b:  call       "Sub Program.M1()"
    IL_0030:  ldc.i4.7
    IL_0031:  stloc.2
    IL_0032:  ldloc.s    V_4
    IL_0034:  ldc.i4.1
    IL_0035:  add.ovf
    IL_0036:  stloc.s    V_4
    IL_0038:  ldloc.s    V_4
    IL_003a:  ldloc.3
    IL_003b:  ldlen
    IL_003c:  conv.i4
    IL_003d:  blt.s      IL_001b
    IL_003f:  ldc.i4.8
    IL_0040:  stloc.2
    IL_0041:  call       "Sub Program.M2()"
    IL_0046:  leave.s    IL_00b9
    IL_0048:  ldloc.1
    IL_0049:  ldc.i4.1
    IL_004a:  add
    IL_004b:  ldc.i4.0
    IL_004c:  stloc.1
    IL_004d:  switch    (
        IL_007a,
        IL_0000,
        IL_0007,
        IL_000e,
        IL_0020,
        IL_0030,
        IL_0029,
        IL_0030,
        IL_003f,
        IL_0046)
    IL_007a:  leave.s    IL_00ae
    IL_007c:  ldloc.2
    IL_007d:  stloc.1
    IL_007e:  ldloc.0
    IL_007f:  switch    (
        IL_008c,
        IL_0048)
    IL_008c:  leave.s    IL_00ae
  }
  filter
  {
    IL_008e:  isinst     "System.Exception"
    IL_0093:  ldnull
    IL_0094:  cgt.un
    IL_0096:  ldloc.0
    IL_0097:  ldc.i4.0
    IL_0098:  cgt.un
    IL_009a:  and
    IL_009b:  ldloc.1
    IL_009c:  ldc.i4.0
    IL_009d:  ceq
    IL_009f:  and
    IL_00a0:  endfilter
  }  // end filter
  {  // handler
    IL_00a2:  castclass  "System.Exception"
    IL_00a7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ac:  leave.s    IL_007c
  }
  IL_00ae:  ldc.i4     0x800a0033
  IL_00b3:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b8:  throw
  IL_00b9:  ldloc.1
  IL_00ba:  brfalse.s  IL_00c1
  IL_00bc:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c1:  ret
}
]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.Main",
            <![CDATA[
{
  // Code size      231 (0xe7)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Char() V_3,
                Integer V_4,
                Char V_5, //c
                Boolean V_6,
                Boolean V_7)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.s   -2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.2
    IL_000c:  stloc.2
    IL_000d:  call       "Sub Program.M0()"
    IL_0012:  nop
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Program.GetArray() As Char()"
    IL_001a:  stloc.3
    IL_001b:  ldc.i4.0
    IL_001c:  stloc.s    V_4
    IL_001e:  br.s       IL_0048
    IL_0020:  ldloc.3
    IL_0021:  ldloc.s    V_4
    IL_0023:  ldelem.u2
    IL_0024:  stloc.s    V_5
    IL_0026:  ldc.i4.4
    IL_0027:  stloc.2
    IL_0028:  call       "Function Program.M4() As Boolean"
    IL_002d:  stloc.s    V_6
    IL_002f:  ldloc.s    V_6
    IL_0031:  brfalse.s  IL_0036
    IL_0033:  br.s       IL_0040
    IL_0035:  nop
    IL_0036:  nop
    IL_0037:  ldc.i4.7
    IL_0038:  stloc.2
    IL_0039:  call       "Sub Program.M1()"
    IL_003e:  nop
    IL_003f:  nop
    IL_0040:  ldc.i4.8
    IL_0041:  stloc.2
    IL_0042:  ldloc.s    V_4
    IL_0044:  ldc.i4.1
    IL_0045:  add.ovf
    IL_0046:  stloc.s    V_4
    IL_0048:  ldloc.s    V_4
    IL_004a:  ldloc.3
    IL_004b:  ldlen
    IL_004c:  conv.i4
    IL_004d:  clt
    IL_004f:  stloc.s    V_7
    IL_0051:  ldloc.s    V_7
    IL_0053:  brtrue.s   IL_0020
    IL_0055:  ldc.i4.s   9
    IL_0057:  stloc.2
    IL_0058:  call       "Sub Program.M2()"
    IL_005d:  nop
    IL_005e:  leave.s    IL_00dd
    IL_0060:  ldloc.1
    IL_0061:  ldc.i4.1
    IL_0062:  add
    IL_0063:  ldc.i4.0
    IL_0064:  stloc.1
    IL_0065:  switch    (
        IL_0096,
        IL_0002,
        IL_000b,
        IL_0013,
        IL_0026,
        IL_0033,
        IL_0035,
        IL_0037,
        IL_0040,
        IL_0055,
        IL_005e)
    IL_0096:  leave.s    IL_00d2
    IL_0098:  ldloc.2
    IL_0099:  stloc.1
    IL_009a:  ldloc.0
    IL_009b:  ldc.i4.s   -2
    IL_009d:  bgt.s      IL_00a2
    IL_009f:  ldc.i4.1
    IL_00a0:  br.s       IL_00a3
    IL_00a2:  ldloc.0
    IL_00a3:  switch    (
        IL_00b0,
        IL_0060)
    IL_00b0:  leave.s    IL_00d2
  }
  filter
  {
    IL_00b2:  isinst     "System.Exception"
    IL_00b7:  ldnull
    IL_00b8:  cgt.un
    IL_00ba:  ldloc.0
    IL_00bb:  ldc.i4.0
    IL_00bc:  cgt.un
    IL_00be:  and
    IL_00bf:  ldloc.1
    IL_00c0:  ldc.i4.0
    IL_00c1:  ceq
    IL_00c3:  and
    IL_00c4:  endfilter
  }  // end filter
  {  // handler
    IL_00c6:  castclass  "System.Exception"
    IL_00cb:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d0:  leave.s    IL_0098
  }
  IL_00d2:  ldc.i4     0x800a0033
  IL_00d7:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00dc:  throw
  IL_00dd:  ldloc.1
  IL_00de:  brfalse.s  IL_00e6
  IL_00e0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00e5:  nop
  IL_00e6:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_SyncLock_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, 0}),
                      ({0, 0, -1, 0}),
                      ({0, 0, 0, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError

        M("0")
        SyncLock CObj(GetLock())
            M("1")
            M("2")
        End SyncLock
        M("3")

        Return
OnError:
        System.Console.WriteLine("OnError - {0}", Microsoft.VisualBasic.Information.Err.GetException().GetType())
        Resume Next
    End Sub

    Function GetLock() As Object
        M("GetLock")
        Return New Object()
    End Function

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException()
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
    End Class

End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException
M(GetLock) - -1
OnError - Program+TestException
M(3) - 0
--- Test - 1
M(0) - 0
M(GetLock) - 0
M(1) - -1
OnError - Program+TestException
M(3) - 0
--- Test - 2
M(0) - 0
M(GetLock) - 0
M(1) - 0
M(2) - -1
OnError - Program+TestException
M(3) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Using_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, 0}),
                      ({0, 0, -1, 0, 0}),
                      ({0, 0, 0, -1, 0, 0}),
                      ({0, 0, -1, -1, 0}),
                      ({0, 0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError

        M("0")
        Using x = GetDisposable()
            M("1")
            M("2")
        End Using
        M("3")

        Return
OnError:
        Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
        System.Console.WriteLine("OnError - {0}{1}",
                                 ex.GetType(),
                                 If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
        Resume Next
    End Sub

    Function GetDisposable() As IDisposable
        M("GetDisposable")
        Return New Disposable()
    End Function

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class

    Class Disposable
        Implements IDisposable

        Public Sub Dispose() Implements IDisposable.Dispose
            M("Dispose")
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(GetDisposable) - -1
OnError - Program+TestException - GetDisposable
M(3) - 0
--- Test - 1
M(0) - 0
M(GetDisposable) - 0
M(1) - -1
M(Dispose) - 0
OnError - Program+TestException - 1
M(3) - 0
--- Test - 2
M(0) - 0
M(GetDisposable) - 0
M(1) - 0
M(2) - -1
M(Dispose) - 0
OnError - Program+TestException - 2
M(3) - 0
--- Test - 3
M(0) - 0
M(GetDisposable) - 0
M(1) - -1
M(Dispose) - -1
OnError - Program+TestException - Dispose
M(3) - 0
--- Test - 4
M(0) - 0
M(GetDisposable) - 0
M(1) - 0
M(2) - 0
M(Dispose) - -1
OnError - Program+TestException - Dispose
M(3) - 0
--- Test - 5
M(0) - 0
M(GetDisposable) - 0
M(1) - 0
M(2) - 0
M(Dispose) - 0
M(3) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Using_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, 0}),
                      ({0, 0, -1, 0, 0}),
                      ({0, 0, 0, -1, 0, 0, 0}),
                      ({0, 0, -1, -1, 0, 0}),
                      ({0, 0, 0, 0, -1, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, -1, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Sub Test()
        On Error GoTo OnError

        M("0")
        Using x = GetDisposable(1), y = GetDisposable(2)
            M("1")
            M("2")
        End Using
        M("3")

        Return
OnError:
        Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
        System.Console.WriteLine("OnError - {0}{1}",
                                 ex.GetType(),
                                 If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
        Resume Next
    End Sub

    Function GetDisposable(x As Integer) As IDisposable
        M("GetDisposable " & x)
        Return New Disposable(x)
    End Function

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class

    Class Disposable
        Implements IDisposable

        Private tag As Integer

        Sub New(x As Integer)
            tag = x
        End Sub

        Public Sub Dispose() Implements IDisposable.Dispose
            M("Dispose " & tag)
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(GetDisposable 1) - -1
OnError - Program+TestException - GetDisposable 1
M(3) - 0
--- Test - 1
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - -1
M(Dispose 1) - 0
OnError - Program+TestException - GetDisposable 2
M(3) - 0
--- Test - 2
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - 0
M(1) - -1
M(Dispose 2) - 0
M(Dispose 1) - 0
OnError - Program+TestException - 1
M(3) - 0
--- Test - 3
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - -1
M(Dispose 1) - -1
OnError - Program+TestException - Dispose 1
M(3) - 0
--- Test - 4
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - 0
M(1) - 0
M(2) - -1
M(Dispose 2) - 0
M(Dispose 1) - 0
OnError - Program+TestException - 2
M(3) - 0
--- Test - 5
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - 0
M(1) - 0
M(2) - 0
M(Dispose 2) - -1
M(Dispose 1) - 0
OnError - Program+TestException - Dispose 2
M(3) - 0
--- Test - 6
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - 0
M(1) - 0
M(2) - 0
M(Dispose 2) - 0
M(Dispose 1) - -1
OnError - Program+TestException - Dispose 1
M(3) - 0
--- Test - 7
M(0) - 0
M(GetDisposable 1) - 0
M(GetDisposable 2) - 0
M(1) - 0
M(2) - 0
M(Dispose 2) - 0
M(Dispose 1) - 0
M(3) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_VariableDeclaration_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0}),
                      ({0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, -1, 0}),
                      ({0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            M("0")
            Dim x1 As Integer = M("1"), y1 As Integer, z1 As Integer = M("2")
            M("3")
            Static x2 As Integer = M("4"), y2 As Integer, z2 As Integer = M("5")
            M("6")
            Dim x3, z3 As New TestException(M("7"))
            M("8")
            Static x4, z4 As New TestException(M("9"))
            M("10")
            Dim z5 As New TestException(M("11"))
            M("12")
            Static z6 As New TestException(M("13"))
            M("14")

            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - -1
OnError - Program+TestException - 2
M(3) - -1
OnError - Program+TestException - 3
M(4) - -1
OnError - Program+TestException - 4
M(5) - -1
OnError - Program+TestException - 5
M(6) - -1
OnError - Program+TestException - 6
M(7) - -1
OnError - Program+TestException - 7
M(7) - -1
OnError - Program+TestException - 7
M(8) - -1
OnError - Program+TestException - 8
M(9) - -1
OnError - Program+TestException - 9
M(9) - -1
OnError - Program+TestException - 9
M(10) - -1
OnError - Program+TestException - 10
M(11) - -1
OnError - Program+TestException - 11
M(12) - -1
OnError - Program+TestException - 12
M(13) - -1
OnError - Program+TestException - 13
M(14) - 0
--- Test - 1
M(0) - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - 0
M(3) - 0
M(4) - -1
OnError - Program+TestException - 4
M(5) - 0
M(6) - 0
M(7) - -1
OnError - Program+TestException - 7
M(7) - 0
M(8) - 0
M(9) - -1
OnError - Program+TestException - 9
M(9) - 0
M(10) - 0
M(11) - -1
OnError - Program+TestException - 11
M(12) - 0
M(13) - -1
OnError - Program+TestException - 13
M(14) - 0
--- Test - 2
M(0) - 0
M(1) - 0
M(2) - -1
OnError - Program+TestException - 2
M(3) - 0
M(4) - 0
M(5) - -1
OnError - Program+TestException - 5
M(6) - 0
M(7) - 0
M(7) - -1
OnError - Program+TestException - 7
M(8) - 0
M(9) - 0
M(9) - -1
OnError - Program+TestException - 9
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_With_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, -1, 0}),
                      ({0, -1, 0, 0, 0}),
                      ({0, 0, -1, 0, 0}),
                      ({0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            M("0")
            With M("1")
                M("2")
                M("3")
            End With
            M("4")

            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - -1
OnError - Program+TestException - 2
M(3) - -1
OnError - Program+TestException - 3
M(4) - 0
--- Test - 1
M(0) - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - 0
M(3) - 0
M(4) - 0
--- Test - 2
M(0) - 0
M(1) - 0
M(2) - -1
OnError - Program+TestException - 2
M(3) - 0
M(4) - 0
--- Test - 3
M(0) - 0
M(1) - 0
M(2) - 0
M(3) - -1
OnError - Program+TestException - 3
M(4) - 0
--- Test - 4
M(0) - 0
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_ReDim_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, 0, -1, 0}),
                      ({0, 2, -1, -1, 0}),
                      ({0, 2, -1, 2, 0}),
                      ({0, 2, 0, 2, 0}),
                      ({0, -1, 0, 2, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            Dim x = {1}
            Dim saveX = x

            Dim y = {({1})}
            Dim saveY = y(0)

            M("0")
            ReDim Preserve x(M("1")), y(M("2"))(M("3"))
            M("4")

            System.Console.WriteLine("x is {0}Changed = {1}; Content is {2}preserved",
                                     If(x Is saveX, "not ", ""),
                                     If(x Is Nothing, "NOTHING", x),
                                     If(x Is Nothing OrElse x(0) <> saveX(0), "NOT ", ""))

            System.Console.WriteLine("y(0) is {0}Changed = {1}; Content is {2}preserved",
                                     If(y(0) Is saveY, "not ", ""),
                                     If(y(0) Is Nothing, "NOTHING", y(0)),
                                     If(y(0) Is Nothing OrElse y(0)(0) <> saveY(0), "NOT ", ""))

            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - 0
M(3) - -1
OnError - Program+TestException - 3
M(4) - 0
x is not Changed = System.Int32[]; Content is preserved
y(0) is not Changed = System.Int32[]; Content is preserved
--- Test - 1
M(0) - 0
M(1) - 2
M(2) - -1
OnError - Program+TestException - 2
M(4) - -1
OnError - Program+TestException - 4
x is Changed = System.Int32[]; Content is preserved
y(0) is not Changed = System.Int32[]; Content is preserved
--- Test - 2
M(0) - 0
M(1) - 2
M(2) - -1
OnError - Program+TestException - 2
M(4) - 2
x is Changed = System.Int32[]; Content is preserved
y(0) is not Changed = System.Int32[]; Content is preserved
--- Test - 3
M(0) - 0
M(1) - 2
M(2) - 0
M(3) - 2
M(4) - 0
x is Changed = System.Int32[]; Content is preserved
y(0) is Changed = System.Int32[]; Content is preserved
--- Test - 4
M(0) - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - 0
M(3) - 2
M(4) - 0
x is not Changed = System.Int32[]; Content is preserved
y(0) is Changed = System.Int32[]; Content is preserved]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_ReDim_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, 0}),
                      ({0, -1, -1, 0}),
                      ({0, -1, 0, 0}),
                      ({0, 0, -1, 0}),
                      ({0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            Dim y = {({1})}
            Dim saveY = y(0)

            M("0")
            ReDim y(M("1"))(M("2"))
            M("3")

            System.Console.WriteLine("y(0) is {0}Changed = {1}",
                                     If(y(0) Is saveY, "not ", ""),
                                     If(y(0) Is Nothing, "NOTHING", y(0)))

            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(1) - -1
OnError - Program+TestException - 1
M(3) - -1
OnError - Program+TestException - 3
y(0) is not Changed = System.Int32[]
--- Test - 1
M(0) - 0
M(1) - -1
OnError - Program+TestException - 1
M(3) - -1
OnError - Program+TestException - 3
y(0) is not Changed = System.Int32[]
--- Test - 2
M(0) - 0
M(1) - -1
OnError - Program+TestException - 1
M(3) - 0
y(0) is not Changed = System.Int32[]
--- Test - 3
M(0) - 0
M(1) - 0
M(2) - -1
OnError - Program+TestException - 2
M(3) - 0
y(0) is not Changed = System.Int32[]
--- Test - 4
M(0) - 0
M(1) - 0
M(2) - 0
M(3) - 0
y(0) is Changed = System.Int32[]
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Erase_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, 0}),
                      ({0, 1, -1, 0}),
                      ({0, 1, 1, 0}),
                      ({0, 1, 0, 0}),
                      ({0, 0, -1, 0}),
                      ({0, 0, 1, 0}),
                      ({0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            Dim x = {({1})}

            Dim y = {({1})}

            M("0")
            Erase x(M("1")), y(M("2"))
            M("3")

            System.Console.WriteLine("x(0) is {0}Nothing", If(x(0) IsNot Nothing, "Not ", ""))
            System.Console.WriteLine("y(0) is {0}Nothing", If(y(0) IsNot Nothing, "Not ", ""))

            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - -1
OnError - Program+TestException - 2
M(3) - 0
x(0) is Not Nothing
y(0) is Not Nothing
--- Test - 1
M(0) - 0
M(1) - 1
OnError - System.IndexOutOfRangeException
M(2) - -1
OnError - Program+TestException - 2
M(3) - 0
x(0) is Not Nothing
y(0) is Not Nothing
--- Test - 2
M(0) - 0
M(1) - 1
OnError - System.IndexOutOfRangeException
M(2) - 1
OnError - System.IndexOutOfRangeException
M(3) - 0
x(0) is Not Nothing
y(0) is Not Nothing
--- Test - 3
M(0) - 0
M(1) - 1
OnError - System.IndexOutOfRangeException
M(2) - 0
M(3) - 0
x(0) is Not Nothing
y(0) is Nothing
--- Test - 4
M(0) - 0
M(1) - 0
M(2) - -1
OnError - Program+TestException - 2
M(3) - 0
x(0) is Nothing
y(0) is Not Nothing
--- Test - 5
M(0) - 0
M(1) - 0
M(2) - 1
OnError - System.IndexOutOfRangeException
M(3) - 0
x(0) is Nothing
y(0) is Not Nothing
--- Test - 6
M(0) - 0
M(1) - 0
M(2) - 0
M(3) - 0
x(0) is Nothing
y(0) is Nothing
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Erase_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, 0}),
                      ({0, 1, 0}),
                      ({0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            Dim x = {({1})}

            M("0")
            Erase x(M("1"))
            M("2")

            System.Console.WriteLine("x(0) is {0}Nothing", If(x(0) IsNot Nothing, "Not ", ""))

            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(1) - -1
OnError - Program+TestException - 1
M(2) - 0
x(0) is Not Nothing
--- Test - 1
M(0) - 0
M(1) - 1
OnError - System.IndexOutOfRangeException
M(2) - 0
x(0) is Not Nothing
--- Test - 2
M(0) - 0
M(1) - 0
M(2) - 0
x(0) is Nothing
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Goto_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({1, -1, 0}),
                      ({1, 1, 0}),
                      ({0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            If M("0") <> 0 Then
                M("1")
                GoTo Label
            End If

            M("2")
Label:
            M("3")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - 1
M(1) - -1
OnError - Program+TestException - 1
M(3) - 0
--- Test - 1
M(0) - 1
M(1) - 1
M(3) - 0
--- Test - 2
M(0) - 0
M(2) - 0
M(3) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_ExitSelect_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({0, 1, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            Select Case M("0")
                Case 0
                    If M("1") <> 0 Then
                        M("2")
                        Exit Select
                    End If

                    M("3")
            End Select

            M("4")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - 0
M(1) - 1
M(2) - -1
OnError - Program+TestException - 2
M(4) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <Fact()>
        Public Sub Resume_in_ContinueWhile_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({1, 1, -1, 0, 0}),
                      ({1, 1, -1, -1, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance
        Sub Test()
            On Error GoTo OnError

            While M("0") <> 0
                If M("1") <> 0 Then
                    M("2")
                    Continue While
                End If

                M("3")
            End While

            M("4")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.DebugExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.TestInstance.Test",
            <![CDATA[{
  // Code size      361 (0x169)
  .maxstack  4
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Exception V_3, //ex
                Boolean V_4,
                Boolean V_5)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0007:  nop
    IL_0008:  ldc.i4.2
    IL_0009:  stloc.0
    IL_000a:  br.s       IL_0040
    IL_000c:  ldc.i4.4
    IL_000d:  stloc.2
    IL_000e:  ldstr      "1"
    IL_0013:  call       "Function Program.M(String) As Integer"
    IL_0018:  ldc.i4.0
    IL_0019:  cgt.un
    IL_001b:  stloc.s    V_4
    IL_001d:  ldloc.s    V_4
    IL_001f:  brfalse.s  IL_0031
    IL_0021:  ldc.i4.5
    IL_0022:  stloc.2
    IL_0023:  ldstr      "2"
    IL_0028:  call       "Function Program.M(String) As Integer"
    IL_002d:  pop
    IL_002e:  br.s       IL_0040
    IL_0030:  nop
    IL_0031:  nop
    IL_0032:  ldc.i4.8
    IL_0033:  stloc.2
    IL_0034:  ldstr      "3"
    IL_0039:  call       "Function Program.M(String) As Integer"
    IL_003e:  pop
    IL_003f:  nop
    IL_0040:  ldc.i4.3
    IL_0041:  stloc.2
    IL_0042:  ldstr      "0"
    IL_0047:  call       "Function Program.M(String) As Integer"
    IL_004c:  ldc.i4.0
    IL_004d:  cgt.un
    IL_004f:  stloc.s    V_5
    IL_0051:  ldloc.s    V_5
    IL_0053:  brtrue.s   IL_000c
    IL_0055:  ldc.i4.s   10
    IL_0057:  stloc.2
    IL_0058:  ldstr      "4"
    IL_005d:  call       "Function Program.M(String) As Integer"
    IL_0062:  pop
    IL_0063:  br.s       IL_00c5
    IL_0065:  nop
    IL_0066:  ldc.i4.s   12
    IL_0068:  stloc.2
    IL_0069:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_006e:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_0073:  stloc.3
    IL_0074:  ldc.i4.s   13
    IL_0076:  stloc.2
    IL_0077:  ldstr      "OnError - {0}{1}"
    IL_007c:  ldloc.3
    IL_007d:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_0082:  ldloc.3
    IL_0083:  isinst     "Program.TestException"
    IL_0088:  brtrue.s   IL_0091
    IL_008a:  ldsfld     "String.Empty As String"
    IL_008f:  br.s       IL_00a6
    IL_0091:  ldstr      " - {0}"
    IL_0096:  ldloc.3
    IL_0097:  castclass  "Program.TestException"
    IL_009c:  ldfld      "Program.TestException.Value As String"
    IL_00a1:  call       "Function String.Format(String, Object) As String"
    IL_00a6:  call       "Sub System.Console.WriteLine(String, Object, Object)"
    IL_00ab:  nop
    IL_00ac:  ldc.i4.s   14
    IL_00ae:  stloc.2
    IL_00af:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00b4:  nop
    IL_00b5:  ldloc.1
    IL_00b6:  brtrue.s   IL_00c3
    IL_00b8:  ldc.i4     0x800a0014
    IL_00bd:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00c2:  throw
    IL_00c3:  br.s       IL_00ca
    IL_00c5:  leave      IL_015f
    IL_00ca:  ldloc.1
    IL_00cb:  ldc.i4.1
    IL_00cc:  add
    IL_00cd:  ldc.i4.0
    IL_00ce:  stloc.1
    IL_00cf:  switch    (
        IL_0114,
        IL_0002,
        IL_000a,
        IL_0040,
        IL_000c,
        IL_0021,
        IL_002e,
        IL_0030,
        IL_0032,
        IL_003f,
        IL_0055,
        IL_0063,
        IL_0066,
        IL_0074,
        IL_00ac,
        IL_00c5)
    IL_0114:  leave.s    IL_0154
    IL_0116:  ldloc.2
    IL_0117:  stloc.1
    IL_0118:  ldloc.0
    IL_0119:  ldc.i4.s   -2
    IL_011b:  bgt.s      IL_0120
    IL_011d:  ldc.i4.1
    IL_011e:  br.s       IL_0121
    IL_0120:  ldloc.0
    IL_0121:  switch    (
        IL_0132,
        IL_00ca,
        IL_0065)
    IL_0132:  leave.s    IL_0154
  }
  filter
  {
    IL_0134:  isinst     "System.Exception"
    IL_0139:  ldnull
    IL_013a:  cgt.un
    IL_013c:  ldloc.0
    IL_013d:  ldc.i4.0
    IL_013e:  cgt.un
    IL_0140:  and
    IL_0141:  ldloc.1
    IL_0142:  ldc.i4.0
    IL_0143:  ceq
    IL_0145:  and
    IL_0146:  endfilter
  }  // end filter
  {  // handler
    IL_0148:  castclass  "System.Exception"
    IL_014d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0152:  leave.s    IL_0116
  }
  IL_0154:  ldc.i4     0x800a0033
  IL_0159:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_015e:  throw
  IL_015f:  ldloc.1
  IL_0160:  brfalse.s  IL_0168
  IL_0162:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0167:  nop
  IL_0168:  ret
}]]>)
 
            '            Dim expected =
            '            <![CDATA[
            '--- Test - 0
            'M(0) - 1
            'M(1) - 1
            'M(2) - -1
            'OnError - Program+TestException - 2
            'M(0) - 0
            'M(4) - 0
            '--- Test - 1
            'M(0) - 1
            'M(1) - 1
            'M(2) - -1
            'OnError - Program+TestException - 2
            'M(0) - -1
            'OnError - Program+TestException - 0
            'M(1) - 0
            'M(3) - 0
            'M(0) - 0
            'M(4) - 0
            ']]>
 
            compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Program.TestInstance.Test",
            <![CDATA[
{
  // Code size      323 (0x143)
  .maxstack  4
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Exception V_3) //ex
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  br.s       IL_0033
    IL_0009:  ldc.i4.4
    IL_000a:  stloc.2
    IL_000b:  ldstr      "1"
    IL_0010:  call       "Function Program.M(String) As Integer"
    IL_0015:  brfalse.s  IL_0026
    IL_0017:  ldc.i4.5
    IL_0018:  stloc.2
    IL_0019:  ldstr      "2"
    IL_001e:  call       "Function Program.M(String) As Integer"
    IL_0023:  pop
    IL_0024:  br.s       IL_0033
    IL_0026:  ldc.i4.7
    IL_0027:  stloc.2
    IL_0028:  ldstr      "3"
    IL_002d:  call       "Function Program.M(String) As Integer"
    IL_0032:  pop
    IL_0033:  ldc.i4.3
    IL_0034:  stloc.2
    IL_0035:  ldstr      "0"
    IL_003a:  call       "Function Program.M(String) As Integer"
    IL_003f:  brtrue.s   IL_0009
    IL_0041:  ldc.i4.s   9
    IL_0043:  stloc.2
    IL_0044:  ldstr      "4"
    IL_0049:  call       "Function Program.M(String) As Integer"
    IL_004e:  pop
    IL_004f:  br.s       IL_00ac
    IL_0051:  ldc.i4.s   11
    IL_0053:  stloc.2
    IL_0054:  call       "Function Microsoft.VisualBasic.Information.Err() As Microsoft.VisualBasic.ErrObject"
    IL_0059:  callvirt   "Function Microsoft.VisualBasic.ErrObject.GetException() As System.Exception"
    IL_005e:  stloc.3
    IL_005f:  ldc.i4.s   12
    IL_0061:  stloc.2
    IL_0062:  ldstr      "OnError - {0}{1}"
    IL_0067:  ldloc.3
    IL_0068:  callvirt   "Function System.Exception.GetType() As System.Type"
    IL_006d:  ldloc.3
    IL_006e:  isinst     "Program.TestException"
    IL_0073:  brtrue.s   IL_007c
    IL_0075:  ldsfld     "String.Empty As String"
    IL_007a:  br.s       IL_0091
    IL_007c:  ldstr      " - {0}"
    IL_0081:  ldloc.3
    IL_0082:  castclass  "Program.TestException"
    IL_0087:  ldfld      "Program.TestException.Value As String"
    IL_008c:  call       "Function String.Format(String, Object) As String"
    IL_0091:  call       "Sub System.Console.WriteLine(String, Object, Object)"
    IL_0096:  ldc.i4.s   13
    IL_0098:  stloc.2
    IL_0099:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_009e:  ldloc.1
    IL_009f:  brtrue.s   IL_00b1
    IL_00a1:  ldc.i4     0x800a0014
    IL_00a6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00ab:  throw
    IL_00ac:  leave      IL_013a
    IL_00b1:  ldloc.1
    IL_00b2:  ldc.i4.1
    IL_00b3:  add
    IL_00b4:  ldc.i4.0
    IL_00b5:  stloc.1
    IL_00b6:  switch    (
        IL_00f7,
        IL_0000,
        IL_0033,
        IL_0033,
        IL_0009,
        IL_0017,
        IL_0033,
        IL_0026,
        IL_0033,
        IL_0041,
        IL_00ac,
        IL_0051,
        IL_005f,
        IL_0096,
        IL_00ac)
    IL_00f7:  leave.s    IL_012f
    IL_00f9:  ldloc.2
    IL_00fa:  stloc.1
    IL_00fb:  ldloc.0
    IL_00fc:  switch    (
        IL_010d,
        IL_00b1,
        IL_0051)
    IL_010d:  leave.s    IL_012f
  }
  filter
  {
    IL_010f:  isinst     "System.Exception"
    IL_0114:  ldnull
    IL_0115:  cgt.un
    IL_0117:  ldloc.0
    IL_0118:  ldc.i4.0
    IL_0119:  cgt.un
    IL_011b:  and
    IL_011c:  ldloc.1
    IL_011d:  ldc.i4.0
    IL_011e:  ceq
    IL_0120:  and
    IL_0121:  endfilter
  }  // end filter
  {  // handler
    IL_0123:  castclass  "System.Exception"
    IL_0128:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_012d:  leave.s    IL_00f9
  }
  IL_012f:  ldc.i4     0x800a0033
  IL_0134:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0139:  throw
  IL_013a:  ldloc.1
  IL_013b:  brfalse.s  IL_0142
  IL_013d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0142:  ret
}]]>)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_AddRaiseRemove_Event_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({-1, -1, -1, -1, -1, 0}),
                      ({0, -1, -1, -1, -1, 0}),
                      ({0, 0, -1, -1, -1, -1, 0}),
                      ({0, 0, 0, -1, -1, -1, 0}),
                      ({0, 0, 0, 0, -1, -1, 0}),
                      ({0, 0, 0, 0, 0, -1, 0}),
                      ({0, 0, 0, 0, 0, 0, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}", e.GetType())
            End Try
        Next

    End Sub

    Class TestInstance

        Private Event m_Event As Action

        Sub Test()
            On Error GoTo OnError

            M("0")
            AddHandler m_Event, GetDelegate("1")
            M("2")
            RaiseEvent m_Event()
            M("4")
            RemoveHandler m_Event, GetDelegate("5")
            M("6")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function GetDelegate(tag As String) As Action
        M("GetDelegate " & tag)
        Return AddressOf EventSub
    End Function

    Sub EventSub()
        M("Event Sub")
    End Sub

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(0) - -1
OnError - Program+TestException - 0
M(GetDelegate 1) - -1
OnError - Program+TestException - GetDelegate 1
M(2) - -1
OnError - Program+TestException - 2
M(4) - -1
OnError - Program+TestException - 4
M(GetDelegate 5) - -1
OnError - Program+TestException - GetDelegate 5
M(6) - 0
--- Test - 1
M(0) - 0
M(GetDelegate 1) - -1
OnError - Program+TestException - GetDelegate 1
M(2) - -1
OnError - Program+TestException - 2
M(4) - -1
OnError - Program+TestException - 4
M(GetDelegate 5) - -1
OnError - Program+TestException - GetDelegate 5
M(6) - 0
--- Test - 2
M(0) - 0
M(GetDelegate 1) - 0
M(2) - -1
OnError - Program+TestException - 2
M(Event Sub) - -1
OnError - Program+TestException - Event Sub
M(4) - -1
OnError - Program+TestException - 4
M(GetDelegate 5) - -1
OnError - Program+TestException - GetDelegate 5
M(6) - 0
--- Test - 3
M(0) - 0
M(GetDelegate 1) - 0
M(2) - 0
M(Event Sub) - -1
OnError - Program+TestException - Event Sub
M(4) - -1
OnError - Program+TestException - 4
M(GetDelegate 5) - -1
OnError - Program+TestException - GetDelegate 5
M(6) - 0
--- Test - 4
M(0) - 0
M(GetDelegate 1) - 0
M(2) - 0
M(Event Sub) - 0
M(4) - -1
OnError - Program+TestException - 4
M(GetDelegate 5) - -1
OnError - Program+TestException - GetDelegate 5
M(6) - 0
--- Test - 5
M(0) - 0
M(GetDelegate 1) - 0
M(2) - 0
M(Event Sub) - 0
M(4) - 0
M(GetDelegate 5) - -1
OnError - Program+TestException - GetDelegate 5
M(6) - 0
--- Test - 6
M(0) - 0
M(GetDelegate 1) - 0
M(2) - 0
M(Event Sub) - 0
M(4) - 0
M(GetDelegate 5) - 0
M(6) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_ObjectConstruction_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({0, 0, 0, 0, 0, 0, 0}),
                      ({-1}),
                      ({0, -1}),
                      ({0, 0, -1}),
                      ({0, 0, 0, -1, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Dim x = New TestInstance(0)
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}{1}", e.GetType(),
                                         If(TypeOf e Is TestException, String.Format(" - {0}", DirectCast(e, TestException).Value), String.Empty))
            End Try
        Next

    End Sub

    Class TestInstanceBase
        Sub New()
            M("TestInstanceBase.New")
        End Sub
    End Class

    Class TestInstance
        Inherits TestInstanceBase

        Dim m_x As Integer = M("X")
        Dim m_y As Integer = M("Y")

        Sub New()
            MyBase.New()
            On Error GoTo OnError
            M("TestInstance.New 1")
            M("TestInstance.New 2")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("TestInstance.New OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub

        Sub New(x As Integer)
            Me.New()
            On Error GoTo OnError

            M("TestInstance.New(x As Integer) 1")
            M("TestInstance.New(x As Integer) 2")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("TestInstance.New(x As Integer) OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - 0
M(TestInstance.New 1) - 0
M(TestInstance.New 2) - 0
M(TestInstance.New(x As Integer) 1) - 0
M(TestInstance.New(x As Integer) 2) - 0
--- Test - 1
M(TestInstanceBase.New) - -1
Exception - Program+TestException - TestInstanceBase.New
--- Test - 2
M(TestInstanceBase.New) - 0
M(X) - -1
Exception - Program+TestException - X
--- Test - 3
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - -1
Exception - Program+TestException - Y
--- Test - 4
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - 0
M(TestInstance.New 1) - -1
TestInstance.New OnError - Program+TestException - TestInstance.New 1
M(TestInstance.New 2) - 0
M(TestInstance.New(x As Integer) 1) - 0
M(TestInstance.New(x As Integer) 2) - 0
--- Test - 5
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - 0
M(TestInstance.New 1) - 0
M(TestInstance.New 2) - 0
M(TestInstance.New(x As Integer) 1) - -1
TestInstance.New(x As Integer) OnError - Program+TestException - TestInstance.New(x As Integer) 1
M(TestInstance.New(x As Integer) 2) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_ObjectConstruction_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({0, 0, 0, 0, 0}),
                      ({-1}),
                      ({0, -1}),
                      ({0, 0, -1}),
                      ({0, 0, 0, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Dim x = New TestInstance()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}{1}", e.GetType(),
                                         If(TypeOf e Is TestException, String.Format(" - {0}", DirectCast(e, TestException).Value), String.Empty))
            End Try
        Next

    End Sub

    Class TestInstanceBase
        Sub New()
            M("TestInstanceBase.New")
        End Sub
    End Class

    Class TestInstance
        Inherits TestInstanceBase

        Dim m_x As Integer = M("X")
        Dim m_y As Integer = M("Y")

        Sub New()
            On Error GoTo OnError
            M("TestInstance.New 1")
            M("TestInstance.New 2")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("TestInstance.New OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - 0
M(TestInstance.New 1) - 0
M(TestInstance.New 2) - 0
--- Test - 1
M(TestInstanceBase.New) - -1
Exception - Program+TestException - TestInstanceBase.New
--- Test - 2
M(TestInstanceBase.New) - 0
M(X) - -1
Exception - Program+TestException - X
--- Test - 3
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - -1
Exception - Program+TestException - Y
--- Test - 4
M(TestInstanceBase.New) - 0
M(X) - 0
M(Y) - 0
M(TestInstance.New 1) - -1
TestInstance.New OnError - Program+TestException - TestInstance.New 1
M(TestInstance.New 2) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_TypeInitialization_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({0, 0, -1, 0, -1})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Dim x As New TestInstance()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}{1}", e.GetType(),
                                         If(TypeOf e Is TestException, String.Format(" - {0}", DirectCast(e, TestException).Value), String.Empty))
            End Try
        Next

    End Sub

    Class TestInstanceBase
        Shared m_v As Integer = M("V")
        Shared m_w As Integer = M("W")

        Shared Sub New()
            On Error GoTo OnError
            M("TestInstanceBase.New 1")
            M("TestInstanceBase.New 2")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("TestInstanceBase.New OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Class TestInstance
        Inherits TestInstanceBase

        Shared m_x As Integer = M("X")
        Shared m_y As Integer = M("Y")

        Shared Sub New()
            On Error GoTo OnError
            M("TestInstance.New 1")
            M("TestInstance.New 2")
            Return
OnError:
            Dim ex = Microsoft.VisualBasic.Information.Err.GetException()
            System.Console.WriteLine("TestInstance.New OnError - {0}{1}",
                                     ex.GetType(),
                                     If(TypeOf ex Is TestException, String.Format(" - {0}", DirectCast(ex, TestException).Value), String.Empty))
            Resume Next
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(X) - 0
M(Y) - 0
M(TestInstance.New 1) - -1
TestInstance.New OnError - Program+TestException - TestInstance.New 1
M(TestInstance.New 2) - 0
M(V) - -1
Exception - System.TypeInitializationException
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Resume_in_Lambda_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Program
    Private state As Integer()
    Private current As Integer

    Sub Main()
        Dim states = {({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}),
                      ({-1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0}),
                      ({0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0})
                     }

        For i As Integer = 0 To states.Length - 1
            System.Console.WriteLine("--- Test - {0}", i)
            state = states(i)
            current = 0
            Try
                Call (New TestInstance()).Test()
            Catch e As Exception
                System.Console.WriteLine("Exception - {0}{1}", e.GetType(),
                                         If(TypeOf e Is TestException, String.Format(" - {0}", DirectCast(e, TestException).Value), String.Empty))
            End Try
        Next

    End Sub


    Class TestInstance

        Sub Test()
            On Error Resume Next
            M("1")
            Dim x = Function() M("6")
            M("2")
            Dim y = Function()
                        M("8")
                        Return M("9")
                    End Function
            M("3")
            Dim v = Sub() M("11")
            M("4")
            Dim w = Sub()
                        M("13")
                        M("14")
                    End Sub
            M("5")

            If x IsNot Nothing Then
                x()
            End If
            M("7")
            If y IsNot Nothing Then
                y()
            End If
            M("10")
            If v IsNot Nothing Then
                v()
            End If
            M("12")
            If w IsNot Nothing Then
                w()
            End If
            M("15")
        End Sub
    End Class

    Function M(tag As String) As Integer
        If current >= state.Length Then
            System.Console.WriteLine("Test issue.")
            Return 0
        End If

        Dim val = state(current)
        current += 1
        System.Console.WriteLine("M({0}) - {1}", tag, val)
        If val = -1 Then
            Throw New TestException(tag)
        End If

        Return val
    End Function

    Class TestException
        Inherits Exception
        Public ReadOnly Value As String

        Sub New(x As String)
            Value = x
        End Sub
    End Class
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
--- Test - 0
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 1
M(1) - -1
M(2) - -1
M(3) - -1
M(4) - -1
M(5) - -1
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 2
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - -1
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 3
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - -1
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 4
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - -1
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 5
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - -1
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 6
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - -1
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 7
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - -1
M(12) - 0
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 8
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - -1
M(13) - 0
M(14) - 0
M(15) - 0
--- Test - 9
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - -1
M(15) - 0
--- Test - 10
M(1) - 0
M(2) - 0
M(3) - 0
M(4) - 0
M(5) - 0
M(6) - 0
M(7) - 0
M(8) - 0
M(9) - 0
M(10) - 0
M(11) - 0
M(12) - 0
M(13) - 0
M(14) - -1
M(15) - 0
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Class TestOnError1

    Sub test1()
        Resume ' 1

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test1()
        Dim x4 = Sub()
                     test1()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test1
Label:
    End Sub

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36595: Method cannot contain both a 'Resume' statement and a definition of a variable that is used in a lambda or query expression.
        Resume ' 1
        ~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_2()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Class TestOnError1

    Sub test2()
        Resume Next ' 2

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test2()
        Dim x4 = Sub()
                     test2()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test2
Label:
    End Sub

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36595: Method cannot contain both a 'Resume Next' statement and a definition of a variable that is used in a lambda or query expression.
        Resume Next ' 2
        ~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_3()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Class TestOnError1

    Sub test3()
        On Error Resume Next ' 3

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test3()
        Dim x4 = Sub()
                     test3()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test3
Label:
    End Sub

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36595: Method cannot contain both a 'On Error Resume Next' statement and a definition of a variable that is used in a lambda or query expression.
        On Error Resume Next ' 3
        ~~~~~~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_4()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Class TestOnError1

    Sub test4()
        On Error Goto Label ' 4

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test4()
        Dim x4 = Sub()
                     test4()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test4
Label:
    End Sub

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36597: 'On Error Goto Label' is not valid because 'Label' is inside a scope that defines a variable that is used in a lambda or query expression.
        On Error Goto Label ' 4
        ~~~~~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_5()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1

    SHared Sub test0()
        Resume
        Resume Next
        Resume Label
        On Error Resume Next
        On Error GoTo 0
        On Error GoTo -1
        On Error Goto Label

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test0()
        Dim x4 = Sub()
                     test0()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test0
Label:
    End Sub

    Sub test5()
        On Error Goto 0 ' 5

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test5()
        Dim x4 = Sub()
                     test5()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test5
Label:
    End Sub

    Sub test6()
        On Error Goto -1 ' 6

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test6()
        Dim x4 = Sub()
                     test6()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test6
Label:
    End Sub

    Sub test7()
        Resume Label ' 7

        Dim x1 = Function() 1
        Dim x2 = Function()
                     Return 1
                 End Function
        Dim x3 = Sub() test7()
        Dim x4 = Sub()
                     test7()
                 End Sub

        Dim x5 As System.Action(Of Integer) = AddressOf test7
Label:
    End Sub

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
 
            AssertTheseDiagnostics(compilation,
<expected>
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_6()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1

    Sub test0()
        On Error Resume Next

        If Expr1() <> 0 Then
            On Error GoTo 0
            Dim x As Integer = 9 ' System.NullReferenceException - closure is not initialized.
            Dim y = Function() x
            Dim z = y()
        End If
    End Sub

    Function Expr1() As Integer
        Throw New NotImplementedException()
    End Function

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36595: Method cannot contain both a 'On Error Resume Next' statement and a definition of a variable that is used in a lambda or query expression.
        On Error Resume Next
        ~~~~~~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_7()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1

    Shared Sub Main()
        On Error Goto Label

        If Expr1() <> 0 Then
            Dim x As Integer = 9 
            Dim y = Function() x
            System.Console.WriteLine(y())
        End If

Label:
    End Sub

    Shared Function Expr1() As Integer
        Throw New NotImplementedException()
    End Function

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_8()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1

    Shared Sub Main()
        On Error Goto Label

        If Expr1() <> 0 Then
Label2:
            Dim x As Integer = 9 
            Dim y = Function() x
            System.Console.WriteLine(y())
        End If

Label:
        Resume Label2
    End Sub

    Shared Function Expr1() As Integer
        Throw New NotImplementedException()
    End Function

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36597: 'Resume Label2' is not valid because 'Label2' is inside a scope that defines a variable that is used in a lambda or query expression.
        Resume Label2
        ~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub Resume_in_Lambda_9()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1

    Shared Sub Main()
        On Error Goto Label2

        If Expr1() <> 0 Then
Label2:
            Dim x As Integer = 9 
            Dim y = Function() x
            System.Console.WriteLine(y())
        End If
    End Sub

    Shared Function Expr1() As Integer
        Throw New NotImplementedException()
    End Function

End Class
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC36597: 'On Error Goto Label2' is not valid because 'Label2' is inside a scope that defines a variable that is used in a lambda or query expression.
        On Error Goto Label2
        ~~~~~~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorStatement_0()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System
Imports Microsoft.VisualBasic.Constants

Module Program
    Sub Main()
        Dim saveCulture = System.Threading.Thread.CurrentThread.CurrentCulture
        Dim saveUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture
        System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture
        Try
            Error 20
        Catch ex As Exception
            System.Console.WriteLine(ex.ToString().Split(vbCr & vbLf)(0))
        Finally
            System.Threading.Thread.CurrentThread.CurrentCulture = saveCulture
            System.Threading.Thread.CurrentThread.CurrentUICulture = saveUICulture
        End Try
    End Sub
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
System.InvalidOperationException: Resume without error.
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorStatement_1()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System
Imports Microsoft.VisualBasic.Constants

Module Program
    Sub Main()
        Error New NotImplementedException()
    End Sub
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC30311: Value of type 'NotImplementedException' cannot be converted to 'Integer'.
        Error New NotImplementedException()
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub ErrorStatement_2()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Class Program
    Shared Sub Main()
        Error 20
    End Sub
End Class
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40(source, options:=TestOptions.ReleaseExe)
            AssertTheseEmitDiagnostics(compilation,
<expected>
BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError' is not defined.
        Error 20
        ~~~~~~~~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub UnusedLocal()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1


    Sub test1()
        Dim x As Object ' 1
        Static y As Object ' 1
        Const z As String = "a" ' 1

        Return
Label:
    End Sub

    Sub test2()
        Dim x As Object ' 2
        Static y As Object ' 2
        Const z As String = "a" ' 2

        On Error GoTo 0
        Return
Label:
    End Sub

    Sub test3()
        Dim x As Object ' 3
        Static y As Object ' 3
        Const z As String = "a" ' 3

        On Error GoTo -1
        Return
Label:
    End Sub

    Sub test4()
        Dim x As Object ' 4
        Static y As Object ' 4
        Const z As String = "a" ' 4

        On Error GoTo Label
        Return
Label:
    End Sub

    Sub test5()
        Dim x As Object ' 5
        Static y As Object ' 5
        Const z As String = "a" ' 5

        On Error Resume Next
        Return
Label:
    End Sub

    Sub test6()
        Dim x As Object ' 6
        Static y As Object ' 6
        Const z As String = "a" ' 6

        Resume
        Return
Label:
    End Sub

    Sub test7()
        Dim x As Object ' 7
        Static y As Object ' 7
        Const z As String = "a" ' 7

        Resume Next
        Return
Label:
    End Sub

    Sub test8()
        Dim x As Object ' 8
        Static y As Object ' 8
        Const z As String = "a" ' 8

        Resume Label
        Return
Label:
    End Sub
End Class
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC42024: Unused local variable: 'x'.
        Dim x As Object ' 1
            ~
BC42024: Unused local variable: 'y'.
        Static y As Object ' 1
               ~
BC42099: Unused local constant: 'z'.
        Const z As String = "a" ' 1
              ~
</expected>)
        End Sub
 
        <Fact()>
        Public Sub MissingReturn()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Class TestOnError1


    Function test1() As Object
Label:
    End Function ' 1

    Function test2() As Object

        On Error GoTo 0
Label:
    End Function ' 2

    Function test3() As Object

        On Error GoTo -1
Label:
    End Function ' 3

    Function test4() As Object

        On Error GoTo Label
Label:
    End Function ' 4

    Function test5() As Object

        On Error Resume Next
Label:
    End Function ' 5

    Function test6() As Object

        Resume
Label:
    End Function ' 6

    Function test7() As Object

        Resume Next
Label:
    End Function ' 7

    Function test8() As Object

        Resume Label
Label:
    End Function ' 8
End Class
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseDll)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC42105: Function 'test1' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.
    End Function ' 1
    ~~~~~~~~~~~~
</expected>)
        End Sub
 
        <WorkItem(547095, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/547095")>
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Bug17937()
            Dim source =
<compilation name="AscW">
    <file name="a.vb">
        <![CDATA[
Imports System
Module Program
    Sub Main()
        Dim x As New Object
        On Error GoTo trap

        Throw New Exception
        Console.WriteLine("after throw")
        Exit Sub
trap:
        SyncLock x
            Console.WriteLine("hello")
            Resume Next
        End SyncLock
    End Sub
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim expected =
            <![CDATA[
hello
after throw
]]>
 
            CompileAndVerify(compilation, expectedOutput:=expected)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub SingleLabelErrorHandler()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Module1
    Sub Main()
        Dim sPath As String = ""
        sPath = "Test2"
        On Error GoTo goo
        Error 5
        Console.WriteLine(sPath)
        Exit Sub
gooReturn:
        sPath &= "gooReturn"
        Console.WriteLine(sPath)
        Exit Sub
goo:
        sPath &= "goo"
        Resume Next 'Resume Next
    End Sub
End Module

        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="Test2goo")
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
            CompileAndVerify(compilation, expectedOutput:="Test2goo")
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub MultipleLabelErrorHandler()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Module1
    Sub Main()
        Dim sPath As String = ""
        sPath = "Test3"
        On Error GoTo goo
        Error 5
        Exit Sub
gooReturn:
        sPath &= "gooReturn"
        Console.WriteLine(sPath)
        Exit Sub
goo:
        sPath &= "goo"
        Resume gooReturn 'Resume with Label
    End Sub

End Module

        ]]>
    </file>
</compilation>
 
            'Just to verify with/without optimizations
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="Test3googooReturn")
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
            CompileAndVerify(compilation, expectedOutput:="Test3googooReturn")
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_In_Single_Method_With_Resume_Next()
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Module1
    Sub Main()
        Dim sPath As String = ""
        sPath = "Start"
        On Error Resume Next
        Error 5
        Console.WriteLine(sPath)
        Console.WriteLine("End")
        Exit Sub
gooReturn:
        sPath &= "gooReturn"
        Console.WriteLine(sPath)
        Exit Sub
goo:
        sPath &= "goo"
        Resume gooReturn 'Resume with Line    
    End Sub
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[Start
End]]>)
 
            compilation = compilation.WithOptions(TestOptions.DebugExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[Start
End]]>)
        End Sub
 
        <Fact()>
        Public Sub OnError_In_Single_Method_With_Goto_0()
            'IL Baseline check only as it will fail with an unhandled exception at runtime
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
Imports System

Module Module1
    Sub Main()
        Dim sPath As String = ""
        sPath = "Test4"
        On Error GoTo 0
        Error 5 '<- Will error here on unhandled exception

        Console.WriteLine(sPath)
        Exit Sub
gooReturn:
        sPath &= "gooReturn"
        Console.WriteLine(sPath)
        Exit Sub
goo:
        sPath &= "goo"
        Resume gooReturn 'Resume with Line    
    End Sub
End Module
        ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size       87 (0x57)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                String V_2) //sPath
  .try
{
  IL_0000:  ldstr      ""
  IL_0005:  stloc.2
  IL_0006:  ldstr      "Test4"
  IL_000b:  stloc.2
  IL_000c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0011:  ldc.i4.0
  IL_0012:  stloc.0
  IL_0013:  ldc.i4.5
  IL_0014:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0019:  throw
  IL_001a:  ldc.i4.m1
  IL_001b:  stloc.1
  IL_001c:  ldloc.0
  IL_001d:  switch    (
  IL_002a,
  IL_002a)
  IL_002a:  leave.s    IL_004c
}
  filter
{
  IL_002c:  isinst     "System.Exception"
  IL_0031:  ldnull
  IL_0032:  cgt.un
  IL_0034:  ldloc.0
  IL_0035:  ldc.i4.0
  IL_0036:  cgt.un
  IL_0038:  and
  IL_0039:  ldloc.1
  IL_003a:  ldc.i4.0
  IL_003b:  ceq
  IL_003d:  and
  IL_003e:  endfilter
}  // end filter
{  // handler
  IL_0040:  castclass  "System.Exception"
  IL_0045:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_004a:  leave.s    IL_001a
}
  IL_004c:  ldc.i4     0x800a0033
  IL_0051:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0056:  throw
}]]>)
        End Sub
 
        <Fact()>
        Public Sub OnError_In_Single_Method_With_Goto_Minus1()
            'IL Baseline check only as it will fail with an unhandled exception at runtime
 
            Dim source =
<compilation name="ErrorHandling">
    <file name="a.vb">
        <![CDATA[
        Imports System

Module Module1
    Public Sub Main()
        Dim sPath As String = ""
        sPath = "Test4"
        On Error GoTo -1
        Error 5 '<- will error here as unhandled exception
        Console.WriteLine(sPath)
        Exit Sub
gooReturn:
        sPath &= "gooReturn"
        Console.WriteLine(sPath)
        Exit Sub
goo:
        sPath &= "goo"
        Resume gooReturn 'Resume with Line    
    End Sub
End Module
                ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size       87 (0x57)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                String V_2) //sPath
  .try
{
  IL_0000:  ldstr      ""
  IL_0005:  stloc.2
  IL_0006:  ldstr      "Test4"
  IL_000b:  stloc.2
  IL_000c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0011:  ldc.i4.0
  IL_0012:  stloc.1
  IL_0013:  ldc.i4.5
  IL_0014:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0019:  throw
  IL_001a:  ldc.i4.m1
  IL_001b:  stloc.1
  IL_001c:  ldloc.0
  IL_001d:  switch    (
  IL_002a,
  IL_002a)
  IL_002a:  leave.s    IL_004c
}
  filter
{
  IL_002c:  isinst     "System.Exception"
  IL_0031:  ldnull
  IL_0032:  cgt.un
  IL_0034:  ldloc.0
  IL_0035:  ldc.i4.0
  IL_0036:  cgt.un
  IL_0038:  and
  IL_0039:  ldloc.1
  IL_003a:  ldc.i4.0
  IL_003b:  ceq
  IL_003d:  and
  IL_003e:  endfilter
}  // end filter
{  // handler
  IL_0040:  castclass  "System.Exception"
  IL_0045:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_004a:  leave.s    IL_001a
}
  IL_004c:  ldc.i4     0x800a0033
  IL_0051:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0056:  throw
}]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub Multi_OnError_In_Single_Method_1()
            'This will work because of the correct reset of event handler and using Throw rather than Error 
            'statement to trigger the Errors
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        Dim sb As String = ""

        On Error GoTo goo

        Throw New Exception()
        Exit Sub
goo:
        On Error GoTo -1
        Console.WriteLine("goo")
        On Error GoTo bar
        Throw New Exception()
        GoTo EndSection
        Exit Sub
bar:
        On Error GoTo -1
        Console.WriteLine("bar")
        On Error GoTo zoo
        Throw New Exception()
        GoTo EndSection
        Exit Sub
zoo:
        On Error GoTo -1
        Console.WriteLine("zoo")        
EndSection:
        Console.WriteLine("EndSection")        
        Exit Sub
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[goo
bar
zoo
EndSection]]>)
        End Sub
 
        <Fact()>
        Public Sub Multi_OnError_In_Single_Method_2()
            'This will fail at 2nd call as handler has not been reset correctly
            ' So we will only IL Baseline this 
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        On Error GoTo goo
        Throw New Exception()
        Exit Sub
goo:
        On Error GoTo 0
        Console.Write("goo")
        On Error GoTo bar
        Throw New Exception() '<- Unhandled Exception Here
        GoTo EndSection
        Exit Sub
bar:
        On Error GoTo 0
        Console.Write("bar")
        On Error GoTo zoo
        Throw New Exception()
        GoTo EndSection
        Exit Sub
zoo:
        On Error GoTo 0
        Console.Write("zoo")
EndSection:
        Console.Write("EndSection")
        Exit Sub
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size      184 (0xb8)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.2
  IL_0006:  stloc.0
  IL_0007:  newobj     "Sub System.Exception..ctor()"
  IL_000c:  throw
  IL_000d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0012:  ldc.i4.0
  IL_0013:  stloc.0
  IL_0014:  ldstr      "goo"
  IL_0019:  call       "Sub System.Console.Write(String)"
  IL_001e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0023:  ldc.i4.3
  IL_0024:  stloc.0
  IL_0025:  newobj     "Sub System.Exception..ctor()"
  IL_002a:  throw
  IL_002b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0030:  ldc.i4.0
  IL_0031:  stloc.0
  IL_0032:  ldstr      "bar"
  IL_0037:  call       "Sub System.Console.Write(String)"
  IL_003c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0041:  ldc.i4.4
  IL_0042:  stloc.0
  IL_0043:  newobj     "Sub System.Exception..ctor()"
  IL_0048:  throw
  IL_0049:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_004e:  ldc.i4.0
  IL_004f:  stloc.0
  IL_0050:  ldstr      "zoo"
  IL_0055:  call       "Sub System.Console.Write(String)"
  IL_005a:  ldstr      "EndSection"
  IL_005f:  call       "Sub System.Console.Write(String)"
  IL_0064:  leave.s    IL_00af
  IL_0066:  ldc.i4.m1
  IL_0067:  stloc.1
  IL_0068:  ldloc.0
  IL_0069:  switch    (
  IL_0082,
  IL_0082,
  IL_000d,
  IL_002b,
  IL_0049)
  IL_0082:  leave.s    IL_00a4
}
  filter
{
  IL_0084:  isinst     "System.Exception"
  IL_0089:  ldnull
  IL_008a:  cgt.un
  IL_008c:  ldloc.0
  IL_008d:  ldc.i4.0
  IL_008e:  cgt.un
  IL_0090:  and
  IL_0091:  ldloc.1
  IL_0092:  ldc.i4.0
  IL_0093:  ceq
  IL_0095:  and
  IL_0096:  endfilter
}  // end filter
{  // handler
  IL_0098:  castclass  "System.Exception"
  IL_009d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00a2:  leave.s    IL_0066
}
  IL_00a4:  ldc.i4     0x800a0033
  IL_00a9:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00ae:  throw
  IL_00af:  ldloc.1
  IL_00b0:  brfalse.s  IL_00b7
  IL_00b2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00b7:  ret
}]]>)
        End Sub
 
        <Fact()>
        Public Sub Multi_OnError_In_Single_Method_3()
            'This will fail at 2nd call as handler has not been reset correctly
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        On Error GoTo goo
        Throw New Exception()
        Exit Sub
goo:
        Console.Write("goo")
        On Error GoTo bar
        Throw New Exception() '<- Unhandled Exception Here
        GoTo EndSection
        Exit Sub
bar:
        Console.Write("bar")
        On Error GoTo zoo
        Throw New Exception()
        GoTo EndSection
        Exit Sub
zoo:
        Console.Write("zoo")
EndSection:
        Console.Write("EndSection")
        Exit Sub
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size      163 (0xa3)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.2
  IL_0006:  stloc.0
  IL_0007:  newobj     "Sub System.Exception..ctor()"
  IL_000c:  throw
  IL_000d:  ldstr      "goo"
  IL_0012:  call       "Sub System.Console.Write(String)"
  IL_0017:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_001c:  ldc.i4.3
  IL_001d:  stloc.0
  IL_001e:  newobj     "Sub System.Exception..ctor()"
  IL_0023:  throw
  IL_0024:  ldstr      "bar"
  IL_0029:  call       "Sub System.Console.Write(String)"
  IL_002e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0033:  ldc.i4.4
  IL_0034:  stloc.0
  IL_0035:  newobj     "Sub System.Exception..ctor()"
  IL_003a:  throw
  IL_003b:  ldstr      "zoo"
  IL_0040:  call       "Sub System.Console.Write(String)"
  IL_0045:  ldstr      "EndSection"
  IL_004a:  call       "Sub System.Console.Write(String)"
  IL_004f:  leave.s    IL_009a
  IL_0051:  ldc.i4.m1
  IL_0052:  stloc.1
  IL_0053:  ldloc.0
  IL_0054:  switch    (
  IL_006d,
  IL_006d,
  IL_000d,
  IL_0024,
  IL_003b)
  IL_006d:  leave.s    IL_008f
}
  filter
{
  IL_006f:  isinst     "System.Exception"
  IL_0074:  ldnull
  IL_0075:  cgt.un
  IL_0077:  ldloc.0
  IL_0078:  ldc.i4.0
  IL_0079:  cgt.un
  IL_007b:  and
  IL_007c:  ldloc.1
  IL_007d:  ldc.i4.0
  IL_007e:  ceq
  IL_0080:  and
  IL_0081:  endfilter
}  // end filter
{  // handler
  IL_0083:  castclass  "System.Exception"
  IL_0088:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_008d:  leave.s    IL_0051
}
  IL_008f:  ldc.i4     0x800a0033
  IL_0094:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0099:  throw
  IL_009a:  ldloc.1
  IL_009b:  brfalse.s  IL_00a2
  IL_009d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a2:  ret
}]]>)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_With_Explicit_Throw()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
    On Error GoTo Handler
    Console.Write("Start")
    Throw New DivideByZeroException()
    exit Sub
Handler:
    Console.Write("Handler")
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="StartHandler")
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_With_Explicit_Error()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
    On Error GoTo Handler
    Console.Write("Start")
    Error 5
    exit Sub
Handler:
    Console.Write("Handler")
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="StartHandler")
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_Resume_Next_With_Explicit_Error()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
    On Error Resume Next
    Console.Write("Start")
    Error 5
    exit Sub
Handler:
    Console.Write("Handler")
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="Start")
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_Resume_Next_With_Explicit_Exception()
            'This ensures that the Handler is not called
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
    On Error Resume Next
    Console.Write("Start")
    Throw New DivideByZeroException()
    exit Sub
Handler:
    Console.Write("Handler")
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Start]]>)
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size      151 (0x97)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.1
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.2
  IL_0009:  ldstr      "Start"
  IL_000e:  call       "Sub System.Console.Write(String)"
  IL_0013:  ldc.i4.3
  IL_0014:  stloc.2
  IL_0015:  newobj     "Sub System.DivideByZeroException..ctor()"
  IL_001a:  throw
  IL_001b:  ldc.i4.5
  IL_001c:  stloc.2
  IL_001d:  ldstr      "Handler"
  IL_0022:  call       "Sub System.Console.Write(String)"
  IL_0027:  leave.s    IL_008e
  IL_0029:  ldloc.1
  IL_002a:  ldc.i4.1
  IL_002b:  add
  IL_002c:  ldc.i4.0
  IL_002d:  stloc.1
  IL_002e:  switch    (
  IL_004f,
  IL_0000,
  IL_0007,
  IL_0013,
  IL_0027,
  IL_001b,
  IL_0027)
  IL_004f:  leave.s    IL_0083
  IL_0051:  ldloc.2
  IL_0052:  stloc.1
  IL_0053:  ldloc.0
  IL_0054:  switch    (
  IL_0061,
  IL_0029)
  IL_0061:  leave.s    IL_0083
}
  filter
{
  IL_0063:  isinst     "System.Exception"
  IL_0068:  ldnull
  IL_0069:  cgt.un
  IL_006b:  ldloc.0
  IL_006c:  ldc.i4.0
  IL_006d:  cgt.un
  IL_006f:  and
  IL_0070:  ldloc.1
  IL_0071:  ldc.i4.0
  IL_0072:  ceq
  IL_0074:  and
  IL_0075:  endfilter
}  // end filter
{  // handler
  IL_0077:  castclass  "System.Exception"
  IL_007c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0081:  leave.s    IL_0051
}
  IL_0083:  ldc.i4     0x800a0033
  IL_0088:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_008d:  throw
  IL_008e:  ldloc.1
  IL_008f:  brfalse.s  IL_0096
  IL_0091:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0096:  ret
}]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_Resume_Next_With_Explicit_Exception_AndLabel_Next()
            'This ensures that the Handler is not called
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
    On Error Resume Next
    Console.Write("Start")
    Throw New DivideByZeroException()
    exit Sub
[Next]:
    Console.Write("Handler")
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Start]]>)
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size      151 (0x97)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.1
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.2
  IL_0009:  ldstr      "Start"
  IL_000e:  call       "Sub System.Console.Write(String)"
  IL_0013:  ldc.i4.3
  IL_0014:  stloc.2
  IL_0015:  newobj     "Sub System.DivideByZeroException..ctor()"
  IL_001a:  throw
  IL_001b:  ldc.i4.5
  IL_001c:  stloc.2
  IL_001d:  ldstr      "Handler"
  IL_0022:  call       "Sub System.Console.Write(String)"
  IL_0027:  leave.s    IL_008e
  IL_0029:  ldloc.1
  IL_002a:  ldc.i4.1
  IL_002b:  add
  IL_002c:  ldc.i4.0
  IL_002d:  stloc.1
  IL_002e:  switch    (
  IL_004f,
  IL_0000,
  IL_0007,
  IL_0013,
  IL_0027,
  IL_001b,
  IL_0027)
  IL_004f:  leave.s    IL_0083
  IL_0051:  ldloc.2
  IL_0052:  stloc.1
  IL_0053:  ldloc.0
  IL_0054:  switch    (
  IL_0061,
  IL_0029)
  IL_0061:  leave.s    IL_0083
}
  filter
{
  IL_0063:  isinst     "System.Exception"
  IL_0068:  ldnull
  IL_0069:  cgt.un
  IL_006b:  ldloc.0
  IL_006c:  ldc.i4.0
  IL_006d:  cgt.un
  IL_006f:  and
  IL_0070:  ldloc.1
  IL_0071:  ldc.i4.0
  IL_0072:  ceq
  IL_0074:  and
  IL_0075:  endfilter
}  // end filter
{  // handler
  IL_0077:  castclass  "System.Exception"
  IL_007c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0081:  leave.s    IL_0051
}
  IL_0083:  ldc.i4     0x800a0033
  IL_0088:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_008d:  throw
  IL_008e:  ldloc.1
  IL_008f:  brfalse.s  IL_0096
  IL_0091:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0096:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_Resume_Next_With_Explicit_Exception_2()
            'This ensures that the Handler is not called as the current handler should be the last one
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        On Error GoTo Handler
        On Error Resume Next

        Console.Write("Start")
        Throw New DivideByZeroException()
        Exit Sub
Handler:
        Console.Write("Handler")
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Start]]>)
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[{
  // Code size      166 (0xa6)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.2
  IL_0006:  stloc.0
  IL_0007:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000c:  ldc.i4.1
  IL_000d:  stloc.0
  IL_000e:  ldc.i4.3
  IL_000f:  stloc.2
  IL_0010:  ldstr      "Start"
  IL_0015:  call       "Sub System.Console.Write(String)"
  IL_001a:  ldc.i4.4
  IL_001b:  stloc.2
  IL_001c:  newobj     "Sub System.DivideByZeroException..ctor()"
  IL_0021:  throw
  IL_0022:  ldc.i4.6
  IL_0023:  stloc.2
  IL_0024:  ldstr      "Handler"
  IL_0029:  call       "Sub System.Console.Write(String)"
  IL_002e:  leave.s    IL_009d
  IL_0030:  ldloc.1
  IL_0031:  ldc.i4.1
  IL_0032:  add
  IL_0033:  ldc.i4.0
  IL_0034:  stloc.1
  IL_0035:  switch    (
  IL_005a,
  IL_0000,
  IL_0007,
  IL_000e,
  IL_001a,
  IL_002e,
  IL_0022,
  IL_002e)
  IL_005a:  leave.s    IL_0092
  IL_005c:  ldloc.2
  IL_005d:  stloc.1
  IL_005e:  ldloc.0
  IL_005f:  switch    (
  IL_0070,
  IL_0030,
  IL_0022)
  IL_0070:  leave.s    IL_0092
}
  filter
{
  IL_0072:  isinst     "System.Exception"
  IL_0077:  ldnull
  IL_0078:  cgt.un
  IL_007a:  ldloc.0
  IL_007b:  ldc.i4.0
  IL_007c:  cgt.un
  IL_007e:  and
  IL_007f:  ldloc.1
  IL_0080:  ldc.i4.0
  IL_0081:  ceq
  IL_0083:  and
  IL_0084:  endfilter
}  // end filter
{  // handler
  IL_0086:  castclass  "System.Exception"
  IL_008b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_0090:  leave.s    IL_005c
}
  IL_0092:  ldc.i4     0x800a0033
  IL_0097:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_009c:  throw
  IL_009d:  ldloc.1
  IL_009e:  brfalse.s  IL_00a5
  IL_00a0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00a5:  ret
}]]>)
        End Sub
 
        <WorkItem(737273, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/737273")>
        <Fact, WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        Public Sub OnError_WithLoopingConstructs()
            'Various Looping constructs with Errors and capturing the behavior of Resume Next as going into the loop rather
            ' then skipping to the next statement outside of the loop
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System
Imports System.Collections
Imports System.Collections.Generic

Module Module1
    Sub Main()
        ForEach()
        ForNext()
        DoWhile()
        ForNextStepError()
    End Sub

    Sub ForEach()
        'The error will cause it to resume in the block
        On Error GoTo errhandler

        Dim x = {}
        For Each i In xCollection()
            Console.Write("in block")
        Next

        Console.WriteLine("End")
errhandler:
        Resume Next
    End Sub


    Sub ForNext()
        'The error will cause it to resume in the block
        On Error GoTo errhandler

        Dim x = {}
        For i = 0 To xCollection.Count - 1
            Console.Write("in block")
        Next

        Console.WriteLine("End")
errhandler:
        Resume Next
    End Sub

    Sub DoWhile()
        'The error will cause it to resume in the block
        On Error GoTo errhandler
        Dim iIndex As Integer


        Do While iIndex <= xCollection.Count - 1
            Console.Write("in block")
            iIndex += 1
        Loop

        Console.WriteLine("End")
errhandler:
        If iIndex >= 3 Then
            Exit Sub
        End If
        Resume Next
    End Sub

    Function xCollection() As System.Collections.Generic.List(Of Integer)
        Throw New Exception() 'Used instead of Err.Raise or Error
        Return Nothing
    End Function


    'If error in the step it will still enter to loop
    ' Need count condition to ensure I can exit otherwise
    'becomes and infinite loop
    Public Sub ForNextStepError()
        On Error Resume Next
        Dim iCount As Integer = 0

        For i = 0 To 10 Step StepGoo(-1)
            Console.WriteLine("In Loop" & i)
            iCount += 1
            If iCount >= 3 Then
                Exit For
            End If
        Next
    End Sub

    Function StepGoo(i As Integer) As Integer
        If i < 0 Then
            Error 5
        Else
            Return i
        End If
    End Function

End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            'Verify the IL for each loop construct
            compilationVerifier.VerifyIL("Module1.ForEach", <![CDATA[
{
  // Code size      238 (0xee)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                System.Collections.Generic.List(Of Integer).Enumerator V_3)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldc.i4.0
    IL_000a:  newarr     "Object"
    IL_000f:  pop
    IL_0010:  ldc.i4.3
    IL_0011:  stloc.2
    IL_0012:  call       "Function Module1.xCollection() As System.Collections.Generic.List(Of Integer)"
    IL_0017:  callvirt   "Function System.Collections.Generic.List(Of Integer).GetEnumerator() As System.Collections.Generic.List(Of Integer).Enumerator"
    IL_001c:  stloc.3
    IL_001d:  br.s       IL_0035
    IL_001f:  ldloca.s   V_3
    IL_0021:  call       "Function System.Collections.Generic.List(Of Integer).Enumerator.get_Current() As Integer"
    IL_0026:  pop
    IL_0027:  ldc.i4.4
    IL_0028:  stloc.2
    IL_0029:  ldstr      "in block"
    IL_002e:  call       "Sub System.Console.Write(String)"
    IL_0033:  ldc.i4.5
    IL_0034:  stloc.2
    IL_0035:  ldloca.s   V_3
    IL_0037:  call       "Function System.Collections.Generic.List(Of Integer).Enumerator.MoveNext() As Boolean"
    IL_003c:  brtrue.s   IL_001f
    IL_003e:  ldc.i4.6
    IL_003f:  stloc.2
    IL_0040:  ldloca.s   V_3
    IL_0042:  constrained. "System.Collections.Generic.List(Of Integer).Enumerator"
    IL_0048:  callvirt   "Sub System.IDisposable.Dispose()"
    IL_004d:  ldc.i4.7
    IL_004e:  stloc.2
    IL_004f:  ldstr      "End"
    IL_0054:  call       "Sub System.Console.WriteLine(String)"
    IL_0059:  ldc.i4.8
    IL_005a:  stloc.2
    IL_005b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0060:  ldloc.1
    IL_0061:  brtrue.s   IL_0070
    IL_0063:  ldc.i4     0x800a0014
    IL_0068:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_006d:  throw
    IL_006e:  leave.s    IL_00e5
    IL_0070:  ldloc.1
    IL_0071:  ldc.i4.1
    IL_0072:  add
    IL_0073:  ldc.i4.0
    IL_0074:  stloc.1
    IL_0075:  switch    (
        IL_00a2,
        IL_0000,
        IL_0007,
        IL_0010,
        IL_0027,
        IL_0033,
        IL_003e,
        IL_004d,
        IL_0059,
        IL_006e)
    IL_00a2:  leave.s    IL_00da
    IL_00a4:  ldloc.2
    IL_00a5:  stloc.1
    IL_00a6:  ldloc.0
    IL_00a7:  switch    (
        IL_00b8,
        IL_0070,
        IL_0059)
    IL_00b8:  leave.s    IL_00da
  }
  filter
  {
    IL_00ba:  isinst     "System.Exception"
    IL_00bf:  ldnull
    IL_00c0:  cgt.un
    IL_00c2:  ldloc.0
    IL_00c3:  ldc.i4.0
    IL_00c4:  cgt.un
    IL_00c6:  and
    IL_00c7:  ldloc.1
    IL_00c8:  ldc.i4.0
    IL_00c9:  ceq
    IL_00cb:  and
    IL_00cc:  endfilter
  }  // end filter
  {  // handler
    IL_00ce:  castclass  "System.Exception"
    IL_00d3:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00d8:  leave.s    IL_00a4
  }
  IL_00da:  ldc.i4     0x800a0033
  IL_00df:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00e4:  throw
  IL_00e5:  ldloc.1
  IL_00e6:  brfalse.s  IL_00ed
  IL_00e8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ed:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Module1.ForNext", <![CDATA[
{
  // Code size      218 (0xda)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3,
                Integer V_4) //i
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldc.i4.0
    IL_000a:  newarr     "Object"
    IL_000f:  pop
    IL_0010:  ldc.i4.3
    IL_0011:  stloc.2
    IL_0012:  call       "Function Module1.xCollection() As System.Collections.Generic.List(Of Integer)"
    IL_0017:  callvirt   "Function System.Collections.Generic.List(Of Integer).get_Count() As Integer"
    IL_001c:  ldc.i4.1
    IL_001d:  sub.ovf
    IL_001e:  stloc.3
    IL_001f:  ldc.i4.0
    IL_0020:  stloc.s    V_4
    IL_0022:  br.s       IL_0038
    IL_0024:  ldc.i4.4
    IL_0025:  stloc.2
    IL_0026:  ldstr      "in block"
    IL_002b:  call       "Sub System.Console.Write(String)"
    IL_0030:  ldc.i4.5
    IL_0031:  stloc.2
    IL_0032:  ldloc.s    V_4
    IL_0034:  ldc.i4.1
    IL_0035:  add.ovf
    IL_0036:  stloc.s    V_4
    IL_0038:  ldloc.s    V_4
    IL_003a:  ldloc.3
    IL_003b:  ble.s      IL_0024
    IL_003d:  ldc.i4.6
    IL_003e:  stloc.2
    IL_003f:  ldstr      "End"
    IL_0044:  call       "Sub System.Console.WriteLine(String)"
    IL_0049:  ldc.i4.7
    IL_004a:  stloc.2
    IL_004b:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0050:  ldloc.1
    IL_0051:  brtrue.s   IL_0060
    IL_0053:  ldc.i4     0x800a0014
    IL_0058:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_005d:  throw
    IL_005e:  leave.s    IL_00d1
    IL_0060:  ldloc.1
    IL_0061:  ldc.i4.1
    IL_0062:  add
    IL_0063:  ldc.i4.0
    IL_0064:  stloc.1
    IL_0065:  switch    (
        IL_008e,
        IL_0000,
        IL_0007,
        IL_0010,
        IL_0024,
        IL_0030,
        IL_003d,
        IL_0049,
        IL_005e)
    IL_008e:  leave.s    IL_00c6
    IL_0090:  ldloc.2
    IL_0091:  stloc.1
    IL_0092:  ldloc.0
    IL_0093:  switch    (
        IL_00a4,
        IL_0060,
        IL_0049)
    IL_00a4:  leave.s    IL_00c6
  }
  filter
  {
    IL_00a6:  isinst     "System.Exception"
    IL_00ab:  ldnull
    IL_00ac:  cgt.un
    IL_00ae:  ldloc.0
    IL_00af:  ldc.i4.0
    IL_00b0:  cgt.un
    IL_00b2:  and
    IL_00b3:  ldloc.1
    IL_00b4:  ldc.i4.0
    IL_00b5:  ceq
    IL_00b7:  and
    IL_00b8:  endfilter
  }  // end filter
  {  // handler
    IL_00ba:  castclass  "System.Exception"
    IL_00bf:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00c4:  leave.s    IL_0090
  }
  IL_00c6:  ldc.i4     0x800a0033
  IL_00cb:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00d0:  throw
  IL_00d1:  ldloc.1
  IL_00d2:  brfalse.s  IL_00d9
  IL_00d4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00d9:  ret
}
]]>)
 
            compilationVerifier.VerifyIL("Module1.DoWhile", <![CDATA[
{
  // Code size      220 (0xdc)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3) //iIndex
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  br.s       IL_001b
    IL_0009:  ldc.i4.4
    IL_000a:  stloc.2
    IL_000b:  ldstr      "in block"
    IL_0010:  call       "Sub System.Console.Write(String)"
    IL_0015:  ldc.i4.5
    IL_0016:  stloc.2
    IL_0017:  ldloc.3
    IL_0018:  ldc.i4.1
    IL_0019:  add.ovf
    IL_001a:  stloc.3
    IL_001b:  ldc.i4.3
    IL_001c:  stloc.2
    IL_001d:  ldloc.3
    IL_001e:  call       "Function Module1.xCollection() As System.Collections.Generic.List(Of Integer)"
    IL_0023:  callvirt   "Function System.Collections.Generic.List(Of Integer).get_Count() As Integer"
    IL_0028:  ldc.i4.1
    IL_0029:  sub.ovf
    IL_002a:  ble.s      IL_0009
    IL_002c:  ldc.i4.7
    IL_002d:  stloc.2
    IL_002e:  ldstr      "End"
    IL_0033:  call       "Sub System.Console.WriteLine(String)"
    IL_0038:  ldc.i4.8
    IL_0039:  stloc.2
    IL_003a:  ldloc.3
    IL_003b:  ldc.i4.3
    IL_003c:  bge.s      IL_0054
    IL_003e:  ldc.i4.s   10
    IL_0040:  stloc.2
    IL_0041:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0046:  ldloc.1
    IL_0047:  brtrue.s   IL_0056
    IL_0049:  ldc.i4     0x800a0014
    IL_004e:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0053:  throw
    IL_0054:  leave.s    IL_00d3
    IL_0056:  ldloc.1
    IL_0057:  ldc.i4.1
    IL_0058:  add
    IL_0059:  ldc.i4.0
    IL_005a:  stloc.1
    IL_005b:  switch    (
        IL_0090,
        IL_0000,
        IL_001b,
        IL_001b,
        IL_0009,
        IL_0015,
        IL_001b,
        IL_002c,
        IL_0038,
        IL_0054,
        IL_003e,
        IL_0054)
    IL_0090:  leave.s    IL_00c8
    IL_0092:  ldloc.2
    IL_0093:  stloc.1
    IL_0094:  ldloc.0
    IL_0095:  switch    (
        IL_00a6,
        IL_0056,
        IL_0038)
    IL_00a6:  leave.s    IL_00c8
  }
  filter
  {
    IL_00a8:  isinst     "System.Exception"
    IL_00ad:  ldnull
    IL_00ae:  cgt.un
    IL_00b0:  ldloc.0
    IL_00b1:  ldc.i4.0
    IL_00b2:  cgt.un
    IL_00b4:  and
    IL_00b5:  ldloc.1
    IL_00b6:  ldc.i4.0
    IL_00b7:  ceq
    IL_00b9:  and
    IL_00ba:  endfilter
  }  // end filter
  {  // handler
    IL_00bc:  castclass  "System.Exception"
    IL_00c1:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00c6:  leave.s    IL_0092
  }
  IL_00c8:  ldc.i4     0x800a0033
  IL_00cd:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00d2:  throw
  IL_00d3:  ldloc.1
  IL_00d4:  brfalse.s  IL_00db
  IL_00d6:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00db:  ret
}]]>)
 
            compilationVerifier.VerifyIL("Module1.ForNextStepError", <![CDATA[
{
  // Code size      213 (0xd5)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3, //iCount
                Integer V_4,
                Integer V_5) //i
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldc.i4.0
    IL_000a:  stloc.3
    IL_000b:  ldc.i4.3
    IL_000c:  stloc.2
    IL_000d:  ldc.i4.m1
    IL_000e:  call       "Function Module1.StepGoo(Integer) As Integer"
    IL_0013:  stloc.s    V_4
    IL_0015:  ldc.i4.0
    IL_0016:  stloc.s    V_5
    IL_0018:  br.s       IL_0047
    IL_001a:  ldc.i4.4
    IL_001b:  stloc.2
    IL_001c:  ldstr      "In Loop"
    IL_0021:  ldloc.s    V_5
    IL_0023:  call       "Function Microsoft.VisualBasic.CompilerServices.Conversions.ToString(Integer) As String"
    IL_0028:  call       "Function String.Concat(String, String) As String"
    IL_002d:  call       "Sub System.Console.WriteLine(String)"
    IL_0032:  ldc.i4.5
    IL_0033:  stloc.2
    IL_0034:  ldloc.3
    IL_0035:  ldc.i4.1
    IL_0036:  add.ovf
    IL_0037:  stloc.3
    IL_0038:  ldc.i4.6
    IL_0039:  stloc.2
    IL_003a:  ldloc.3
    IL_003b:  ldc.i4.3
    IL_003c:  bge.s      IL_0059
    IL_003e:  ldc.i4.8
    IL_003f:  stloc.2
    IL_0040:  ldloc.s    V_5
    IL_0042:  ldloc.s    V_4
    IL_0044:  add.ovf
    IL_0045:  stloc.s    V_5
    IL_0047:  ldloc.s    V_4
    IL_0049:  ldc.i4.s   31
    IL_004b:  shr
    IL_004c:  ldloc.s    V_5
    IL_004e:  xor
    IL_004f:  ldloc.s    V_4
    IL_0051:  ldc.i4.s   31
    IL_0053:  shr
    IL_0054:  ldc.i4.s   10
    IL_0056:  xor
    IL_0057:  ble.s      IL_001a
    IL_0059:  leave.s    IL_00cc
    IL_005b:  ldloc.1
    IL_005c:  ldc.i4.1
    IL_005d:  add
    IL_005e:  ldc.i4.0
    IL_005f:  stloc.1
    IL_0060:  switch    (
        IL_008d,
        IL_0000,
        IL_0007,
        IL_000b,
        IL_001a,
        IL_0032,
        IL_0038,
        IL_0059,
        IL_003e,
        IL_0059)
    IL_008d:  leave.s    IL_00c1
    IL_008f:  ldloc.2
    IL_0090:  stloc.1
    IL_0091:  ldloc.0
    IL_0092:  switch    (
        IL_009f,
        IL_005b)
    IL_009f:  leave.s    IL_00c1
  }
  filter
  {
    IL_00a1:  isinst     "System.Exception"
    IL_00a6:  ldnull
    IL_00a7:  cgt.un
    IL_00a9:  ldloc.0
    IL_00aa:  ldc.i4.0
    IL_00ab:  cgt.un
    IL_00ad:  and
    IL_00ae:  ldloc.1
    IL_00af:  ldc.i4.0
    IL_00b0:  ceq
    IL_00b2:  and
    IL_00b3:  endfilter
  }  // end filter
  {  // handler
    IL_00b5:  castclass  "System.Exception"
    IL_00ba:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00bf:  leave.s    IL_008f
  }
  IL_00c1:  ldc.i4     0x800a0033
  IL_00c6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00cb:  throw
  IL_00cc:  ldloc.1
  IL_00cd:  brfalse.s  IL_00d4
  IL_00cf:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00d4:  ret
}
]]>)
 
        End Sub
 
        <Fact()>
        Public Sub OnError_GotoZeroBaselineInMainBlock()
            'This will reset the handler and the 2nd error will result in
            'an unhandled exception.   Will IL Baseline  the test
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        GotoMinus0()
    End Sub

    Sub GotoMinus0()
        On Error GoTo goo
        Error 1
        On Error GoTo 0 'This should reset the error handler to nothing
        Error 2 '< It will fail here with unhandled exception
        Exit Sub
goo:
        Console.WriteLine("In Handler")
        Resume Next
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Module1.GotoMinus0", <![CDATA[{
  // Code size      189 (0xbd)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.2
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.2
  IL_0009:  ldc.i4.1
  IL_000a:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_000f:  throw
  IL_0010:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0015:  ldc.i4.0
  IL_0016:  stloc.0
  IL_0017:  ldc.i4.4
  IL_0018:  stloc.2
  IL_0019:  ldc.i4.2
  IL_001a:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_001f:  throw
  IL_0020:  ldc.i4.6
  IL_0021:  stloc.2
  IL_0022:  ldstr      "In Handler"
  IL_0027:  call       "Sub System.Console.WriteLine(String)"
  IL_002c:  ldc.i4.7
  IL_002d:  stloc.2
  IL_002e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0033:  ldloc.1
  IL_0034:  brtrue.s   IL_0043
  IL_0036:  ldc.i4     0x800a0014
  IL_003b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0040:  throw
  IL_0041:  leave.s    IL_00b4
  IL_0043:  ldloc.1
  IL_0044:  ldc.i4.1
  IL_0045:  add
  IL_0046:  ldc.i4.0
  IL_0047:  stloc.1
  IL_0048:  switch    (
  IL_0071,
  IL_0000,
  IL_0007,
  IL_0010,
  IL_0017,
  IL_0041,
  IL_0020,
  IL_002c,
  IL_0041)
  IL_0071:  leave.s    IL_00a9
  IL_0073:  ldloc.2
  IL_0074:  stloc.1
  IL_0075:  ldloc.0
  IL_0076:  switch    (
  IL_0087,
  IL_0043,
  IL_0020)
  IL_0087:  leave.s    IL_00a9
}
  filter
{
  IL_0089:  isinst     "System.Exception"
  IL_008e:  ldnull
  IL_008f:  cgt.un
  IL_0091:  ldloc.0
  IL_0092:  ldc.i4.0
  IL_0093:  cgt.un
  IL_0095:  and
  IL_0096:  ldloc.1
  IL_0097:  ldc.i4.0
  IL_0098:  ceq
  IL_009a:  and
  IL_009b:  endfilter
}  // end filter
{  // handler
  IL_009d:  castclass  "System.Exception"
  IL_00a2:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00a7:  leave.s    IL_0073
}
  IL_00a9:  ldc.i4     0x800a0033
  IL_00ae:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b3:  throw
  IL_00b4:  ldloc.1
  IL_00b5:  brfalse.s  IL_00bc
  IL_00b7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00bc:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub OnError_GotoZeroBaselineInHandler()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        GotoMinus0
    End Sub

    Sub GotoMinus0()        
        On Error GoTo goo
        Throw New Exception()

        Throw New Exception() '< It will fail here with unhandled exception
        Exit Sub
goo:
        Console.WriteLine("In Handler")
        On Error GoTo 0 'This should reset the error handler to nothing
        Resume Next
    End Sub

End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Module1.GotoMinus0", <![CDATA[{
  // Code size      187 (0xbb)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
{
  IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0005:  ldc.i4.2
  IL_0006:  stloc.0
  IL_0007:  ldc.i4.2
  IL_0008:  stloc.2
  IL_0009:  newobj     "Sub System.Exception..ctor()"
  IL_000e:  throw
  IL_000f:  ldc.i4.3
  IL_0010:  stloc.2
  IL_0011:  newobj     "Sub System.Exception..ctor()"
  IL_0016:  throw
  IL_0017:  ldc.i4.5
  IL_0018:  stloc.2
  IL_0019:  ldstr      "In Handler"
  IL_001e:  call       "Sub System.Console.WriteLine(String)"
  IL_0023:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0028:  ldc.i4.0
  IL_0029:  stloc.0
  IL_002a:  ldc.i4.7
  IL_002b:  stloc.2
  IL_002c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0031:  ldloc.1
  IL_0032:  brtrue.s   IL_0041
  IL_0034:  ldc.i4     0x800a0014
  IL_0039:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_003e:  throw
  IL_003f:  leave.s    IL_00b2
  IL_0041:  ldloc.1
  IL_0042:  ldc.i4.1
  IL_0043:  add
  IL_0044:  ldc.i4.0
  IL_0045:  stloc.1
  IL_0046:  switch    (
  IL_006f,
  IL_0000,
  IL_0007,
  IL_000f,
  IL_003f,
  IL_0017,
  IL_0023,
  IL_002a,
  IL_003f)
  IL_006f:  leave.s    IL_00a7
  IL_0071:  ldloc.2
  IL_0072:  stloc.1
  IL_0073:  ldloc.0
  IL_0074:  switch    (
  IL_0085,
  IL_0041,
  IL_0017)
  IL_0085:  leave.s    IL_00a7
}
  filter
{
  IL_0087:  isinst     "System.Exception"
  IL_008c:  ldnull
  IL_008d:  cgt.un
  IL_008f:  ldloc.0
  IL_0090:  ldc.i4.0
  IL_0091:  cgt.un
  IL_0093:  and
  IL_0094:  ldloc.1
  IL_0095:  ldc.i4.0
  IL_0096:  ceq
  IL_0098:  and
  IL_0099:  endfilter
}  // end filter
{  // handler
  IL_009b:  castclass  "System.Exception"
  IL_00a0:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00a5:  leave.s    IL_0071
}
  IL_00a7:  ldc.i4     0x800a0033
  IL_00ac:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00b1:  throw
  IL_00b2:  ldloc.1
  IL_00b3:  brfalse.s  IL_00ba
  IL_00b5:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00ba:  ret
}]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_GotoMinusBaselineInhandler()
            'The difference on the resetting the error in the handler and the resume is important as this one
            'will resume in the Handler and hence the 2nd error will not be generated
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        GotoMinus1()
    End Sub

    Sub GotoMinus1()
        'Resume Next takes place in Goo: Block
        'and hence will result in infinite recursion without
        'the Iindex count exit condition

        ' This is interesting because of the Error Number 20 being raised for Resume without Error
        ' and is documented in spec

        Dim IiNDEX As Integer = 0

        On Error GoTo goo
        Console.WriteLine("Before 1st Error")
        Error 1
        Console.WriteLine("Before 2nd Error")
        Error 2
        Exit Sub
goo:
        Console.WriteLine("Goo")
        IiNDEX += 1
        If IiNDEX >= 3 Then Exit Sub
        Console.WriteLine("In Goo Before Reset")
        On Error GoTo -1 'This should reset the error
        Console.WriteLine("In Goo After Reset")

        Resume Next
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before 1st Error
Goo
In Goo Before Reset
In Goo After Reset
Goo
In Goo Before Reset
In Goo After Reset
Goo
]]>)
 
            compilationVerifier.VerifyIL("Module1.GotoMinus1", <![CDATA[
{
  // Code size      293 (0x125)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3) //IiNDEX
  .try
  {
    IL_0000:  ldc.i4.1
    IL_0001:  stloc.2
    IL_0002:  ldc.i4.0
    IL_0003:  stloc.3
    IL_0004:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0009:  ldc.i4.2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.3
    IL_000c:  stloc.2
    IL_000d:  ldstr      "Before 1st Error"
    IL_0012:  call       "Sub System.Console.WriteLine(String)"
    IL_0017:  ldc.i4.4
    IL_0018:  stloc.2
    IL_0019:  ldc.i4.1
    IL_001a:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_001f:  throw
    IL_0020:  ldc.i4.5
    IL_0021:  stloc.2
    IL_0022:  ldstr      "Before 2nd Error"
    IL_0027:  call       "Sub System.Console.WriteLine(String)"
    IL_002c:  ldc.i4.6
    IL_002d:  stloc.2
    IL_002e:  ldc.i4.2
    IL_002f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0034:  throw
    IL_0035:  ldc.i4.8
    IL_0036:  stloc.2
    IL_0037:  ldstr      "Goo"
    IL_003c:  call       "Sub System.Console.WriteLine(String)"
    IL_0041:  ldc.i4.s   9
    IL_0043:  stloc.2
    IL_0044:  ldloc.3
    IL_0045:  ldc.i4.1
    IL_0046:  add.ovf
    IL_0047:  stloc.3
    IL_0048:  ldc.i4.s   10
    IL_004a:  stloc.2
    IL_004b:  ldloc.3
    IL_004c:  ldc.i4.3
    IL_004d:  bge.s      IL_0086
    IL_004f:  ldc.i4.s   12
    IL_0051:  stloc.2
    IL_0052:  ldstr      "In Goo Before Reset"
    IL_0057:  call       "Sub System.Console.WriteLine(String)"
    IL_005c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0061:  ldc.i4.0
    IL_0062:  stloc.1
    IL_0063:  ldc.i4.s   14
    IL_0065:  stloc.2
    IL_0066:  ldstr      "In Goo After Reset"
    IL_006b:  call       "Sub System.Console.WriteLine(String)"
    IL_0070:  ldc.i4.s   15
    IL_0072:  stloc.2
    IL_0073:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0078:  ldloc.1
    IL_0079:  brtrue.s   IL_008b
    IL_007b:  ldc.i4     0x800a0014
    IL_0080:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0085:  throw
    IL_0086:  leave      IL_011c
    IL_008b:  ldloc.1
    IL_008c:  ldc.i4.1
    IL_008d:  add
    IL_008e:  ldc.i4.0
    IL_008f:  stloc.1
    IL_0090:  switch    (
        IL_00d9,
        IL_0000,
        IL_0004,
        IL_000b,
        IL_0017,
        IL_0020,
        IL_002c,
        IL_0086,
        IL_0035,
        IL_0041,
        IL_0048,
        IL_0086,
        IL_004f,
        IL_005c,
        IL_0063,
        IL_0070,
        IL_0086)
    IL_00d9:  leave.s    IL_0111
    IL_00db:  ldloc.2
    IL_00dc:  stloc.1
    IL_00dd:  ldloc.0
    IL_00de:  switch    (
        IL_00ef,
        IL_008b,
        IL_0035)
    IL_00ef:  leave.s    IL_0111
  }
  filter
  {
    IL_00f1:  isinst     "System.Exception"
    IL_00f6:  ldnull
    IL_00f7:  cgt.un
    IL_00f9:  ldloc.0
    IL_00fa:  ldc.i4.0
    IL_00fb:  cgt.un
    IL_00fd:  and
    IL_00fe:  ldloc.1
    IL_00ff:  ldc.i4.0
    IL_0100:  ceq
    IL_0102:  and
    IL_0103:  endfilter
  }  // end filter
  {  // handler
    IL_0105:  castclass  "System.Exception"
    IL_010a:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_010f:  leave.s    IL_00db
  }
  IL_0111:  ldc.i4     0x800a0033
  IL_0116:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_011b:  throw
  IL_011c:  ldloc.1
  IL_011d:  brfalse.s  IL_0124
  IL_011f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0124:  ret
}]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_GotoMinusBaselineInMainBlock()
            'The difference on the resetting the error in the handler and the resume is important as this one
            'will resume in the Handler and hence the 2nd error will not be generated
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        GotoMinus1()
    End Sub

    Sub GotoMinus1()
        'Resume Next takes place in Goo: Block
        'and hence will result in infinite recursion without
        'the Iindex count exit condition

        ' This is interesting because of the Error Number 20 being raised for Resume without Error
        ' and is documented in spec

        Dim IiNDEX As Integer = 0

        On Error GoTo goo
        Console.WriteLine("Before 1st Error")
        Error 1

        Console.WriteLine("In Main Block Before Reset")
        On Error GoTo -1 'This should reset the error
        Console.WriteLine("In Main Block After Reset")

        Console.WriteLine("Before 2nd Error")
        Error 2
        Exit Sub
goo:
        Console.WriteLine("Goo")
        IiNDEX += 1
        If IiNDEX >= 3 Then Exit Sub
        
        Resume Next
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before 1st Error
Goo
In Main Block Before Reset
In Main Block After Reset
Before 2nd Error
Goo]]>)
 
            compilationVerifier.VerifyIL("Module1.GotoMinus1", <![CDATA[
{
  // Code size      293 (0x125)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3) //IiNDEX
  .try
  {
    IL_0000:  ldc.i4.1
    IL_0001:  stloc.2
    IL_0002:  ldc.i4.0
    IL_0003:  stloc.3
    IL_0004:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0009:  ldc.i4.2
    IL_000a:  stloc.0
    IL_000b:  ldc.i4.3
    IL_000c:  stloc.2
    IL_000d:  ldstr      "Before 1st Error"
    IL_0012:  call       "Sub System.Console.WriteLine(String)"
    IL_0017:  ldc.i4.4
    IL_0018:  stloc.2
    IL_0019:  ldc.i4.1
    IL_001a:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_001f:  throw
    IL_0020:  ldc.i4.5
    IL_0021:  stloc.2
    IL_0022:  ldstr      "In Main Block Before Reset"
    IL_0027:  call       "Sub System.Console.WriteLine(String)"
    IL_002c:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0031:  ldc.i4.0
    IL_0032:  stloc.1
    IL_0033:  ldc.i4.7
    IL_0034:  stloc.2
    IL_0035:  ldstr      "In Main Block After Reset"
    IL_003a:  call       "Sub System.Console.WriteLine(String)"
    IL_003f:  ldc.i4.8
    IL_0040:  stloc.2
    IL_0041:  ldstr      "Before 2nd Error"
    IL_0046:  call       "Sub System.Console.WriteLine(String)"
    IL_004b:  ldc.i4.s   9
    IL_004d:  stloc.2
    IL_004e:  ldc.i4.2
    IL_004f:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0054:  throw
    IL_0055:  ldc.i4.s   11
    IL_0057:  stloc.2
    IL_0058:  ldstr      "Goo"
    IL_005d:  call       "Sub System.Console.WriteLine(String)"
    IL_0062:  ldc.i4.s   12
    IL_0064:  stloc.2
    IL_0065:  ldloc.3
    IL_0066:  ldc.i4.1
    IL_0067:  add.ovf
    IL_0068:  stloc.3
    IL_0069:  ldc.i4.s   13
    IL_006b:  stloc.2
    IL_006c:  ldloc.3
    IL_006d:  ldc.i4.3
    IL_006e:  bge.s      IL_0086
    IL_0070:  ldc.i4.s   15
    IL_0072:  stloc.2
    IL_0073:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0078:  ldloc.1
    IL_0079:  brtrue.s   IL_008b
    IL_007b:  ldc.i4     0x800a0014
    IL_0080:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0085:  throw
    IL_0086:  leave      IL_011c
    IL_008b:  ldloc.1
    IL_008c:  ldc.i4.1
    IL_008d:  add
    IL_008e:  ldc.i4.0
    IL_008f:  stloc.1
    IL_0090:  switch    (
        IL_00d9,
        IL_0000,
        IL_0004,
        IL_000b,
        IL_0017,
        IL_0020,
        IL_002c,
        IL_0033,
        IL_003f,
        IL_004b,
        IL_0086,
        IL_0055,
        IL_0062,
        IL_0069,
        IL_0086,
        IL_0070,
        IL_0086)
    IL_00d9:  leave.s    IL_0111
    IL_00db:  ldloc.2
    IL_00dc:  stloc.1
    IL_00dd:  ldloc.0
    IL_00de:  switch    (
        IL_00ef,
        IL_008b,
        IL_0055)
    IL_00ef:  leave.s    IL_0111
  }
  filter
  {
    IL_00f1:  isinst     "System.Exception"
    IL_00f6:  ldnull
    IL_00f7:  cgt.un
    IL_00f9:  ldloc.0
    IL_00fa:  ldc.i4.0
    IL_00fb:  cgt.un
    IL_00fd:  and
    IL_00fe:  ldloc.1
    IL_00ff:  ldc.i4.0
    IL_0100:  ceq
    IL_0102:  and
    IL_0103:  endfilter
  }  // end filter
  {  // handler
    IL_0105:  castclass  "System.Exception"
    IL_010a:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_010f:  leave.s    IL_00db
  }
  IL_0111:  ldc.i4     0x800a0033
  IL_0116:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_011b:  throw
  IL_011c:  ldloc.1
  IL_011d:  brfalse.s  IL_0124
  IL_011f:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0124:  ret
}]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_GotoMinusBaselineInMainBlock_ThrowException()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        GotoMinus1()
    End Sub

        Sub GotoMinus1()
        'Resume next will result in going to the next statement from initial error and 
        'handler is reset here - so need to have extra condition check.

        On Error GoTo goo
        Console.WriteLine("Before 1 Exception")
        Throw New Exception()
        Console.WriteLine("After 1 Exception")

        On Error GoTo -1 'This should reset the error
        Console.WriteLine("Before 2 Exception")        
        Throw New Exception()
        Console.WriteLine("After 2 Exception")        
        Exit Sub
goo:
        Console.WriteLine("Goo")        
        Resume Next
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before 1 Exception
Goo
After 1 Exception
Before 2 Exception
Goo
After 2 Exception]]>)
 
            compilationVerifier.VerifyIL("Module1.GotoMinus1", <![CDATA[
{
  // Code size      258 (0x102)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "Before 1 Exception"
    IL_000e:  call       "Sub System.Console.WriteLine(String)"
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  newobj     "Sub System.Exception..ctor()"
    IL_001a:  throw
    IL_001b:  ldc.i4.4
    IL_001c:  stloc.2
    IL_001d:  ldstr      "After 1 Exception"
    IL_0022:  call       "Sub System.Console.WriteLine(String)"
    IL_0027:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_002c:  ldc.i4.0
    IL_002d:  stloc.1
    IL_002e:  ldc.i4.6
    IL_002f:  stloc.2
    IL_0030:  ldstr      "Before 2 Exception"
    IL_0035:  call       "Sub System.Console.WriteLine(String)"
    IL_003a:  ldc.i4.7
    IL_003b:  stloc.2
    IL_003c:  newobj     "Sub System.Exception..ctor()"
    IL_0041:  throw
    IL_0042:  ldc.i4.8
    IL_0043:  stloc.2
    IL_0044:  ldstr      "After 2 Exception"
    IL_0049:  call       "Sub System.Console.WriteLine(String)"
    IL_004e:  br.s       IL_0073
    IL_0050:  ldc.i4.s   10
    IL_0052:  stloc.2
    IL_0053:  ldstr      "Goo"
    IL_0058:  call       "Sub System.Console.WriteLine(String)"
    IL_005d:  ldc.i4.s   11
    IL_005f:  stloc.2
    IL_0060:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0065:  ldloc.1
    IL_0066:  brtrue.s   IL_0078
    IL_0068:  ldc.i4     0x800a0014
    IL_006d:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0072:  throw
    IL_0073:  leave      IL_00f9
    IL_0078:  ldloc.1
    IL_0079:  ldc.i4.1
    IL_007a:  add
    IL_007b:  ldc.i4.0
    IL_007c:  stloc.1
    IL_007d:  switch    (
        IL_00b6,
        IL_0000,
        IL_0007,
        IL_0013,
        IL_001b,
        IL_0027,
        IL_002e,
        IL_003a,
        IL_0042,
        IL_0073,
        IL_0050,
        IL_005d,
        IL_0073)
    IL_00b6:  leave.s    IL_00ee
    IL_00b8:  ldloc.2
    IL_00b9:  stloc.1
    IL_00ba:  ldloc.0
    IL_00bb:  switch    (
        IL_00cc,
        IL_0078,
        IL_0050)
    IL_00cc:  leave.s    IL_00ee
  }
  filter
  {
    IL_00ce:  isinst     "System.Exception"
    IL_00d3:  ldnull
    IL_00d4:  cgt.un
    IL_00d6:  ldloc.0
    IL_00d7:  ldc.i4.0
    IL_00d8:  cgt.un
    IL_00da:  and
    IL_00db:  ldloc.1
    IL_00dc:  ldc.i4.0
    IL_00dd:  ceq
    IL_00df:  and
    IL_00e0:  endfilter
  }  // end filter
  {  // handler
    IL_00e2:  castclass  "System.Exception"
    IL_00e7:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ec:  leave.s    IL_00b8
  }
  IL_00ee:  ldc.i4     0x800a0033
  IL_00f3:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00f8:  throw
  IL_00f9:  ldloc.1
  IL_00fa:  brfalse.s  IL_0101
  IL_00fc:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0101:  ret
}]]>)
        End Sub
 
        <WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_WithSyncLock_1()
            'This is the typical scenario documented in the spec to ensure that infinite
            'recursion does not occur
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Class LockClass
End Class

Module Module1
    Sub Main()
        Dim firsttime As Boolean = True
        Dim lock As New LockClass

        On Error GoTo handler

        SyncLock lock
            Console.WriteLine("Before Exception")
            Throw New Exception()
            Console.WriteLine("AfterException")
        End SyncLock
        Exit Sub
handler:
        If firsttime Then
            firsttime = False
            Resume
        Else
            Resume Next
        End If
    End Sub
End Module   
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation, expectedOutput:="Before Exception" & Environment.NewLine & "Before Exception")
 
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[
{
  // Code size      260 (0x104)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Boolean V_3, //firsttime
                LockClass V_4, //lock
                Object V_5,
                Boolean V_6)
  .try
 {
   IL_0000:  ldc.i4.1
   IL_0001:  stloc.2
   IL_0002:  ldc.i4.1
   IL_0003:  stloc.3
   IL_0004:  ldc.i4.2
   IL_0005:  stloc.2
   IL_0006:  newobj     "Sub LockClass..ctor()"
   IL_000b:  stloc.s    V_4
   IL_000d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
   IL_0012:  ldc.i4.2
   IL_0013:  stloc.0
   IL_0014:  ldc.i4.4
   IL_0015:  stloc.2
   IL_0016:  ldloc.s    V_4
   IL_0018:  stloc.s    V_5
   IL_001a:  ldc.i4.0
   IL_001b:  stloc.s    V_6
   .try
 {
   IL_001d:  ldloc.s    V_5
   IL_001f:  ldloca.s   V_6
   IL_0021:  call       "Sub System.Threading.Monitor.Enter(Object, ByRef Boolean)"
   IL_0026:  ldstr      "Before Exception"
   IL_002b:  call       "Sub System.Console.WriteLine(String)"
   IL_0030:  newobj     "Sub System.Exception..ctor()"
   IL_0035:  throw
 }
   finally
 {
   IL_0036:  ldloc.s    V_6
   IL_0038:  brfalse.s  IL_0041
   IL_003a:  ldloc.s    V_5
   IL_003c:  call       "Sub System.Threading.Monitor.Exit(Object)"
   IL_0041:  endfinally
 }
   IL_0042:  ldc.i4.6
   IL_0043:  stloc.2
   IL_0044:  ldloc.3
   IL_0045:  brfalse.s  IL_0060
   IL_0047:  ldc.i4.7
   IL_0048:  stloc.2
   IL_0049:  ldc.i4.0
   IL_004a:  stloc.3
   IL_004b:  ldc.i4.8
   IL_004c:  stloc.2
   IL_004d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
   IL_0052:  ldloc.1
   IL_0053:  brtrue.s   IL_007b
   IL_0055:  ldc.i4     0x800a0014
   IL_005a:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
   IL_005f:  throw
   IL_0060:  ldc.i4.s   10
   IL_0062:  stloc.2
   IL_0063:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
   IL_0068:  ldloc.1
   IL_0069:  brtrue.s   IL_007e
   IL_006b:  ldc.i4     0x800a0014
   IL_0070:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
   IL_0075:  throw
   IL_0076:  leave      IL_00fb
   IL_007b:  ldloc.1
   IL_007c:  br.s       IL_0081
   IL_007e:  ldloc.1
   IL_007f:  ldc.i4.1
   IL_0080:  add
   IL_0081:  ldc.i4.0
   IL_0082:  stloc.1
   IL_0083:  switch    (
       IL_00b8,
       IL_0000,
       IL_0004,
       IL_000d,
       IL_0014,
       IL_0076,
       IL_0042,
       IL_0047,
       IL_004b,
       IL_0076,
       IL_0060,
       IL_0076)
   IL_00b8:  leave.s    IL_00f0
   IL_00ba:  ldloc.2
   IL_00bb:  stloc.1
   IL_00bc:  ldloc.0
   IL_00bd:  switch    (
       IL_00ce,
       IL_007e,
       IL_0042)
   IL_00ce:  leave.s    IL_00f0
 }
 filter
 {
   IL_00d0:  isinst     "System.Exception"
   IL_00d5:  ldnull
   IL_00d6:  cgt.un
   IL_00d8:  ldloc.0
   IL_00d9:  ldc.i4.0
   IL_00da:  cgt.un
   IL_00dc:  and
   IL_00dd:  ldloc.1
   IL_00de:  ldc.i4.0
   IL_00df:  ceq
   IL_00e1:  and
   IL_00e2:  endfilter
 }  // end filter
 {  // handler
   IL_00e4:  castclass  "System.Exception"
   IL_00e9:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
   IL_00ee:  leave.s    IL_00ba
 }
  IL_00f0:  ldc.i4     0x800a0033
  IL_00f5:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00fa:  throw
  IL_00fb:  ldloc.1
  IL_00fc:  brfalse.s  IL_0103
  IL_00fe:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0103:  ret
}
]]>)
        End Sub
 
        <Fact()>
        Public Sub OnError_WithSyncLock_2()
            'This needs to baseline only because of infinite recursion issue
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Class LockClass
End Class

Module Module1
        Sub Main()
        Dim firsttime As Boolean = True
        Dim lock As New LockClass

        On Error GoTo handler

        SyncLock lock
            Console.WriteLine("Before Exception")
            Throw New Exception()
            Console.WriteLine("AfterException")
        End SyncLock
        Exit Sub
handler:
        Resume  'result in infinite recursion
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim compilationVerifier = CompileAndVerify(compilation)
 
            compilationVerifier.VerifyIL("Module1.Main", <![CDATA[
{
  // Code size      206 (0xce)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                LockClass V_3, //lock
                Object V_4,
                Boolean V_5)
  .try
{
  IL_0000:  ldc.i4.1
  IL_0001:  stloc.2
  IL_0002:  ldc.i4.2
  IL_0003:  stloc.2
  IL_0004:  newobj     "Sub LockClass..ctor()"
  IL_0009:  stloc.3
  IL_000a:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000f:  ldc.i4.2
  IL_0010:  stloc.0
  IL_0011:  ldc.i4.4
  IL_0012:  stloc.2
  IL_0013:  ldloc.3
  IL_0014:  stloc.s    V_4
  IL_0016:  ldc.i4.0
  IL_0017:  stloc.s    V_5
  .try
{
  IL_0019:  ldloc.s    V_4
  IL_001b:  ldloca.s   V_5
  IL_001d:  call       "Sub System.Threading.Monitor.Enter(Object, ByRef Boolean)"
  IL_0022:  ldstr      "Before Exception"
  IL_0027:  call       "Sub System.Console.WriteLine(String)"
  IL_002c:  newobj     "Sub System.Exception..ctor()"
  IL_0031:  throw
}
  finally
{
  IL_0032:  ldloc.s    V_5
  IL_0034:  brfalse.s  IL_003d
  IL_0036:  ldloc.s    V_4
  IL_0038:  call       "Sub System.Threading.Monitor.Exit(Object)"
  IL_003d:  endfinally
}
  IL_003e:  ldc.i4.6
  IL_003f:  stloc.2
  IL_0040:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0045:  ldloc.1
  IL_0046:  brtrue.s   IL_0055
  IL_0048:  ldc.i4     0x800a0014
  IL_004d:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0052:  throw
  IL_0053:  leave.s    IL_00c5
  IL_0055:  ldloc.1
  IL_0056:  br.s       IL_005b
  IL_0058:  ldloc.1
  IL_0059:  ldc.i4.1
  IL_005a:  add
  IL_005b:  ldc.i4.0
  IL_005c:  stloc.1
  IL_005d:  switch    (
  IL_0082,
  IL_0000,
  IL_0002,
  IL_000a,
  IL_0011,
  IL_0053,
  IL_003e,
  IL_0053)
  IL_0082:  leave.s    IL_00ba
  IL_0084:  ldloc.2
  IL_0085:  stloc.1
  IL_0086:  ldloc.0
  IL_0087:  switch    (
  IL_0098,
  IL_0058,
  IL_003e)
  IL_0098:  leave.s    IL_00ba
}
  filter
{
  IL_009a:  isinst     "System.Exception"
  IL_009f:  ldnull
  IL_00a0:  cgt.un
  IL_00a2:  ldloc.0
  IL_00a3:  ldc.i4.0
  IL_00a4:  cgt.un
  IL_00a6:  and
  IL_00a7:  ldloc.1
  IL_00a8:  ldc.i4.0
  IL_00a9:  ceq
  IL_00ab:  and
  IL_00ac:  endfilter
}  // end filter
{  // handler
  IL_00ae:  castclass  "System.Exception"
  IL_00b3:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00b8:  leave.s    IL_0084
}
  IL_00ba:  ldc.i4     0x800a0033
  IL_00bf:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00c4:  throw
  IL_00c5:  ldloc.1
  IL_00c6:  brfalse.s  IL_00cd
  IL_00c8:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00cd:  ret
}
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_WithSyncLock_3()
            'This verifies that resume next will resume outside the sync block
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Class LockClass
End Class

Module Module1
    Sub Main()
        'This will not resume after the exception but rather outside of the syncLock block
        Dim lock As New LockClass

        On Error GoTo handler

        SyncLock lock
            Console.WriteLine("Before Exception")
            Throw New Exception()
            Console.WriteLine("AfterException")
        End SyncLock
        Exit Sub
handler:
        Resume Next
    End Sub
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim CompilationVerifier = CompileAndVerify(compilation, expectedOutput:="Before Exception")
 
            CompilationVerifier.VerifyIL("Module1.Main", <![CDATA[
{
  // Code size      197 (0xc5)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                LockClass V_3, //lock
                Object V_4,
                Boolean V_5)
  .try
{
  IL_0000:  ldc.i4.1
  IL_0001:  stloc.2
  IL_0002:  newobj     "Sub LockClass..ctor()"
  IL_0007:  stloc.3
  IL_0008:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_000d:  ldc.i4.2
  IL_000e:  stloc.0
  IL_000f:  ldc.i4.3
  IL_0010:  stloc.2
  IL_0011:  ldloc.3
  IL_0012:  stloc.s    V_4
  IL_0014:  ldc.i4.0
  IL_0015:  stloc.s    V_5
  .try
{
  IL_0017:  ldloc.s    V_4
  IL_0019:  ldloca.s   V_5
  IL_001b:  call       "Sub System.Threading.Monitor.Enter(Object, ByRef Boolean)"
  IL_0020:  ldstr      "Before Exception"
  IL_0025:  call       "Sub System.Console.WriteLine(String)"
  IL_002a:  newobj     "Sub System.Exception..ctor()"
  IL_002f:  throw
}
  finally
{
  IL_0030:  ldloc.s    V_5
  IL_0032:  brfalse.s  IL_003b
  IL_0034:  ldloc.s    V_4
  IL_0036:  call       "Sub System.Threading.Monitor.Exit(Object)"
  IL_003b:  endfinally
}
  IL_003c:  ldc.i4.5
  IL_003d:  stloc.2
  IL_003e:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0043:  ldloc.1
  IL_0044:  brtrue.s   IL_0053
  IL_0046:  ldc.i4     0x800a0014
  IL_004b:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_0050:  throw
  IL_0051:  leave.s    IL_00bc
  IL_0053:  ldloc.1
  IL_0054:  ldc.i4.1
  IL_0055:  add
  IL_0056:  ldc.i4.0
  IL_0057:  stloc.1
  IL_0058:  switch    (
  IL_0079,
  IL_0000,
  IL_0008,
  IL_000f,
  IL_0051,
  IL_003c,
  IL_0051)
  IL_0079:  leave.s    IL_00b1
  IL_007b:  ldloc.2
  IL_007c:  stloc.1
  IL_007d:  ldloc.0
  IL_007e:  switch    (
  IL_008f,
  IL_0053,
  IL_003c)
  IL_008f:  leave.s    IL_00b1
}
  filter
{
  IL_0091:  isinst     "System.Exception"
  IL_0096:  ldnull
  IL_0097:  cgt.un
  IL_0099:  ldloc.0
  IL_009a:  ldc.i4.0
  IL_009b:  cgt.un
  IL_009d:  and
  IL_009e:  ldloc.1
  IL_009f:  ldc.i4.0
  IL_00a0:  ceq
  IL_00a2:  and
  IL_00a3:  endfilter
}  // end filter
{  // handler
  IL_00a5:  castclass  "System.Exception"
  IL_00aa:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
  IL_00af:  leave.s    IL_007b
}
  IL_00b1:  ldc.i4     0x800a0033
  IL_00b6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00bb:  throw
  IL_00bc:  ldloc.1
  IL_00bd:  brfalse.s  IL_00c4
  IL_00bf:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00c4:  ret
}
]]>)
        End Sub
 
        <WorkItem(1005639, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1005639")>
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_ResumeWithConditionBlocks()
            'This verifies that resume next will resume inside the IF block when an error occurs in the
            'IF statement / ELSEIF and also and multiple condition IF With ANDALSO
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        IFBlock_1()
        IFBlock()
        ElseiFBlock_With_ANDALSO()
    End Sub

    Public Sub IFBlock_1()
        On Error Resume Next
        Console.WriteLine("*********************************************")
        Console.WriteLine("IF Block(1) Test")
        If Goo_IF() Then
            Console.WriteLine("If Block")
        Else
            Console.WriteLine("Else Block")
        End If
        Console.WriteLine("End")
    End Sub

    Function Goo_IF() As Boolean
        Error 5
    End Function

    Public Sub IFBlock()
        'Will it go if block or somewhere else.
        On Error Resume Next
        Console.WriteLine("*********************************************")
        Console.WriteLine("IF Block Test")
        If GooIF(0) Then
            Console.WriteLine("If Block")
        ElseIf GooIF(2) Then 'Cause and Error
            Console.WriteLine("ElseIf Block")
        Else
            Console.WriteLine("Else Block")
        End If
        Console.WriteLine("End")
    End Sub

    Function GooIF(i As Integer) As Boolean
        If i = 0 Then
            Return False
        ElseIf i = 1 Then
            Return True
        Else
            Error 5
        End If
    End Function

    Public Sub ElseiFBlock_With_ANDALSO()
        On Error Resume Next

        Dim a = 1
        Console.WriteLine("*********************************************")
        Console.WriteLine("ELSEIF Block Test")
        If a = 1 AndAlso GooELSEIF(0) Then
            Console.WriteLine("If Block")
        ElseIf a = 1 AndAlso GooELSEIF(2) Then 'Cause and Error
            Console.WriteLine("ElseIf Block")
        Else
            Console.WriteLine("Else Block")
        End If
        Console.WriteLine("End")
    End Sub

    Function GooELSEIF(i As Integer) As Boolean
        If i = 0 Then
            Return False
        ElseIf i = 1 Then
            Return True
        Else
            Error 5
        End If
    End Function
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim CompilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[*********************************************
IF Block(1) Test
If Block
End
*********************************************
IF Block Test
ElseIf Block
End
*********************************************
ELSEIF Block Test
ElseIf Block
End]]>)
 
            'Check IF For the resume points
            CompilationVerifier.VerifyIL("Module1.IFBlock_1", <![CDATA[{
  // Code size      202 (0xca)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "*********************************************"
    IL_000e:  call       "Sub System.Console.WriteLine(String)"
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  ldstr      "IF Block(1) Test"
    IL_001a:  call       "Sub System.Console.WriteLine(String)"
    IL_001f:  ldc.i4.4
    IL_0020:  stloc.2
    IL_0021:  call       "Function Module1.Goo_IF() As Boolean"
    IL_0026:  brfalse.s  IL_0036
    IL_0028:  ldc.i4.5
    IL_0029:  stloc.2
    IL_002a:  ldstr      "If Block"
    IL_002f:  call       "Sub System.Console.WriteLine(String)"
    IL_0034:  br.s       IL_0042
    IL_0036:  ldc.i4.7
    IL_0037:  stloc.2
    IL_0038:  ldstr      "Else Block"
    IL_003d:  call       "Sub System.Console.WriteLine(String)"
    IL_0042:  ldc.i4.8
    IL_0043:  stloc.2
    IL_0044:  ldstr      "End"
    IL_0049:  call       "Sub System.Console.WriteLine(String)"
    IL_004e:  leave.s    IL_00c1
    IL_0050:  ldloc.1
    IL_0051:  ldc.i4.1
    IL_0052:  add
    IL_0053:  ldc.i4.0
    IL_0054:  stloc.1
    IL_0055:  switch    (
    IL_0082,
    IL_0000,
    IL_0007,
    IL_0013,
    IL_001f,
    IL_0028,
    IL_0042,
    IL_0036,
    IL_0042,
    IL_004e)
    IL_0082:  leave.s    IL_00b6
    IL_0084:  ldloc.2
    IL_0085:  stloc.1
    IL_0086:  ldloc.0
    IL_0087:  switch    (
    IL_0094,
    IL_0050)
    IL_0094:  leave.s    IL_00b6
  }
    filter
  {
    IL_0096:  isinst     "System.Exception"
    IL_009b:  ldnull
    IL_009c:  cgt.un
    IL_009e:  ldloc.0
    IL_009f:  ldc.i4.0
    IL_00a0:  cgt.un
    IL_00a2:  and
    IL_00a3:  ldloc.1
    IL_00a4:  ldc.i4.0
    IL_00a5:  ceq
    IL_00a7:  and
    IL_00a8:  endfilter
  }  // end filter
  {  // handler
    IL_00aa:  castclass  "System.Exception"
    IL_00af:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00b4:  leave.s    IL_0084
  }
    IL_00b6:  ldc.i4     0x800a0033
    IL_00bb:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_00c0:  throw
    IL_00c1:  ldloc.1
    IL_00c2:  brfalse.s  IL_00c9
    IL_00c4:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_00c9:  ret
  }]]>)
            CompilationVerifier.VerifyIL("Module1.IFBlock", <![CDATA[{
  // Code size      241 (0xf1)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "*********************************************"
    IL_000e:  call       "Sub System.Console.WriteLine(String)"
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  ldstr      "IF Block Test"
    IL_001a:  call       "Sub System.Console.WriteLine(String)"
    IL_001f:  ldc.i4.4
    IL_0020:  stloc.2
    IL_0021:  ldc.i4.0
    IL_0022:  call       "Function Module1.GooIF(Integer) As Boolean"
    IL_0027:  brfalse.s  IL_0037
    IL_0029:  ldc.i4.5
    IL_002a:  stloc.2
    IL_002b:  ldstr      "If Block"
    IL_0030:  call       "Sub System.Console.WriteLine(String)"
    IL_0035:  br.s       IL_005c
    IL_0037:  ldc.i4.7
    IL_0038:  stloc.2
    IL_0039:  ldc.i4.2
    IL_003a:  call       "Function Module1.GooIF(Integer) As Boolean"
    IL_003f:  brfalse.s  IL_004f
    IL_0041:  ldc.i4.8
    IL_0042:  stloc.2
    IL_0043:  ldstr      "ElseIf Block"
    IL_0048:  call       "Sub System.Console.WriteLine(String)"
    IL_004d:  br.s       IL_005c
    IL_004f:  ldc.i4.s   10
    IL_0051:  stloc.2
    IL_0052:  ldstr      "Else Block"
    IL_0057:  call       "Sub System.Console.WriteLine(String)"
    IL_005c:  ldc.i4.s   11
    IL_005e:  stloc.2
    IL_005f:  ldstr      "End"
    IL_0064:  call       "Sub System.Console.WriteLine(String)"
    IL_0069:  leave.s    IL_00e8
    IL_006b:  ldloc.1
    IL_006c:  ldc.i4.1
    IL_006d:  add
    IL_006e:  ldc.i4.0
    IL_006f:  stloc.1
    IL_0070:  switch    (
        IL_00a9,
        IL_0000,
        IL_0007,
        IL_0013,
        IL_001f,
        IL_0029,
        IL_005c,
        IL_0037,
        IL_0041,
        IL_005c,
        IL_004f,
        IL_005c,
        IL_0069)
    IL_00a9:  leave.s    IL_00dd
    IL_00ab:  ldloc.2
    IL_00ac:  stloc.1
    IL_00ad:  ldloc.0
    IL_00ae:  switch    (
        IL_00bb,
        IL_006b)
    IL_00bb:  leave.s    IL_00dd
  }
  filter
  {
    IL_00bd:  isinst     "System.Exception"
    IL_00c2:  ldnull
    IL_00c3:  cgt.un
    IL_00c5:  ldloc.0
    IL_00c6:  ldc.i4.0
    IL_00c7:  cgt.un
    IL_00c9:  and
    IL_00ca:  ldloc.1
    IL_00cb:  ldc.i4.0
    IL_00cc:  ceq
    IL_00ce:  and
    IL_00cf:  endfilter
  }  // end filter
  {  // handler
    IL_00d1:  castclass  "System.Exception"
    IL_00d6:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00db:  leave.s    IL_00ab
  }
  IL_00dd:  ldc.i4     0x800a0033
  IL_00e2:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00e7:  throw
  IL_00e8:  ldloc.1
  IL_00e9:  brfalse.s  IL_00f0
  IL_00eb:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_00f0:  ret
}]]>)
            CompilationVerifier.VerifyIL("Module1.ElseiFBlock_With_ANDALSO", <![CDATA[{
  // Code size      261 (0x105)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Integer V_3) //a
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.1
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldc.i4.1
    IL_000a:  stloc.3
    IL_000b:  ldc.i4.3
    IL_000c:  stloc.2
    IL_000d:  ldstr      "*********************************************"
    IL_0012:  call       "Sub System.Console.WriteLine(String)"
    IL_0017:  ldc.i4.4
    IL_0018:  stloc.2
    IL_0019:  ldstr      "ELSEIF Block Test"
    IL_001e:  call       "Sub System.Console.WriteLine(String)"
    IL_0023:  ldc.i4.5
    IL_0024:  stloc.2
    IL_0025:  ldloc.3
    IL_0026:  ldc.i4.1
    IL_0027:  bne.un.s   IL_003f
    IL_0029:  ldc.i4.0
    IL_002a:  call       "Function Module1.GooELSEIF(Integer) As Boolean"
    IL_002f:  brfalse.s  IL_003f
    IL_0031:  ldc.i4.6
    IL_0032:  stloc.2
    IL_0033:  ldstr      "If Block"
    IL_0038:  call       "Sub System.Console.WriteLine(String)"
    IL_003d:  br.s       IL_0069
    IL_003f:  ldc.i4.8
    IL_0040:  stloc.2
    IL_0041:  ldloc.3
    IL_0042:  ldc.i4.1
    IL_0043:  bne.un.s   IL_005c
    IL_0045:  ldc.i4.2
    IL_0046:  call       "Function Module1.GooELSEIF(Integer) As Boolean"
    IL_004b:  brfalse.s  IL_005c
    IL_004d:  ldc.i4.s   9
    IL_004f:  stloc.2
    IL_0050:  ldstr      "ElseIf Block"
    IL_0055:  call       "Sub System.Console.WriteLine(String)"
    IL_005a:  br.s       IL_0069
    IL_005c:  ldc.i4.s   11
    IL_005e:  stloc.2
    IL_005f:  ldstr      "Else Block"
    IL_0064:  call       "Sub System.Console.WriteLine(String)"
    IL_0069:  ldc.i4.s   12
    IL_006b:  stloc.2
    IL_006c:  ldstr      "End"
    IL_0071:  call       "Sub System.Console.WriteLine(String)"
    IL_0076:  leave      IL_00fc
    IL_007b:  ldloc.1
    IL_007c:  ldc.i4.1
    IL_007d:  add
    IL_007e:  ldc.i4.0
    IL_007f:  stloc.1
    IL_0080:  switch    (
        IL_00bd,
        IL_0000,
        IL_0007,
        IL_000b,
        IL_0017,
        IL_0023,
        IL_0031,
        IL_0069,
        IL_003f,
        IL_004d,
        IL_0069,
        IL_005c,
        IL_0069,
        IL_0076)
    IL_00bd:  leave.s    IL_00f1
    IL_00bf:  ldloc.2
    IL_00c0:  stloc.1
    IL_00c1:  ldloc.0
    IL_00c2:  switch    (
        IL_00cf,
        IL_007b)
    IL_00cf:  leave.s    IL_00f1
  }
  filter
  {
    IL_00d1:  isinst     "System.Exception"
    IL_00d6:  ldnull
    IL_00d7:  cgt.un
    IL_00d9:  ldloc.0
    IL_00da:  ldc.i4.0
    IL_00db:  cgt.un
    IL_00dd:  and
    IL_00de:  ldloc.1
    IL_00df:  ldc.i4.0
    IL_00e0:  ceq
    IL_00e2:  and
    IL_00e3:  endfilter
  }  // end filter
  {  // handler
    IL_00e5:  castclass  "System.Exception"
    IL_00ea:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_00ef:  leave.s    IL_00bf
  }
  IL_00f1:  ldc.i4     0x800a0033
  IL_00f6:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_00fb:  throw
  IL_00fc:  ldloc.1
  IL_00fd:  brfalse.s  IL_0104
  IL_00ff:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0104:  ret
}]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_ResumeWithSelectCase()
            'This verifies that resume next will resumes outside the select caser block rather than at the next case statement or within the block            
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        On Error GoTo handler
        Console.WriteLine("Before Select")
        Select Case goo
            Case 1
                Console.WriteLine("1")
            Case 2
                Console.WriteLine("2")
            Case Else
                Console.WriteLine("else")
        End Select
        Console.WriteLine("After Case")
        Exit Sub
handler:
        Console.WriteLine("In Handler")
        Resume Next
    End Sub

    Function goo()
        Error 1
    End Function
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim CompilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before Select
In Handler
After Case]]>)
 
            'Check IF For the resume points
            CompilationVerifier.VerifyIL("Module1.Main", <![CDATA[
{
  // Code size      312 (0x138)
  .maxstack  3
  .locals init (Integer V_0,
                Integer V_1,
                Integer V_2,
                Object V_3)
  .try
  {
    IL_0000:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_0005:  ldc.i4.2
    IL_0006:  stloc.0
    IL_0007:  ldc.i4.2
    IL_0008:  stloc.2
    IL_0009:  ldstr      "Before Select"
    IL_000e:  call       "Sub System.Console.WriteLine(String)"
    IL_0013:  ldc.i4.3
    IL_0014:  stloc.2
    IL_0015:  call       "Function Module1.goo() As Object"
    IL_001a:  stloc.3
    IL_001b:  ldc.i4.5
    IL_001c:  stloc.2
    IL_001d:  ldloc.3
    IL_001e:  ldc.i4.1
    IL_001f:  box        "Integer"
    IL_0024:  ldc.i4.0
    IL_0025:  call       "Function Microsoft.VisualBasic.CompilerServices.Operators.ConditionalCompareObjectEqual(Object, Object, Boolean) As Boolean"
    IL_002a:  brfalse.s  IL_003a
    IL_002c:  ldc.i4.6
    IL_002d:  stloc.2
    IL_002e:  ldstr      "1"
    IL_0033:  call       "Sub System.Console.WriteLine(String)"
    IL_0038:  br.s       IL_0067
    IL_003a:  ldc.i4.8
    IL_003b:  stloc.2
    IL_003c:  ldloc.3
    IL_003d:  ldc.i4.2
    IL_003e:  box        "Integer"
    IL_0043:  ldc.i4.0
    IL_0044:  call       "Function Microsoft.VisualBasic.CompilerServices.Operators.ConditionalCompareObjectEqual(Object, Object, Boolean) As Boolean"
    IL_0049:  brfalse.s  IL_005a
    IL_004b:  ldc.i4.s   9
    IL_004d:  stloc.2
    IL_004e:  ldstr      "2"
    IL_0053:  call       "Sub System.Console.WriteLine(String)"
    IL_0058:  br.s       IL_0067
    IL_005a:  ldc.i4.s   11
    IL_005c:  stloc.2
    IL_005d:  ldstr      "else"
    IL_0062:  call       "Sub System.Console.WriteLine(String)"
    IL_0067:  ldc.i4.s   12
    IL_0069:  stloc.2
    IL_006a:  ldstr      "After Case"
    IL_006f:  call       "Sub System.Console.WriteLine(String)"
    IL_0074:  br.s       IL_0099
    IL_0076:  ldc.i4.s   14
    IL_0078:  stloc.2
    IL_0079:  ldstr      "In Handler"
    IL_007e:  call       "Sub System.Console.WriteLine(String)"
    IL_0083:  ldc.i4.s   15
    IL_0085:  stloc.2
    IL_0086:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
    IL_008b:  ldloc.1
    IL_008c:  brtrue.s   IL_009e
    IL_008e:  ldc.i4     0x800a0014
    IL_0093:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
    IL_0098:  throw
    IL_0099:  leave      IL_012f
    IL_009e:  ldloc.1
    IL_009f:  ldc.i4.1
    IL_00a0:  add
    IL_00a1:  ldc.i4.0
    IL_00a2:  stloc.1
    IL_00a3:  switch    (
        IL_00ec,
        IL_0000,
        IL_0007,
        IL_0013,
        IL_0067,
        IL_001b,
        IL_002c,
        IL_0067,
        IL_003a,
        IL_004b,
        IL_0067,
        IL_005a,
        IL_0067,
        IL_0099,
        IL_0076,
        IL_0083,
        IL_0099)
    IL_00ec:  leave.s    IL_0124
    IL_00ee:  ldloc.2
    IL_00ef:  stloc.1
    IL_00f0:  ldloc.0
    IL_00f1:  switch    (
        IL_0102,
        IL_009e,
        IL_0076)
    IL_0102:  leave.s    IL_0124
  }
  filter
  {
    IL_0104:  isinst     "System.Exception"
    IL_0109:  ldnull
    IL_010a:  cgt.un
    IL_010c:  ldloc.0
    IL_010d:  ldc.i4.0
    IL_010e:  cgt.un
    IL_0110:  and
    IL_0111:  ldloc.1
    IL_0112:  ldc.i4.0
    IL_0113:  ceq
    IL_0115:  and
    IL_0116:  endfilter
  }  // end filter
  {  // handler
    IL_0118:  castclass  "System.Exception"
    IL_011d:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.SetProjectError(System.Exception)"
    IL_0122:  leave.s    IL_00ee
  }
  IL_0124:  ldc.i4     0x800a0033
  IL_0129:  call       "Function Microsoft.VisualBasic.CompilerServices.ProjectData.CreateProjectError(Integer) As System.Exception"
  IL_012e:  throw
  IL_012f:  ldloc.1
  IL_0130:  brfalse.s  IL_0137
  IL_0132:  call       "Sub Microsoft.VisualBasic.CompilerServices.ProjectData.ClearProjectError()"
  IL_0137:  ret
}]]>)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_ResumeWithSelectCase_Error_On_Case()
            'This verifies that resume next will resumes 
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[Imports System

        Module Module1
            Sub Main()
                'Will Go In Block, even though error occurred in case statement 
                On Error GoTo handler
                Dim i = 1
                Console.WriteLine("Before Select")
                Select Case i
                    Case goo()
                        Console.WriteLine("1")
                    Case 2
                        Console.WriteLine("2")
                    Case Else
                        Console.WriteLine("else")
                End Select
                Console.WriteLine("After Case")
                Exit Sub
handler:
                Console.WriteLine("In Handler")
                Resume Next
            End Sub

            Function goo()
                Error 1
            End Function
        End Module


        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim CompilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before Select
In Handler
1
After Case]]>)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_ResumeWithSelectCase_Error_On_Case_Condition()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[Imports System

        Module Module1
            Sub Main()
                'Will Go In Block, even though error occurred in case statement 
                On Error GoTo handler
                Dim i = 1
                Console.WriteLine("Before Select")
                Select Case i
                    Case goo()
                        Console.WriteLine("1")
                    Case 2
                        Console.WriteLine("2")
                    Case Else
                        Console.WriteLine("else")
                End Select
                Console.WriteLine("After Case")
                Exit Sub
handler:
                Console.WriteLine("In Handler")
                Resume Next
            End Sub

            Function goo()
                Error 1
            End Function
        End Module


        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim CompilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before Select
In Handler
1
After Case]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub OnError_ResumeWithSelectCase_Error_On_Case_Condition_Multiple()
 
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    'Will Go In Block, even though error occurred 
    'It Will not try and evaluate additional items in case
    Sub Main()
        On Error GoTo handler
        Dim i = 1
        Console.WriteLine("Before Select")
        Select Case i
            Case i = goo(), 1
                Console.WriteLine("1")
            Case 2
                Console.WriteLine("2")
            Case Else
                Console.WriteLine("else")
        End Select
        Console.WriteLine("After Case")
        Exit Sub
handler:
        Console.WriteLine("In Handler")
        Resume Next
    End Sub

    Function goo()
        Error 1
    End Function
End Module
        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            Dim CompilationVerifier = CompileAndVerify(compilation, expectedOutput:=<![CDATA[Before Select
In Handler
1
After Case]]>)
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorObject()
            'We are causing the error by throwing an exception or by using the Error or Err.Raise
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System
Imports Microsoft.VisualBasic

Module Module1
    Sub Main()
        Dim saveCulture = System.Threading.Thread.CurrentThread.CurrentCulture
        Dim saveUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture
        System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture
        Try
            ByException()
            ByError()
            ByErrorRaise()
        Finally
            System.Threading.Thread.CurrentThread.CurrentCulture = saveCulture
            System.Threading.Thread.CurrentThread.CurrentUICulture = saveUICulture
        End Try
    End Sub

    Sub ByException()
        On Error GoTo Handler
        Console.Write("Start")
        Throw New DivideByZeroException()
        Exit Sub
Handler:
        Console.Write("Handler")
        Console.Write(Err.Number)
        Console.Write(Err.Description)
    End Sub

    Sub ByError()
        On Error GoTo Handler
        Console.Write("Start")
        Error 11
        Exit Sub
Handler:
        Console.Write("Handler")
        Console.Write(Err.Number)
        Console.Write(Err.Description)
    End Sub

Sub ByErrorRaise()
        On Error GoTo Handler
        Console.Write("Start")
        Err.Raise(12)
        Exit Sub
Handler:
        Console.Write("Handler")
        Console.Write(Err.Number)
        Console.Write(Err.Description)
    End Sub
End Module

        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[StartHandler11Attempted to divide by zero.StartHandler11Division by zero.StartHandler12Application-defined or object-defined error.]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorHandler_ResumeNext_ErrorObjectFunctionality()
            Dim compilationDef =
    <compilation name="ErrorHandlerTest">
        <file name="a.vb">
Imports System
Imports Microsoft.VisualBasic
 
Module Module1
    Sub Main()
        Dim saveCulture = System.Threading.Thread.CurrentThread.CurrentCulture
        Dim saveUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture
        System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture
        Try
            Test()
        Finally
            System.Threading.Thread.CurrentThread.CurrentCulture = saveCulture
            System.Threading.Thread.CurrentThread.CurrentUICulture = saveUICulture
        End Try
    End Sub
 
    Sub Test()
        Dim Msg As String
        ' If an error occurs, construct an error message.
        On Error Resume Next   ' Defer error handling.
 
        Err.Clear()
 
        Err.Raise(6)   ' Generate an "Overflow" error.
        ' Check for error, then show message.
 
        Msg = "Error # " &amp; Str(Err.Number) &amp; " was generated by " &amp; Err.Source &amp; ControlChars.CrLf &amp; Err.Description
        Console.WriteLine(Msg)
 
        Err.Clear()
        Msg = "Error # " &amp; Str(Err.Number) &amp; " was generated by " &amp; Err.Source &amp; ControlChars.CrLf &amp; Err.Description
        Console.WriteLine(Msg)
 
        Err.Raise(5)   ' Generate an "Overflow" error.
        Msg = "Error # " &amp; Str(Err.Number) &amp; " was generated by " &amp; Err.Source &amp; ControlChars.CrLf &amp; Err.Description
        Console.WriteLine(Msg)
    End Sub
End Module
</file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(compilationDef, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[Error #  6 was generated by ErrorHandlerTest
Overflow.
Error #  0 was generated by 

Error #  5 was generated by ErrorHandlerTest
Procedure call or argument is not valid.
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorHandler_InCollectionInitializer()
 
            'As we are handling the error in the Add, we should handle two items to the collection
            'In other collection initializer we would result in all or nothing behavior
            Dim compilationDef =
        <compilation name="ErrorHandlerTest">
            <file name="a.vb">
Imports System
Imports System.Runtime.CompilerServices
Imports System.Collections.Generic
 
'Used my own attribute for Extension attribute based upon necessary signature rather than adding a specific reference to 
'System.Core which contains this normally
 
Namespace System.Runtime.CompilerServices
    &lt;AttributeUsage(AttributeTargets.Assembly Or AttributeTargets.Class Or AttributeTargets.Method, AllowMultiple:=False, Inherited:=False)&gt; Class ExtensionAttribute
        Inherits Attribute
    End Class
End Namespace
 
Module Module1
    Sub Main()
        Dim x As New System.Collections.Generic.Stack(Of Integer) From {1, 2, 3}
        Console.WriteLine(x.Count)
    End Sub
 
    &lt;System.Runtime.CompilerServices.Extension&gt;
    Sub Add(ByRef x As System.Collections.Generic.Stack(Of Integer), y As Integer)
        On Error GoTo handler
        If y = 2 Then
            Error 1
        End If
        x.Push(y)
        Exit Sub
handler:
        Exit Sub
    End Sub
End Module
        </file>
        </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(compilationDef, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="2")
 
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorHandler_InCollectionInitializer_2()
            'As we are handling the error in the Add, we should handle two items to the collection
            'This should result in Nothing - All or nothing 
            Dim compilationDef =
    <compilation name="ErrorHandlerTest">
        <file name="a.vb">
Imports System
Imports System.Runtime.CompilerServices
Imports System.Collections.Generic
 
 
Module Module1
    Sub Main()
        On Error Resume Next
        Dim lval = Long.MaxValue
        Dim x As New List(Of Integer) From {1, 2, lval}
        Console.WriteLine(If(x Is Nothing, "Nothing", x.Count.ToString))
    End Sub
End Module
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(compilationDef, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="Nothing")
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorHandler_InCollectionInitializer_3()
            'As we are handling the error in the Add, we should handle two items to the collection
            'This should result in Nothing - All or nothing 
            Dim compilationDef =
    <compilation name="ErrorHandlerTest">
        <file name="a.vb">
Imports System
Imports System.Runtime.CompilerServices
Imports System.Collections.Generic
 
Module Module1
    Sub Main()
        On Error Goto Handler
        Dim lval = Long.MaxValue
        Dim x As New List(Of Integer) From {1, 2, lval}
        Console.WriteLine(If(x Is Nothing, "Nothing", x.Count.ToString))
        exit sub
Handler:
    Resume Next
    End Sub
End Module
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(compilationDef, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:="Nothing")
        End Sub
 
        'As we are handling the error in the Add, we should handle two items to the collection
        'This should result in Nothing - All or nothing 
        Public Sub ErrorObjectResetAfterExitXXX_statement()
            'Error Object is reset after Exit Sub/Exit Function/Exit Property or Resume Next in the handler
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System

Module Module1
    Sub Main()
        Console.WriteLine("Method Resume Next")
        Err.Clear()
        Console.WriteLine("main:(Before)" & Err.Number)
        ErrorMethod()
        Console.WriteLine("main:(After)" & Err.Number)

        Console.WriteLine("Method Goto")
        Err.Clear()
        Console.WriteLine("main:(Before)" & Err.Number)
        Console.WriteLine(Err.Number)
        ErrorMethod_2()
        Console.WriteLine("main:(After)" & Err.Number)
        Console.WriteLine(Err.Number)

        Console.WriteLine("Method Resume Next")
        Err.Clear()
        Console.WriteLine("main:(Before)" & Err.Number)
        Console.WriteLine(Err.Number)
        ErrorMethod_3()
        Console.WriteLine("main:(After)" & Err.Number)
        Console.WriteLine(Err.Number)

        Console.WriteLine("Property Resume Next")
        Err.Clear()
        Console.WriteLine("main:(Before)" & Err.Number)
        Dim x = Prop_1
        Console.WriteLine("main:(After)" & Err.Number)

        Console.WriteLine("Property Goto")
        Err.Clear()
        Console.WriteLine("main:(Before)" & Err.Number)
        Console.WriteLine(Err.Number)
        x = Prop_2
        Console.WriteLine("main:(After)" & Err.Number)
        Console.WriteLine(Err.Number)

        Console.WriteLine("Property Resume Next")
        Err.Clear()
        Console.WriteLine("main:(Before)" & Err.Number)
        Console.WriteLine(Err.Number)
        x = Prop_2
        Console.WriteLine("main:(After)" & Err.Number)
        Console.WriteLine(Err.Number)
    End Sub

    Sub ErrorMethod()
        On Error Resume Next

        Err.Raise(5)
        Console.WriteLine("Resume Next:" & Err.Number)
    End Sub

    Sub ErrorMethod_2()
        On Error GoTo Handler
        Err.Raise(5)
        Exit Sub
Handler:
        Console.WriteLine("In Handler:" & Err.Number)
        Exit Sub
    End Sub

    Sub ErrorMethod_3()
        On Error GoTo Handler
        Err.Raise(5)
        Exit Sub
Handler:
        Console.WriteLine("In Handler:" & Err.Number)
        Resume Next
    End Sub

    Public ReadOnly Property Prop_1 As Integer
        Get
            On Error Resume Next

            Err.Raise(5)
            Console.WriteLine("Resume Next:" & Err.Number)
            Return 1
        End Get
    End Property

    Public ReadOnly Property Prop_2 As Integer
        Get
            On Error GoTo Handler
            Err.Raise(5)
            Return 1
            Exit Property
Handler:
            Console.WriteLine("In Handler:" & Err.Number)
            Exit Property
        End Get
    End Property

    Public ReadOnly Property Prop_3 As Integer
        Get
            On Error GoTo Handler
            Err.Raise(5)
            Return 1
            Exit Property
Handler:
            Console.WriteLine("In Handler:" & Err.Number)
            Resume Next
        End Get
    End Property
End Module        ]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[*****************************************
Before Error
Number:0
Source:
Description:
Erl:0GetException:Nothing
*****************************************
In Handler
Number:5
Source:ErrorHandling
Description:Procedure call or argument is not valid.
Erl:0
GetException:System.ArgumentException: Procedure call or argument is not valid.
   at Module1.Main()
*****************************************
After Clear
In Handler
Number:0
Source:
Description:
Erl:0
GetException:Nothing]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorObject_Properties()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System
Imports  Microsoft.VisualBasic

Module Module1
    Sub Main()
        Dim saveCulture = System.Threading.Thread.CurrentThread.CurrentCulture
        Dim saveUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture
        System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture
        Try
            Test()
        Finally
            System.Threading.Thread.CurrentThread.CurrentCulture = saveCulture
            System.Threading.Thread.CurrentThread.CurrentUICulture = saveUICulture
        End Try
    End Sub

    Sub Test()
        On Error GoTo handler
        Console.WriteLine("*****************************************")
        Console.WriteLine("Before Error")
        Console.WriteLine("Number:" & Err.Number)
        Console.WriteLine("Source:" & Err.Source)
        Console.WriteLine("Description:" & Err.Description)
        Console.WriteLine("Erl:" & Err.Erl)        
        Console.WriteLine("GetException:" & If(Err.GetException Is Nothing, "Nothing", Err.GetException.ToString))


        Error 5

        Exit Sub
handler:
        Console.WriteLine("*****************************************")
        Console.WriteLine("In Handler")
        Console.WriteLine("Number:" & Err.Number)
        Console.WriteLine("Source:" & Err.Source)
        Console.WriteLine("Description:" & Err.Description)
        Console.WriteLine("Erl:" & Err.Erl)        
        Console.WriteLine("GetException:" & If(Err.GetException Is Nothing, "Nothing", Err.GetException.ToString))

        Console.WriteLine("*****************************************")
        Console.WriteLine("After Clear")
        Err.Clear()
        Console.WriteLine("In Handler")
        Console.WriteLine("Number:" & Err.Number)
        Console.WriteLine("Source:" & Err.Source)
        Console.WriteLine("Description:" & Err.Description)
        Console.WriteLine("Erl:" & Err.Erl)        
        Console.WriteLine("GetException:" & If(Err.GetException Is Nothing, "Nothing", Err.GetException.ToString))
        Resume Next
    End Sub
End Module]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[*****************************************
Before Error
Number:0
Source:
Description:
Erl:0
GetException:Nothing
*****************************************
In Handler
Number:5
Source:ErrorHandling
Description:Procedure call or argument is not valid.
Erl:0
GetException:System.ArgumentException: Procedure call or argument is not valid.
   at Module1.Test()
*****************************************
After Clear
In Handler
Number:0
Source:
Description:
Erl:0
GetException:Nothing]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorObject_Properties_AfterGeneratedInDifferentWays()
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System
Imports  Microsoft.VisualBasic

Module Module1
    Sub Main()
        Dim saveCulture = System.Threading.Thread.CurrentThread.CurrentCulture
        Dim saveUICulture = System.Threading.Thread.CurrentThread.CurrentUICulture
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture
        System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.InvariantCulture
        Try
            Test()
        Finally
            System.Threading.Thread.CurrentThread.CurrentCulture = saveCulture
            System.Threading.Thread.CurrentThread.CurrentUICulture = saveUICulture
        End Try
    End Sub

    Sub Test()
        On Error GoTo handler
        Console.WriteLine("*****************************************")
        Console.WriteLine("Before Error")
        Console.WriteLine("Number:" & Err.Number)
        Console.WriteLine("Source:" & Err.Source)
        Console.WriteLine("Description:" & Err.Description)
        Console.WriteLine("Erl:" & Err.Erl)        
        Console.WriteLine("GetException:" & If(Err.GetException Is Nothing, "Nothing", Err.GetException.ToString))

        Console.WriteLine("WITH EXCEPTION")
        Throw New System.IO.FileNotFoundException
        Err.Clear()

        Console.WriteLine("WITH ERROR")
        Error 53
        Err.Clear()

        Console.WriteLine("WITH ERR.RAISE")
        Err.Raise(53)
        Exit Sub
handler:
        Console.WriteLine("*****************************************")
        Console.WriteLine("In Handler")
        Console.WriteLine("Number:" & Err.Number)
        Console.WriteLine("Source:" & Err.Source)
        Console.WriteLine("Description:" & Err.Description)
        Console.WriteLine("Erl:" & Err.Erl)        
        Console.WriteLine("GetException:" & If(Err.GetException Is Nothing, "Nothing", Err.GetException.ToString))

        Console.WriteLine("*****************************************")
        Console.WriteLine("After Clear")
        Err.Clear()
        Console.WriteLine("In Handler")
        Console.WriteLine("Number:" & Err.Number)
        Console.WriteLine("Source:" & Err.Source)
        Console.WriteLine("Description:" & Err.Description)
        Console.WriteLine("Erl:" & Err.Erl)    
        Console.WriteLine("GetException:" & If(Err.GetException Is Nothing, "Nothing", Err.GetException.ToString))
        Resume Next
    End Sub
End Module]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[   *****************************************
Before Error
Number:0
Source:
Description:
Erl:0
GetException:Nothing
WITH EXCEPTION
*****************************************
In Handler
Number:53
Source:ErrorHandling
Description:Unable to find the specified file.
Erl:0
GetException:System.IO.FileNotFoundException: Unable to find the specified file.
   at Module1.Test()
*****************************************
After Clear
In Handler
Number:0
Source:
Description:
Erl:0
GetException:Nothing
WITH ERROR
*****************************************
In Handler
Number:53
Source:ErrorHandling
Description:File not found.
Erl:0
GetException:System.IO.FileNotFoundException: File not found.
   at Module1.Test()
*****************************************
After Clear
In Handler
Number:0
Source:
Description:
Erl:0
GetException:Nothing
WITH ERR.RAISE
*****************************************
In Handler
Number:53
Source:ErrorHandling
Description:File not found.
Erl:0
GetException:System.IO.FileNotFoundException: File not found.
   at Microsoft.VisualBasic.ErrObject.Raise(Int32 Number, Object Source, Object Description, Object HelpFile, Object HelpContext)
   at Module1.Test()
*****************************************
After Clear
In Handler
Number:0
Source:
Description:
Erl:0
GetException:Nothing]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ErrorObject_Properties__DLLLastError()
            'The Err.LastDllError is reset without having to call the Err.Clear
            'Unsure why...
            Dim source =
    <compilation name="ErrorHandling">
        <file name="a.vb">
            <![CDATA[
Imports System
Imports  Microsoft.VisualBasic

Module Module1
  Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer

    Public Structure RECT
        Public Left As Integer
        Public Top As Integer
        Public Right As Integer
        Public Bottom As Integer
    End Structure

    Const ERROR_INVALID_WINDOW_HANDLE As Long = 1400
    Const ERROR_INVALID_WINDOW_HANDLE_DESCR As String = "Invalid window handle."

    Sub Main()
        ' Prints left, right, top, and bottom positions of a window in pixels.

        Dim rectWindow As RECT
        Dim HWND = 0 '//Intentional error for incorrect windows handle

        ' Pass in window handle and empty the data structure.
        ' If function returns 0, an error occurred.
        If GetWindowRect(hwnd, rectWindow) = 0 Then
            ' Check LastDllError and display a dialog box if the error
            ' occurred because an invalid handle was passed.
            Dim x As Integer = Err.LastDllError
            Console.WriteLine(x)
            If x = ERROR_INVALID_WINDOW_HANDLE Then
                Console.WriteLine(ERROR_INVALID_WINDOW_HANDLE_DESCR & "    Error!")
            Else
                Console.WriteLine(ERROR_INVALID_WINDOW_HANDLE_DESCR & "    Incorrect Behavior!")
            End If
            Console.WriteLine(Err.LastDllError)
        End If
    End Sub
End Module]]>
        </file>
    </compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
            CompileAndVerify(compilation, expectedOutput:=<![CDATA[1400
Invalid window handle.    Error!
1400]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ERL_01()
            Dim source =
<compilation>
    <file name="a.vb">
        <![CDATA[
Imports System
Imports Microsoft.VisualBasic

Module Program
    Sub Main()
        Dim x = Sub()
                    Try
100:
                        Throw New NotSupportedException()

                    Catch ex As Exception
                        System.Console.WriteLine(Err.Erl)
                    End Try
                End Sub

        x()

        Try
200:
            Throw New NotSupportedException()

        Catch ex As Exception
            System.Console.WriteLine(Err.Erl)
        End Try

    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
0
200
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ERL_02()
            Dim source =
<compilation>
    <file name="a.vb">
        <![CDATA[
Imports System
Imports Microsoft.VisualBasic

Module Program
    Sub Main()
        On Error GoTo Handler

100:
        Throw New NotSupportedException()
200:
        Throw New NotSupportedException()
300:
        Throw New NotSupportedException()

400:
L500:   System.Console.WriteLine("L500")
        Throw New NotSupportedException()

        Return

Handler:
        System.Console.WriteLine(Err.Erl)
        Resume Next
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
100
200
300
L500
400
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ERL_03()
            Dim source =
<compilation>
    <file name="a.vb">
        <![CDATA[
Imports System
Imports System.Collections.Generic
Imports Microsoft.VisualBasic

Module Program
    Sub Main()
        For Each x In Test2()
        Next
    End Sub

    Iterator Function Test2() As IEnumerable(Of Integer)
        Try
100:
            Throw New NotImplementedException()

        Catch ex As Exception
            System.Console.WriteLine(Err.Erl)
        End Try
    End Function
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
100
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ERL_04()
            Dim source =
<compilation>
    <file name="a.vb">
        <![CDATA[
Imports System
Imports Microsoft.VisualBasic

Module Program
    Sub Main()
        On Error GoTo Handler

100:
        Throw New NotSupportedException()
4000000000000000000:
        Throw New NotSupportedException()
300:
        Throw New NotSupportedException()

40000000000000:
L500:   System.Console.WriteLine("L500")
        Throw New NotSupportedException()

        Return

Handler:
        System.Console.WriteLine(Err.Erl)
        Resume Next
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            Dim compilationVerifier = CompileAndVerify(compilation,
                         expectedOutput:=
            <![CDATA[
100
0
300
L500
0
]]>)
        End Sub
 
        <ConditionalFact(GetType(WindowsDesktopOnly), Reason:="https://github.com/dotnet/roslyn/issues/28044")>
        Public Sub ERL_05()
            Dim source =
<compilation>
    <file name="a.vb">
        <![CDATA[
Imports System
Imports Microsoft.VisualBasic

Module Program
    Sub Main()
        On Error GoTo Handler

40000000000000000000:
        Throw New NotSupportedException()
        Return

Handler:
        System.Console.WriteLine(Err.Erl)
        Resume Next
    End Sub
End Module
    ]]>
    </file>
</compilation>
 
            Dim compilation = CreateCompilationWithMscorlib40AndVBRuntime(source, TestOptions.ReleaseExe)
 
            AssertTheseDiagnostics(compilation,
<expected>
BC30036: Overflow.
40000000000000000000:
~~~~~~~~~~~~~~~~~~~~
</expected>)
        End Sub
 
    End Class
End Namespace