public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/5969: When function is declared func(unsigned char v), v isn't truncated
@ 2002-03-14 15:46 dash
0 siblings, 0 replies; 4+ messages in thread
From: dash @ 2002-03-14 15:46 UTC (permalink / raw)
To: gcc-gnats
>Number: 5969
>Category: optimization
>Synopsis: When function is declared func(unsigned char v), v isn't truncated
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: unassigned
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Mar 14 15:46:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: David Ashley
>Release: 2.95.3 20010315 (release/MonteVista)
>Organization:
>Environment:
Irrelevant
>Description:
/* Compile with -O2 on ppc architecture */
main()
{
tst(0x12);
tst(0x1234);
}
tst(unsigned char v)
{
printf("v=%x\n",v);
}
/* File prints out:
v=12
v=1234
*/
>How-To-Repeat:
Compile that program for powerpc and run it. Easy as pie.
The inportant things are:
-O2 optimization
tst must be defined after it is used.
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: optimization/5969: When function is declared func(unsigned char v), v isn't truncated
@ 2002-03-28 14:42 sirl
0 siblings, 0 replies; 4+ messages in thread
From: sirl @ 2002-03-28 14:42 UTC (permalink / raw)
To: dash, dberlin, gcc-bugs, gcc-prs
Synopsis: When function is declared func(unsigned char v), v isn't truncated
State-Changed-From-To: feedback->closed
State-Changed-By: sirl
State-Changed-When: Thu Mar 28 14:42:04 2002
State-Changed-Why:
not-a-bug.
The ABI on this platform requires the caller to do the
truncation, for obvious optimization reasons. Thus the caller
has to "know" (eg. via prototypes) how to truncate/sign-extend
the arguments passed to the callee.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5969
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: optimization/5969: When function is declared func(unsigned char v), v isn't truncated
@ 2002-03-16 16:16 David Ashley
0 siblings, 0 replies; 4+ messages in thread
From: David Ashley @ 2002-03-16 16:16 UTC (permalink / raw)
To: dberlin; +Cc: gcc-prs
The following reply was made to PR optimization/5969; it has been noted by GNATS.
From: David Ashley <dash@xdr.com>
To: dberlin@sources.redhat.com
Cc: gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org, gcc-prs@gcc.gnu.org,
nobody@gcc.gnu.org
Subject: Re: optimization/5969: When function is declared func(unsigned char v), v isn't truncated
Date: Sat, 16 Mar 2002 16:10:33 -0800
>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
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: optimization/5969: When function is declared func(unsigned char v), v isn't truncated
@ 2002-03-16 15:01 dberlin
0 siblings, 0 replies; 4+ messages in thread
From: dberlin @ 2002-03-16 15:01 UTC (permalink / raw)
To: dash, dberlin, gcc-bugs, gcc-prs, nobody
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
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2002-03-28 22:42 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-14 15:46 optimization/5969: When function is declared func(unsigned char v), v isn't truncated dash
2002-03-16 15:01 dberlin
2002-03-16 16:16 David Ashley
2002-03-28 14:42 sirl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).