From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3884 invoked by alias); 20 Feb 2003 18:36: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 3823 invoked by uid 71); 20 Feb 2003 18:36:00 -0000 Date: Thu, 20 Feb 2003 18:36:00 -0000 Message-ID: <20030220183600.3822.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: "Stephen Kennedy" Subject: RE: c/9762: Address of 'char' is incorrect. Reply-To: "Stephen Kennedy" X-SW-Source: 2003-02/txt/msg01012.txt.bz2 List-Id: The following reply was made to PR c/9762; it has been noted by GNATS. From: "Stephen Kennedy" To: "'Neil Booth'" Cc: , Subject: RE: c/9762: Address of 'char' is incorrect. Date: Thu, 20 Feb 2003 18:32:19 -0000 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? 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); > > } >