This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: optimization/5969: When function is declared func(unsigned char v), v isn't truncated


>Synopsis: When function is declared func(unsigned char v), v isn't truncated
>
>Responsible-Changed-From-To: unassigned->dberlin
>Responsible-Changed-By: dberlin
>Responsible-Changed-When: Sat Mar 16 15:01:56 2002
>Responsible-Changed-Why:
>    Me
>State-Changed-From-To: open->feedback
>State-Changed-By: dberlin
>State-Changed-When: Sat Mar 16 15:01:56 2002
>State-Changed-Why:
>    You have implicitly declared tst to take an int by using it before it's defined.
>    Because it is inlined into main at -O2, and at that point it thinks it takes an int, it never performs the truncation.
>    
>    Any code after the tst function is defined to take an unsigned char will do the truncation.
>    
>    The problem is the code, not the compiler, AFAIK.
>    The title of the bug report is misleading, you haven't declared func(unsigned char v), if you did, the problem would go away.
>
>http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5969

I think compiled code should function exactly the same with or without -O2,
but that's just my opinion. The problem here wasn't that the function was
being called by 'c' code, it was being called by some ppc asm code. The
first thing I did was turn on -Wall, then fixed all the warnings. But I didn't
get any warnings about the ppc asm code calling the C function incorrectly,
of course.

How can the function be inlined into main even before the function is
declared? And if it is being inlined once it is declared, that means a
multi pass compiler or equivalent. So the compiler should know how to call
the function by then.

If your function is declared
void func(unsigned char x)
{
	printf("sizeof(x)=%d\n",sizeof(x));
	printf("x=%x\n",x);
}

You can call that from asm or from another code fragment with
func(0x21);
func(0x4321);
and get different output. But sizeof prints out 1 for 1 byte. It seems to me
inconsistent.

As far as the title of the bug report being misleading, it's not like I'm
an expert at reporting gcc bugs, there are basically no bugs :^). And it is
difficult to explain within one line what is happening...

Thanks---
Dave
dash@xdr.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]