Function test has value 0. Should have value 1;

#include <stdio.h>
int a=0x101;
int b=0x100;

int test(){
 return (
  ((unsigned char)(unsigned long long) ( (a?a:1) & (a*b) ))
  ?  0 : 1 );
}

int main(void){
 if((unsigned char)(unsigned long long) (a&(a*b)))return 2;
 if( test() ){
        printf("successful\n"); return 0;
 } else { 
        printf("failed\n"); return 1;
 } 
} 

Related to Bug 19606? 

GNU CPP version 2.95.2 19991024 (release) (sparc) successful
GNU C version 3.3.3 (sparc-sun-solaris2.8)  failed

GNU CPP version 3.2 (cpplib) (i386 Linux/ELF) failed 
GNU C version 3.3.2 (i686-pc-linux-gnu) failed
GNU C version 3.3.5 (i686-pc-linux-gnu) failed
GNU C version 3.4.3 (i686-pc-linux-gnu) failed

-- 
           Summary: wrong code for ((unsigned char)(unsigned long
                    long)((a?a:1)&(a*b)))?0:1)
           Product: gcc
           Version: 3.4.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: heinrich dot brand at fujitsu-siemens dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux
  GCC host triplet: i686-pc-linux
GCC target triplet: i686-pc-linux


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

Reply via email to