using System; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Runtime.ExceptionServices; class ExitMethods { void M1() { ErrorMaybe(true); return; // not dead } void M2() { ErrorMaybe(false); return; // dead (not detected) } void M3() { ErrorAlways(true); return; // dead } void M4() { Exit(); return; // dead } void M5() { ApplicationExit(); return; // dead } void M6() { try { ErrorAlways(false); } catch (ArgumentException) { return; // not dead } catch (Exception) { return; // not dead } } void M7() { ErrorAlways2(); return; // dead } void M8() { ErrorAlways3(); return; // dead } static void ErrorMaybe(bool b) { if (b) throw new Exception(); } static void ErrorAlways(bool b) { if (b) throw new Exception(); else throw new ArgumentException("b"); } static void ErrorAlways2() { throw new Exception(); } static void ErrorAlways3() => throw new Exception(); void Exit() { Environment.Exit(0); } void ExitInTry() { try { Exit(); } finally { // dead System.Console.WriteLine(""); } } void ApplicationExit() { System.Windows.Forms.Application.Exit(); } decimal ThrowExpr(decimal input) { return input != 0 ? 1 / input : throw new ArgumentException("input"); } public int ExtensionMethodCall(string s) { return s.Contains('-') ? 0 : 1; } public void FailingAssertion() { Assert.IsTrue(false); var x = 0; // dead } public void FailingAssertion2() { FailingAssertion(); var x = 0; // dead } void AssertFalse(bool b) => Assert.IsFalse(b); public void FailingAssertion3() { AssertFalse(true); var x = 0; // dead } public void ExceptionDispatchInfoThrow(bool b, ArgumentException e) { if (b) ExceptionDispatchInfo.Throw(e); else ExceptionDispatchInfo.Capture(e).Throw(); Console.WriteLine("dead"); } }