title: False positive: precondition is redundant
body: <p>Why do I get the following warning for this trivial code sample as soon as the Warning Level is on the 2nd level or higher?</p>
  
  <pre><code>public int Foo(int a)
  {
      if (a &gt;= 0) throw new ArgumentException("a should be negative", "a");
      Contract.EndContractBlock();
      return a;
  }
  </code></pre>
  
  <blockquote>
    <p>CodeContracts: Suggested requires: This precondition is redundant:
    Consider removing it. Are you comparing a struct value to null?</p>
  </blockquote>
  
  <p>Clearly an integer can be negative so the precondition is hardly redundant, so why do I get this warning?</p>
  
  <p>Edit: Here is what ILSpy shows for the created function when looking at the exe:</p>
  
  <pre><code>public int Foo(int a)
  {
      if (a &gt;= 0)
      {
          ContractHelper.RaiseContractFailedEvent(ContractFailureKind.Precondition, null, "a &lt; 0", null);
          throw new ArgumentException("a should be negative", "a");
      }
      return a;
  }
  </code></pre>
  
  <p><img src="https://i.stack.imgur.com/UNyFr.png" alt="Code Contracts settings"></p>