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



Andrew Pinski <pinskia at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Target|                            |x86_64-*-*

             Status|UNCONFIRMED                 |WAITING

   Last reconfirmed|                            |2013-02-05

          Component|tree-optimization           |target

     Ever Confirmed|0                           |1



--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> 2013-02-05 
07:27:56 UTC ---

This really sounds like a bug in a mismatched function declarations and

definitions. Meaning this is not a GCC bug but rather a bug in the source you

are using.  Make sure bool is defined the same in both sides of the call.



The reason why I say this is because I just tried a simple testcase look at the

output of the code and found it does the correct thing.

Like:

_Bool g(void);



void h(void);



void f(void)

{

  if (!g())

    return h();

}

---- CUT ----

This assumes the yesno function is declared with a _Bool return type on the

calee side.

That produces:

    call    g

    testb    %al, %al



Which is not what is located in the generated assembly code that you provided:

  405402:    e8 99 7e 00 00           callq  40d2a0 <yesno>

  405407:    85 c0                    test   %eax,%eax

Reply via email to