diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.cs
index 0ca459f92..ff1d34741 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.cs
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.cs
@@ -97,6 +97,17 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
 			}
 			return false;
 		}
+
+		public void CatchWhenWithConditionWithoutExceptionVar()
+		{
+			int num = 0;
+			try {
+				throw new Exception();
+			} catch (Exception) when (num == 0) {
+				Console.WriteLine("jo");
+			}
+		}
+
 #endif
 
 		public bool SimpleTryFinally()
@@ -144,7 +155,7 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
 				Console.WriteLine("Try");
 			} catch (InvalidOperationException ex) {
 				Console.WriteLine(ex.Message);
-			} catch (Exception ex2) {
+			} catch (SystemException ex2) {
 				Console.WriteLine(ex2.Message);
 			} catch {
 				Console.WriteLine("other");
@@ -176,5 +187,7 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
 				}
 			}
 		}
+
+
 	}
-}
+}
\ No newline at end of file
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.il
index 3b306dbfc..a2159701a 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.il
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.17929
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.6.1055.0
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -10,7 +10,7 @@
   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
   .ver 4:0:0:0
 }
-.assembly lxxrs5dq
+.assembly vicbdq3v
 {
   .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
   .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
@@ -20,15 +20,15 @@
   .hash algorithm 0x00008004
   .ver 0:0:0:0
 }
-.module lxxrs5dq.dll
-// MVID: {82D6FFAF-FF9D-4E8C-AC93-080CC89EB80E}
+.module vicbdq3v.dll
+// MVID: {5E2AA050-D333-4323-8C5A-29B86C8D98BB}
 .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) 
 .imagebase 0x10000000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x02E30000
+// Image base: 0x01160000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -323,7 +323,7 @@
     // Code size       68 (0x44)
     .maxstack  1
     .locals init (class [mscorlib]System.InvalidOperationException V_0,
-             class [mscorlib]System.Exception V_1)
+             class [mscorlib]System.SystemException V_1)
     IL_0000:  nop
     .try
     {
@@ -347,7 +347,7 @@
       IL_001f:  leave.s    IL_0042
 
     }  // end handler
-    catch [mscorlib]System.Exception 
+    catch [mscorlib]System.SystemException 
     {
       IL_0021:  stloc.1
       IL_0022:  nop
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.il
index 6845c7f24..19e1de7c6 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.il
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.17929
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.6.1055.0
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -10,7 +10,7 @@
   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
   .ver 4:0:0:0
 }
-.assembly mydv32cl
+.assembly uidw4n1e
 {
   .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
   .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
@@ -20,15 +20,15 @@
   .hash algorithm 0x00008004
   .ver 0:0:0:0
 }
-.module mydv32cl.dll
-// MVID: {6B95C83E-B82F-493E-BD92-AF0A5E82F1B4}
+.module uidw4n1e.dll
+// MVID: {A6A100AA-2C72-4B40-9C9F-50DA438D4727}
 .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) 
 .imagebase 0x10000000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x014A0000
+// Image base: 0x00380000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -258,7 +258,7 @@
     // Code size       54 (0x36)
     .maxstack  1
     .locals init (class [mscorlib]System.InvalidOperationException V_0,
-             class [mscorlib]System.Exception V_1)
+             class [mscorlib]System.SystemException V_1)
     .try
     {
       IL_0000:  ldstr      "Try"
@@ -275,7 +275,7 @@
       IL_0018:  leave.s    IL_0035
 
     }  // end handler
-    catch [mscorlib]System.Exception 
+    catch [mscorlib]System.SystemException 
     {
       IL_001a:  stloc.1
       IL_001b:  ldloc.1
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.roslyn.il
index 3d18c07ed..ab43a0e40 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.roslyn.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.opt.roslyn.il
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.17929
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.6.1055.0
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -25,14 +25,14 @@
   .ver 0:0:0:0
 }
 .module ExceptionHandling.dll
-// MVID: {07FDA375-CD7B-478B-922A-E82E4CA881CF}
+// MVID: {A4875794-8C32-4802-A38C-B190A38BD06B}
 .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) 
 .imagebase 0x10000000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x02CE0000
+// Image base: 0x029B0000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -53,135 +53,136 @@
             instance void  MoveNext() cil managed
     {
       .override [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext
-      // Code size       242 (0xf2)
+      // Code size       240 (0xf0)
       .maxstack  3
       .locals init (int32 V_0,
-               bool V_1,
-               valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> V_2,
-               class [mscorlib]System.Exception V_3,
-               class [mscorlib]System.Exception V_4)
+               class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling V_1,
+               bool V_2,
+               valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> V_3,
+               class [mscorlib]System.Exception V_4,
+               class [mscorlib]System.Exception V_5)
       IL_0000:  ldarg.0
       IL_0001:  ldfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
       IL_0006:  stloc.0
+      IL_0007:  ldarg.0
+      IL_0008:  ldfld      class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>4__this'
+      IL_000d:  stloc.1
       .try
       {
-        IL_0007:  ldloc.0
-        IL_0008:  pop
-        IL_0009:  nop
+        IL_000e:  ldloc.0
+        IL_000f:  pop
+        IL_0010:  nop
         .try
         {
-          IL_000a:  ldloc.0
-          IL_000b:  brfalse.s  IL_0054
-
-          IL_000d:  ldstr      "Try"
-          IL_0012:  call       void [mscorlib]System.Console::WriteLine(string)
-          IL_0017:  ldarg.0
-          IL_0018:  ldfld      class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>4__this'
-          IL_001d:  callvirt   instance class [mscorlib]System.Threading.Tasks.Task`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling::T()
-          IL_0022:  callvirt   instance valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<!0> class [mscorlib]System.Threading.Tasks.Task`1<bool>::GetAwaiter()
-          IL_0027:  stloc.2
-          IL_0028:  ldloca.s   V_2
-          IL_002a:  call       instance bool valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>::get_IsCompleted()
-          IL_002f:  brtrue.s   IL_0070
-
-          IL_0031:  ldarg.0
-          IL_0032:  ldc.i4.0
-          IL_0033:  dup
-          IL_0034:  stloc.0
-          IL_0035:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
-          IL_003a:  ldarg.0
-          IL_003b:  ldloc.2
-          IL_003c:  stfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
-          IL_0041:  ldarg.0
-          IL_0042:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
-          IL_0047:  ldloca.s   V_2
-          IL_0049:  ldarg.0
-          IL_004a:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::AwaitUnsafeOnCompleted<valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>,valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'>(!!0&,
+          IL_0011:  ldloc.0
+          IL_0012:  brfalse.s  IL_0056
+
+          IL_0014:  ldstr      "Try"
+          IL_0019:  call       void [mscorlib]System.Console::WriteLine(string)
+          IL_001e:  ldloc.1
+          IL_001f:  callvirt   instance class [mscorlib]System.Threading.Tasks.Task`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling::T()
+          IL_0024:  callvirt   instance valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<!0> class [mscorlib]System.Threading.Tasks.Task`1<bool>::GetAwaiter()
+          IL_0029:  stloc.3
+          IL_002a:  ldloca.s   V_3
+          IL_002c:  call       instance bool valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>::get_IsCompleted()
+          IL_0031:  brtrue.s   IL_0072
+
+          IL_0033:  ldarg.0
+          IL_0034:  ldc.i4.0
+          IL_0035:  dup
+          IL_0036:  stloc.0
+          IL_0037:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+          IL_003c:  ldarg.0
+          IL_003d:  ldloc.3
+          IL_003e:  stfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
+          IL_0043:  ldarg.0
+          IL_0044:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
+          IL_0049:  ldloca.s   V_3
+          IL_004b:  ldarg.0
+          IL_004c:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::AwaitUnsafeOnCompleted<valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>,valuetype ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'>(!!0&,
                                                                                                                                                                                                                                                                                                                                                                           !!1&)
-          IL_004f:  leave      IL_00f1
-
-          IL_0054:  ldarg.0
-          IL_0055:  ldfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
-          IL_005a:  stloc.2
-          IL_005b:  ldarg.0
-          IL_005c:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
-          IL_0061:  initobj    valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>
-          IL_0067:  ldarg.0
-          IL_0068:  ldc.i4.m1
-          IL_0069:  dup
-          IL_006a:  stloc.0
-          IL_006b:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
-          IL_0070:  ldloca.s   V_2
-          IL_0072:  call       instance !0 valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>::GetResult()
-          IL_0077:  ldloca.s   V_2
-          IL_0079:  initobj    valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>
-          IL_007f:  stloc.1
-          IL_0080:  leave.s    IL_00dd
+          IL_0051:  leave      IL_00ef
+
+          IL_0056:  ldarg.0
+          IL_0057:  ldfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
+          IL_005c:  stloc.3
+          IL_005d:  ldarg.0
+          IL_005e:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
+          IL_0063:  initobj    valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>
+          IL_0069:  ldarg.0
+          IL_006a:  ldc.i4.m1
+          IL_006b:  dup
+          IL_006c:  stloc.0
+          IL_006d:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+          IL_0072:  ldloca.s   V_3
+          IL_0074:  call       instance !0 valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>::GetResult()
+          IL_0079:  stloc.2
+          IL_007a:  leave.s    IL_00db
 
         }  // end .try
         filter
         {
-          IL_0082:  isinst     [mscorlib]System.Exception
-          IL_0087:  dup
-          IL_0088:  brtrue.s   IL_008e
-
-          IL_008a:  pop
-          IL_008b:  ldc.i4.0
-          IL_008c:  br.s       IL_00a6
-
-          IL_008e:  stloc.3
-          IL_008f:  ldloc.3
-          IL_0090:  isinst     [mscorlib]System.ArgumentException
-          IL_0095:  brtrue.s   IL_00a2
-
-          IL_0097:  ldloc.3
-          IL_0098:  isinst     [mscorlib]System.IO.IOException
-          IL_009d:  ldnull
-          IL_009e:  cgt.un
-          IL_00a0:  br.s       IL_00a3
-
-          IL_00a2:  ldc.i4.1
-          IL_00a3:  ldc.i4.0
-          IL_00a4:  cgt.un
-          IL_00a6:  endfilter
+          IL_007c:  isinst     [mscorlib]System.Exception
+          IL_0081:  dup
+          IL_0082:  brtrue.s   IL_0088
+
+          IL_0084:  pop
+          IL_0085:  ldc.i4.0
+          IL_0086:  br.s       IL_00a3
+
+          IL_0088:  stloc.s    V_4
+          IL_008a:  ldloc.s    V_4
+          IL_008c:  isinst     [mscorlib]System.ArgumentException
+          IL_0091:  brtrue.s   IL_009f
+
+          IL_0093:  ldloc.s    V_4
+          IL_0095:  isinst     [mscorlib]System.IO.IOException
+          IL_009a:  ldnull
+          IL_009b:  cgt.un
+          IL_009d:  br.s       IL_00a0
+
+          IL_009f:  ldc.i4.1
+          IL_00a0:  ldc.i4.0
+          IL_00a1:  cgt.un
+          IL_00a3:  endfilter
         }  // end filter
         {  // handler
-          IL_00a8:  pop
-          IL_00a9:  ldstr      "CatchException ex: "
-          IL_00ae:  ldloc.3
-          IL_00af:  callvirt   instance string [mscorlib]System.Object::ToString()
-          IL_00b4:  call       string [mscorlib]System.String::Concat(string,
+          IL_00a5:  pop
+          IL_00a6:  ldstr      "CatchException ex: "
+          IL_00ab:  ldloc.s    V_4
+          IL_00ad:  callvirt   instance string [mscorlib]System.Object::ToString()
+          IL_00b2:  call       string [mscorlib]System.String::Concat(string,
                                                                       string)
-          IL_00b9:  call       void [mscorlib]System.Console::WriteLine(string)
-          IL_00be:  leave.s    IL_00c0
+          IL_00b7:  call       void [mscorlib]System.Console::WriteLine(string)
+          IL_00bc:  leave.s    IL_00be
 
         }  // end handler
-        IL_00c0:  ldc.i4.0
-        IL_00c1:  stloc.1
-        IL_00c2:  leave.s    IL_00dd
+        IL_00be:  ldc.i4.0
+        IL_00bf:  stloc.2
+        IL_00c0:  leave.s    IL_00db
 
       }  // end .try
       catch [mscorlib]System.Exception 
       {
-        IL_00c4:  stloc.s    V_4
-        IL_00c6:  ldarg.0
-        IL_00c7:  ldc.i4.s   -2
-        IL_00c9:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
-        IL_00ce:  ldarg.0
-        IL_00cf:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
-        IL_00d4:  ldloc.s    V_4
-        IL_00d6:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetException(class [mscorlib]System.Exception)
-        IL_00db:  leave.s    IL_00f1
+        IL_00c2:  stloc.s    V_5
+        IL_00c4:  ldarg.0
+        IL_00c5:  ldc.i4.s   -2
+        IL_00c7:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+        IL_00cc:  ldarg.0
+        IL_00cd:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
+        IL_00d2:  ldloc.s    V_5
+        IL_00d4:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetException(class [mscorlib]System.Exception)
+        IL_00d9:  leave.s    IL_00ef
 
       }  // end handler
-      IL_00dd:  ldarg.0
-      IL_00de:  ldc.i4.s   -2
-      IL_00e0:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
-      IL_00e5:  ldarg.0
-      IL_00e6:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
-      IL_00eb:  ldloc.1
-      IL_00ec:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetResult(!0)
-      IL_00f1:  ret
+      IL_00db:  ldarg.0
+      IL_00dc:  ldc.i4.s   -2
+      IL_00de:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+      IL_00e3:  ldarg.0
+      IL_00e4:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
+      IL_00e9:  ldloc.2
+      IL_00ea:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetResult(!0)
+      IL_00ef:  ret
     } // end of method '<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::MoveNext
 
     .method private hidebysig newslot virtual final 
@@ -478,6 +479,48 @@
     IL_0038:  ret
   } // end of method ExceptionHandling::SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr
 
+  .method public hidebysig instance void 
+          CatchWhenWithConditionWithoutExceptionVar() cil managed
+  {
+    // Code size       44 (0x2c)
+    .maxstack  2
+    .locals init (int32 V_0)
+    IL_0000:  ldc.i4.0
+    IL_0001:  stloc.0
+    .try
+    {
+      IL_0002:  newobj     instance void [mscorlib]System.Exception::.ctor()
+      IL_0007:  throw
+
+    }  // end .try
+    filter
+    {
+      IL_0008:  isinst     [mscorlib]System.Exception
+      IL_000d:  dup
+      IL_000e:  brtrue.s   IL_0014
+
+      IL_0010:  pop
+      IL_0011:  ldc.i4.0
+      IL_0012:  br.s       IL_001c
+
+      IL_0014:  pop
+      IL_0015:  ldloc.0
+      IL_0016:  ldc.i4.0
+      IL_0017:  ceq
+      IL_0019:  ldc.i4.0
+      IL_001a:  cgt.un
+      IL_001c:  endfilter
+    }  // end filter
+    {  // handler
+      IL_001e:  pop
+      IL_001f:  ldstr      "jo"
+      IL_0024:  call       void [mscorlib]System.Console::WriteLine(string)
+      IL_0029:  leave.s    IL_002b
+
+    }  // end handler
+    IL_002b:  ret
+  } // end of method ExceptionHandling::CatchWhenWithConditionWithoutExceptionVar
+
   .method public hidebysig instance bool 
           SimpleTryFinally() cil managed
   {
@@ -586,7 +629,7 @@
       IL_0016:  leave.s    IL_0031
 
     }  // end handler
-    catch [mscorlib]System.Exception 
+    catch [mscorlib]System.SystemException 
     {
       IL_0018:  callvirt   instance string [mscorlib]System.Exception::get_Message()
       IL_001d:  call       void [mscorlib]System.Console::WriteLine(string)
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.roslyn.il
index a2b3cfc11..6270c48d0 100644
--- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.roslyn.il
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExceptionHandling.roslyn.il
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.17929
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.6.1055.0
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -25,14 +25,14 @@
   .ver 0:0:0:0
 }
 .module ExceptionHandling.dll
-// MVID: {07B52948-317B-4C30-A2A5-A7482568AD67}
+// MVID: {9413A96F-08C3-4F13-A800-C6BE70786A44}
 .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) 
 .imagebase 0x10000000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x00ED0000
+// Image base: 0x00370000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -66,15 +66,14 @@
             instance void  MoveNext() cil managed
     {
       .override [mscorlib]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext
-      // Code size       306 (0x132)
+      // Code size       295 (0x127)
       .maxstack  3
       .locals init (int32 V_0,
                bool V_1,
                valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> V_2,
-               bool V_3,
-               class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8' V_4,
-               class [mscorlib]System.Exception V_5,
-               bool V_6)
+               class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8' V_3,
+               class [mscorlib]System.Exception V_4,
+               bool V_5)
       IL_0000:  ldarg.0
       IL_0001:  ldfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
       IL_0006:  stloc.0
@@ -96,7 +95,7 @@
 
           IL_0013:  br.s       IL_0017
 
-          IL_0015:  br.s       IL_0065
+          IL_0015:  br.s       IL_0064
 
           IL_0017:  nop
           IL_0018:  ldstr      "Try"
@@ -109,7 +108,7 @@
           IL_0033:  stloc.2
           IL_0034:  ldloca.s   V_2
           IL_0036:  call       instance bool valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>::get_IsCompleted()
-          IL_003b:  brtrue.s   IL_0081
+          IL_003b:  brtrue.s   IL_0080
 
           IL_003d:  ldarg.0
           IL_003e:  ldc.i4.0
@@ -120,117 +119,113 @@
           IL_0047:  ldloc.2
           IL_0048:  stfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
           IL_004d:  ldarg.0
-          IL_004e:  stloc.s    V_4
-          IL_0050:  ldarg.0
-          IL_0051:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
-          IL_0056:  ldloca.s   V_2
-          IL_0058:  ldloca.s   V_4
-          IL_005a:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::AwaitUnsafeOnCompleted<valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>,class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'>(!!0&,
+          IL_004e:  stloc.3
+          IL_004f:  ldarg.0
+          IL_0050:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
+          IL_0055:  ldloca.s   V_2
+          IL_0057:  ldloca.s   V_3
+          IL_0059:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::AwaitUnsafeOnCompleted<valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>,class ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'>(!!0&,
                                                                                                                                                                                                                                                                                                                                                                       !!1&)
-          IL_005f:  nop
-          IL_0060:  leave      IL_0131
-
-          IL_0065:  ldarg.0
-          IL_0066:  ldfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
-          IL_006b:  stloc.2
-          IL_006c:  ldarg.0
-          IL_006d:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
-          IL_0072:  initobj    valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>
-          IL_0078:  ldarg.0
-          IL_0079:  ldc.i4.m1
-          IL_007a:  dup
-          IL_007b:  stloc.0
-          IL_007c:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+          IL_005e:  nop
+          IL_005f:  leave      IL_0126
+
+          IL_0064:  ldarg.0
+          IL_0065:  ldfld      valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
+          IL_006a:  stloc.2
+          IL_006b:  ldarg.0
+          IL_006c:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>u__1'
+          IL_0071:  initobj    valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>
+          IL_0077:  ldarg.0
+          IL_0078:  ldc.i4.m1
+          IL_0079:  dup
+          IL_007a:  stloc.0
+          IL_007b:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+          IL_0080:  ldarg.0
           IL_0081:  ldloca.s   V_2
           IL_0083:  call       instance !0 valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>::GetResult()
-          IL_0088:  stloc.3
-          IL_0089:  ldloca.s   V_2
-          IL_008b:  initobj    valuetype [mscorlib]System.Runtime.CompilerServices.TaskAwaiter`1<bool>
-          IL_0091:  ldarg.0
-          IL_0092:  ldloc.3
-          IL_0093:  stfld      bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>s__1'
-          IL_0098:  ldarg.0
-          IL_0099:  ldfld      bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>s__1'
-          IL_009e:  stloc.1
-          IL_009f:  leave.s    IL_011c
+          IL_0088:  stfld      bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>s__1'
+          IL_008d:  ldarg.0
+          IL_008e:  ldfld      bool ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>s__1'
+          IL_0093:  stloc.1
+          IL_0094:  leave.s    IL_0111
 
         }  // end .try
         filter
         {
-          IL_00a1:  isinst     [mscorlib]System.Exception
-          IL_00a6:  dup
-          IL_00a7:  brtrue.s   IL_00ad
-
-          IL_00a9:  pop
-          IL_00aa:  ldc.i4.0
-          IL_00ab:  br.s       IL_00dc
-
-          IL_00ad:  stloc.s    V_5
-          IL_00af:  ldarg.0
-          IL_00b0:  ldloc.s    V_5
-          IL_00b2:  stfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
-          IL_00b7:  ldarg.0
-          IL_00b8:  ldfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
-          IL_00bd:  isinst     [mscorlib]System.ArgumentException
-          IL_00c2:  brtrue.s   IL_00d4
-
-          IL_00c4:  ldarg.0
-          IL_00c5:  ldfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
-          IL_00ca:  isinst     [mscorlib]System.IO.IOException
-          IL_00cf:  ldnull
-          IL_00d0:  cgt.un
-          IL_00d2:  br.s       IL_00d5
-
-          IL_00d4:  ldc.i4.1
-          IL_00d5:  stloc.s    V_6
-          IL_00d7:  ldloc.s    V_6
-          IL_00d9:  ldc.i4.0
-          IL_00da:  cgt.un
-          IL_00dc:  endfilter
+          IL_0096:  isinst     [mscorlib]System.Exception
+          IL_009b:  dup
+          IL_009c:  brtrue.s   IL_00a2
+
+          IL_009e:  pop
+          IL_009f:  ldc.i4.0
+          IL_00a0:  br.s       IL_00d1
+
+          IL_00a2:  stloc.s    V_4
+          IL_00a4:  ldarg.0
+          IL_00a5:  ldloc.s    V_4
+          IL_00a7:  stfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
+          IL_00ac:  ldarg.0
+          IL_00ad:  ldfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
+          IL_00b2:  isinst     [mscorlib]System.ArgumentException
+          IL_00b7:  brtrue.s   IL_00c9
+
+          IL_00b9:  ldarg.0
+          IL_00ba:  ldfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
+          IL_00bf:  isinst     [mscorlib]System.IO.IOException
+          IL_00c4:  ldnull
+          IL_00c5:  cgt.un
+          IL_00c7:  br.s       IL_00ca
+
+          IL_00c9:  ldc.i4.1
+          IL_00ca:  stloc.s    V_5
+          IL_00cc:  ldloc.s    V_5
+          IL_00ce:  ldc.i4.0
+          IL_00cf:  cgt.un
+          IL_00d1:  endfilter
         }  // end filter
         {  // handler
-          IL_00de:  pop
-          IL_00df:  nop
-          IL_00e0:  ldstr      "CatchException ex: "
-          IL_00e5:  ldarg.0
-          IL_00e6:  ldfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
-          IL_00eb:  callvirt   instance string [mscorlib]System.Object::ToString()
-          IL_00f0:  call       string [mscorlib]System.String::Concat(string,
+          IL_00d3:  pop
+          IL_00d4:  nop
+          IL_00d5:  ldstr      "CatchException ex: "
+          IL_00da:  ldarg.0
+          IL_00db:  ldfld      class [mscorlib]System.Exception ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<ex>5__2'
+          IL_00e0:  callvirt   instance string [mscorlib]System.Object::ToString()
+          IL_00e5:  call       string [mscorlib]System.String::Concat(string,
                                                                       string)
-          IL_00f5:  call       void [mscorlib]System.Console::WriteLine(string)
-          IL_00fa:  nop
-          IL_00fb:  nop
-          IL_00fc:  leave.s    IL_00fe
+          IL_00ea:  call       void [mscorlib]System.Console::WriteLine(string)
+          IL_00ef:  nop
+          IL_00f0:  nop
+          IL_00f1:  leave.s    IL_00f3
 
         }  // end handler
-        IL_00fe:  ldc.i4.0
-        IL_00ff:  stloc.1
-        IL_0100:  leave.s    IL_011c
+        IL_00f3:  ldc.i4.0
+        IL_00f4:  stloc.1
+        IL_00f5:  leave.s    IL_0111
 
       }  // end .try
       catch [mscorlib]System.Exception 
       {
-        IL_0102:  stloc.s    V_5
-        IL_0104:  ldarg.0
-        IL_0105:  ldc.i4.s   -2
-        IL_0107:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
-        IL_010c:  ldarg.0
-        IL_010d:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
-        IL_0112:  ldloc.s    V_5
-        IL_0114:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetException(class [mscorlib]System.Exception)
-        IL_0119:  nop
-        IL_011a:  leave.s    IL_0131
+        IL_00f7:  stloc.s    V_4
+        IL_00f9:  ldarg.0
+        IL_00fa:  ldc.i4.s   -2
+        IL_00fc:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+        IL_0101:  ldarg.0
+        IL_0102:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
+        IL_0107:  ldloc.s    V_4
+        IL_0109:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetException(class [mscorlib]System.Exception)
+        IL_010e:  nop
+        IL_010f:  leave.s    IL_0126
 
       }  // end handler
-      IL_011c:  ldarg.0
-      IL_011d:  ldc.i4.s   -2
-      IL_011f:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
-      IL_0124:  ldarg.0
-      IL_0125:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
-      IL_012a:  ldloc.1
-      IL_012b:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetResult(!0)
-      IL_0130:  nop
-      IL_0131:  ret
+      IL_0111:  ldarg.0
+      IL_0112:  ldc.i4.s   -2
+      IL_0114:  stfld      int32 ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>1__state'
+      IL_0119:  ldarg.0
+      IL_011a:  ldflda     valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool> ICSharpCode.Decompiler.Tests.TestCases.Pretty.ExceptionHandling/'<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::'<>t__builder'
+      IL_011f:  ldloc.1
+      IL_0120:  call       instance void valuetype [mscorlib]System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<bool>::SetResult(!0)
+      IL_0125:  nop
+      IL_0126:  ret
     } // end of method '<SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr>d__8'::MoveNext
 
     .method private hidebysig newslot virtual final 
@@ -570,6 +565,56 @@
     IL_003a:  ret
   } // end of method ExceptionHandling::SimpleAsyncTryCatchExceptionWithNameAndConditionWithOr
 
+  .method public hidebysig instance void 
+          CatchWhenWithConditionWithoutExceptionVar() cil managed
+  {
+    // Code size       51 (0x33)
+    .maxstack  2
+    .locals init (int32 V_0,
+             bool V_1)
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  stloc.0
+    .try
+    {
+      IL_0003:  nop
+      IL_0004:  newobj     instance void [mscorlib]System.Exception::.ctor()
+      IL_0009:  throw
+
+    }  // end .try
+    filter
+    {
+      IL_000a:  isinst     [mscorlib]System.Exception
+      IL_000f:  dup
+      IL_0010:  brtrue.s   IL_0016
+
+      IL_0012:  pop
+      IL_0013:  ldc.i4.0
+      IL_0014:  br.s       IL_0020
+
+      IL_0016:  pop
+      IL_0017:  ldloc.0
+      IL_0018:  ldc.i4.0
+      IL_0019:  ceq
+      IL_001b:  stloc.1
+      IL_001c:  ldloc.1
+      IL_001d:  ldc.i4.0
+      IL_001e:  cgt.un
+      IL_0020:  endfilter
+    }  // end filter
+    {  // handler
+      IL_0022:  pop
+      IL_0023:  nop
+      IL_0024:  ldstr      "jo"
+      IL_0029:  call       void [mscorlib]System.Console::WriteLine(string)
+      IL_002e:  nop
+      IL_002f:  nop
+      IL_0030:  leave.s    IL_0032
+
+    }  // end handler
+    IL_0032:  ret
+  } // end of method ExceptionHandling::CatchWhenWithConditionWithoutExceptionVar
+
   .method public hidebysig instance bool 
           SimpleTryFinally() cil managed
   {
@@ -700,7 +745,7 @@
     // Code size       67 (0x43)
     .maxstack  1
     .locals init (class [mscorlib]System.InvalidOperationException V_0,
-             class [mscorlib]System.Exception V_1)
+             class [mscorlib]System.SystemException V_1)
     IL_0000:  nop
     .try
     {
@@ -724,7 +769,7 @@
       IL_001f:  leave.s    IL_0042
 
     }  // end handler
-    catch [mscorlib]System.Exception 
+    catch [mscorlib]System.SystemException 
     {
       IL_0021:  stloc.1
       IL_0022:  nop
diff --git a/ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs b/ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs
index 14bc7ac4e..872d0acd7 100644
--- a/ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs
+++ b/ICSharpCode.Decompiler/IL/Transforms/DetectCatchWhenConditionBlocks.cs
@@ -41,10 +41,21 @@ namespace ICSharpCode.Decompiler.IL.Transforms
 					//   br whenConditionBlock
 					// }
 					var instructions = container.EntryPoint.Instructions;
-					((StLoc)instructions[0]).Value = exceptionSlot;
-					instructions[1].ReplaceWith(new Branch(whenConditionBlock));
-					instructions.RemoveAt(2);
-					container.SortBlocks(deleteUnreachableBlocks: true);
+					if (instructions.Count == 3) {
+						// stloc temp(isinst exceptionType(ldloc exceptionVar))
+						// if (comp(ldloc temp != ldnull)) br whenConditionBlock
+						// br falseBlock
+						((StLoc)instructions[0]).Value = exceptionSlot;
+						instructions[1].ReplaceWith(new Branch(whenConditionBlock));
+						instructions.RemoveAt(2);
+						container.SortBlocks(deleteUnreachableBlocks: true);
+					} else if (instructions.Count == 2) {
+						// if (comp(isinst exceptionType(ldloc exceptionVar) != ldnull)) br whenConditionBlock
+						// br falseBlock
+						instructions[0].ReplaceWith(new Branch(whenConditionBlock));
+						instructions.RemoveAt(1);
+						container.SortBlocks(deleteUnreachableBlocks: true);
+					}
 				}
 			}
 		}
@@ -61,21 +72,42 @@ namespace ICSharpCode.Decompiler.IL.Transforms
 			exceptionType = null;
 			exceptionSlot = null;
 			whenConditionBlock = null;
-			if (entryPoint == null || entryPoint.IncomingEdgeCount != 1 || entryPoint.Instructions.Count != 3)
+			if (entryPoint == null || entryPoint.IncomingEdgeCount != 1)
 				return false;
-			if (!entryPoint.Instructions[0].MatchStLoc(out var temp, out var isinst) ||
-				temp.Kind != VariableKind.StackSlot || !isinst.MatchIsInst(out exceptionSlot, out exceptionType))
-				return false;
-			if (!exceptionSlot.MatchLdLoc(out var exceptionVar) || exceptionVar.Kind != VariableKind.Exception)
-				return false;
-			if (!entryPoint.Instructions[1].MatchIfInstruction(out var condition, out var branch))
-				return false;
-			if (!condition.MatchCompNotEquals(out var left, out var right))
-				return false;
-			if (!entryPoint.Instructions[2].MatchBranch(out var falseBlock) || !MatchFalseBlock(container, falseBlock, out var returnVar, out var exitBlock))
-				return false;
-			if ((left.MatchLdNull() && right.MatchLdLoc(temp)) || (right.MatchLdNull() && left.MatchLdLoc(temp))) {
-				return branch.MatchBranch(out whenConditionBlock);
+			if (entryPoint.Instructions.Count == 3) {
+				// stloc temp(isinst exceptionType(ldloc exceptionVar))
+				// if (comp(ldloc temp != ldnull)) br whenConditionBlock
+				// br falseBlock
+				if (!entryPoint.Instructions[0].MatchStLoc(out var temp, out var isinst) ||
+					temp.Kind != VariableKind.StackSlot || !isinst.MatchIsInst(out exceptionSlot, out exceptionType))
+					return false;
+				if (!exceptionSlot.MatchLdLoc(out var exceptionVar) || exceptionVar.Kind != VariableKind.Exception)
+					return false;
+				if (!entryPoint.Instructions[1].MatchIfInstruction(out var condition, out var branch))
+					return false;
+				if (!condition.MatchCompNotEquals(out var left, out var right))
+					return false;
+				if (!entryPoint.Instructions[2].MatchBranch(out var falseBlock) || !MatchFalseBlock(container, falseBlock, out var returnVar, out var exitBlock))
+					return false;
+				if ((left.MatchLdNull() && right.MatchLdLoc(temp)) || (right.MatchLdNull() && left.MatchLdLoc(temp))) {
+					return branch.MatchBranch(out whenConditionBlock);
+				}
+			} else if (entryPoint.Instructions.Count == 2) {
+				// if (comp(isinst exceptionType(ldloc exceptionVar) != ldnull)) br whenConditionBlock
+				// br falseBlock
+				if (!entryPoint.Instructions[0].MatchIfInstruction(out var condition, out var branch))
+					return false;
+				if (!condition.MatchCompNotEquals(out var left, out var right))
+					return false;
+				if (!entryPoint.Instructions[1].MatchBranch(out var falseBlock) || !MatchFalseBlock(container, falseBlock, out var returnVar, out var exitBlock))
+					return false;
+				if (!left.MatchIsInst(out exceptionSlot, out exceptionType))
+					return false;
+				if (!exceptionSlot.MatchLdLoc(out var exceptionVar) || exceptionVar.Kind != VariableKind.Exception)
+					return false;
+				if (right.MatchLdNull()) {
+					return branch.MatchBranch(out whenConditionBlock);
+				}
 			}
 			return false;
 		}