Newsgroup: it.comp.os.linux.sys
Titolo: bug gcc

int main( void )
{
  int i=2;
  if( -10*abs (i-1) == 10*abs(i-1) )
    printf ("OMG,-10==10 in linux!\n");
  else
    printf ("nothing special here\n") ;
  return 0 ;
}
togo
-- 
there is no real life, only AFK

 togo
-10==10 anche per gcc su Mac OS X 10.4.11 PPC
-- 
musa
nb: x-post & f-up

 
OMG,-10==10 in linux! su:
- Mandriva 2007 con gcc version 4.1.1 20060724 (prerelease) (4.1.1-3mdk)
- Windows XP con gcc version 3.4.2 (mingw-special)
- Cygwin su XP con gcc version 3.4.4 (cygming special, gdc 0.12, using 
dmd 0.125)
nothing special here:
- Microsoft Visual C++ 6.0
- Open Watcom 1.5
HTH
Andrea

Quasimodo ha scritto:

Sembra un problema legato alla gestione degli interi.
Se faccio cosě:
int main( void )
{
   int i=2;
   if( -10*fabs(i-1) == 10*fabs(i-1) ) {
     printf ("OMG,-10==10 in linux!\n");
     printf ("%d",-10*fabs(i-1));
     printf ("\n");
     printf ("%d",10*fabs(i-1));
     printf("\n");
   }  else{
     printf ("nothing special here\n") ;
   }
   return 0 ;
}
il risultato č corretto, lo stesso se non metto ne fabs ne abs
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
I cannot conceive that anybody will require multiplications at the rate
of 40,000 or even 4,000 per hour ...
		-- F. H. Wales (1936)

 }
-slackware 10.2 gcc 3.3.6 
-ubuntu gcc 4.1
-ubuntu gcc 3.4.6
OMG,-10==10 in linux!
-slackware 8.1 gcc 2.95.3 
nothing special here
Andrea

 }
Sicuro di non aver invocato la macro abs invece 
della funzione di libreria?
Questa versione funziona a dovere.
int main( void )
{
  int i=3;
  int j=0;
  if( -10*abs (j=i-1) == 10*abs(j) )
    printf ("OMG, -10==10 in linux!\n");
  else
    printf ("nothing special here\n") ;
  printf("i = %d\n",i);
  printf("j = %d\n",j);
  return 0 ;
}

gcc version 4.2.0 (Gentoo 4.2.0 p1.4): OMG,-10==10 in linux!
ICC Version 9.1: nothing special here

 togo
'Nsomma... ;)
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
__________________________________
Combatti l'AIDS col tuo computer: 
http://fightaidsathome.scripps.edu/

gcc 3.4.6 su freebsd, su sun sparc.
-- 
Spolvera la mia email per rispondermi
"Storia del Mondo. I vulcani eruttarono. Gli oceani ribollirono.
L'universo era in tumulto. Poi venne il cane."
Snoopy
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 
questo è un pezzo di codice assembler (con bug)   prodotto da gcc 3.3.3 
con -O5
.LC0:
         .string "OMG,-10==10 in linux!"
.LC2:
         .string "main"
         .text
         .p2align 2,,3
.globl main
         .type   main, @function
main:
         pushl   %ebp
         movl    %esp, %ebp
         subl    $24, %esp
         andl    $-16, %esp
         subl    $12, %esp
         movl    __guard, %edx
         pushl   $.LC0
         movl    %edx, -24(%ebp)
         call    puts
         movl    -24(%ebp), %ecx
         xorl    %eax, %eax
         addl    $16, %esp
         cmpl    __guard, %ecx
         je      .L6
         subl    $8, %esp
         pushl   -24(%ebp)
         pushl   $.LC2
         call    __stack_smash_handler
         addl    $16, %esp
         .p2align 2,,3
.L6:
         leave
         ret