This is the mail archive of the 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: c/9762: Address of 'char' is incorrect.

The following reply was made to PR c/9762; it has been noted by GNATS.

From: "Stephen Kennedy" <Stephen dot Kennedy at havok dot com>
To: "'Neil Booth'" <neil at daikokuya dot co dot uk>
Cc: <gcc-gnats at gcc dot gnu dot org>,
	<debian-gcc at lists dot debian dot org>
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
 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 Kennedy <Stephen dot Kennedy at havok dot com>
 t: +353 1 6693679   f: +353 1 6767094
 Game Developer Frontline Award Winner
 > > 	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);
 > > }

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