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).