I have this code:

```
using System;
using System.Diagnostics.Contracts;

namespace TestCodeContracts
{
    class Program
    {
        public static int Divide(int numerator, int denominator, out int remainder)
        {
            Contract.Requires<ArgumentException>(denominator != 0);
            Contract.Requires<ArgumentException>(numerator != int.MinValue || denominator != -1, "Overflow");
            Contract.Ensures(Contract.Result<int>() == numerator / denominator);
            Contract.Ensures(Contract.ValueAtReturn<int>(out remainder) == numerator % denominator);

            remainder = numerator % denominator;
            return numerator / denominator;
        }

        static void Main(string[] args)
        {
            int remainder;
            Console.WriteLine(Divide(10, 6, out remainder));
            Console.WriteLine(Divide(5, remainder, out remainder));

            Console.WriteLine(Divide(3, 0, out remainder));

            Console.Read();
        }
    }
}

```

On the first Divide call, if I replace `6` by `0`, then the static analysis correctly warns against it.

If I replace `6` by `5`, then I (correctly) get a warning on the second Divide call.

However, no matter what, I *never* get any warnings on the third Divide call. Instead, I just get a runtime error.

Why is the static analyzer unable to detect that the third line is a contract violation?

I am using Visual Studio 2012, on Windows 8 64-bit. The code contracts is `Microsoft Code Contracts (devlabs_TS) 1.4.51019.0 for .NET` (which seems to be the latest version as of December 2012).