From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27396 invoked by alias); 20 Feb 2003 19:06:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 27382 invoked by uid 71); 20 Feb 2003 19:06:00 -0000 Date: Thu, 20 Feb 2003 19:06:00 -0000 Message-ID: <20030220190600.27381.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Daniel Jacobowitz Subject: Re: c/9762: Address of 'char' is incorrect. Reply-To: Daniel Jacobowitz X-SW-Source: 2003-02/txt/msg01014.txt.bz2 List-Id: The following reply was made to PR c/9762; it has been noted by GNATS. From: Daniel Jacobowitz To: Stephen Kennedy Cc: 'Neil Booth' , gcc-gnats@gcc.gnu.org, debian-gcc@lists.debian.org Subject: Re: c/9762: Address of 'char' is incorrect. Date: Thu, 20 Feb 2003 14:03:30 -0500 On Thu, Feb 20, 2003 at 06:32:19PM -0000, Stephen Kennedy wrote: > > OK, the C standard does not say that this should work, so you > can consider this bug closed. > > However, given knowledge of the calling convention of a > particular machine, you can do neat things such as dynamic > function binding. See www.drizzle.com/~scottb/gdc/fubi-paper.htm > for instance. > > I've since changed to using assembly, but why does gcc > return the address of a temp when 'a' is a char and not > when 'a' is an int? Because it's passed as an int; you have to convert it to a char on arrival in the function. > > Surprised, not unhappy, > Stephen. > > --- > Stephen Kennedy > t: +353 1 6693679 f: +353 1 6767094 > Game Developer Frontline Award Winner > http://www.havok.com/news/release.html > > > > In the example below, '&a' is the address of a local > > copy of 'a' not of 'a'. > > > if the type of 'a' is changed to int, it works as expected. > > > > Works as who expected? Where is the bug? Please quote which part of > > the C standard is violated. You got an address, why are you unhappy? > > > > Neil. > > > > > #define TA char > > > #define TB int > > > #define TC int > > > > > > void foobar(TA a, TB b, TC c); > > > > > > int main() > > > { > > > foobar(1,2,3); > > > return 0; > > > } > > > > > > void foobar(TA a, TB b, TC c) > > > { > > > printf("a == %i claims %x\n", a, &a); > > > printf("a == %i really %x\n", (&b)[-1], (&b)-1); > > > printf("b == %i %x\n", b, &b); > > > printf("c == %i %x\n", c, &c); > > > } > > > > > -- > To UNSUBSCRIBE, email to debian-gcc-request@lists.debian.org > with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org > > -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer