title: puzzled by compiler warning that suggests compound assignment of int8_t promotes to int
body: <p>I can usually understand the reason behind a compiler warning, but this one seems just plain wrong.</p>
  
  <pre><code>#include &lt;stdint.h&gt;    
  uint8_t myfunc(uint8_t x,uint8_t y)
  {
      x |= y;
      return x;
  }
  </code></pre>
  
  <p>The intel compiler with -Wall complains:</p>
  
  <pre><code>conversion from "int" to "uint8_t={unsigned char}" may lose significant bits
    x |= y;
      ^
  </code></pre>
  
  <p>Is this right?  Is the above code non-portable and non-standard somehow?</p>