------- Comment #4 from pinskia at gcc dot gnu dot org  2007-07-08 10:19 -------
(In reply to comment #3)
> > We don't reject as invalid code either:
> > unsigned char p;
> > unsigned char p1 = p & 0;
> 
> Why should we? There is no overflow here, you mean that p is not constant? I
> think we have two issues in the first testcase, one is folding (X op 0), the
> other is converting 512 to uchar before performing the operation. Am I wrong?

Yes, the converting 512 to uchar is a valid optimization.  That is:
(char)(((int) a) & b)
is the same as:
a & ((char)b)
if a is of type char.
as there are no overflow concerns with AND.

The folding gets us to the case where we have "a & 0" which is not a valid
constant initializer at all.

Note I found this while working on fixing PR 32628, where the patch which fixes
that caues us to no longer emit a warning/error for the first testcase.


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
OtherBugsDependingO|                            |32628
              nThis|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32643

Reply via email to