public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* Bug on sizeof(void) == 1, must be undefined or negative, == -100000.
@ 2005-06-17 20:34 jc-nospam
  2005-06-17 21:05 ` Andrew Pinski
  0 siblings, 1 reply; 5+ messages in thread
From: jc-nospam @ 2005-06-17 20:34 UTC (permalink / raw)
  To: gcc-bugs

Please, to run this script of 5 lines:

#!/bin/sh
cat > bug_void.c <<EOF
int main() { printf("sizeof(void) = %d\n",sizeof(void)); return 0; }
EOF
gcc bug_void.c -o bug_void && ./bug_void && rm bug_void bug_void.c

my_pc@~$ ...
sizeof(void) = 1

This is a bug of GCC!!! (of gcc-3.4.x and gcc-3.3.x, i'd tested them)

It wonnt be sizeof(void) == 0.

I recommend,
sizeof(void) = rounded_in_power_of_10( - sqrt(2147483648 * sizeof(void *)) )
sizeof(void) = -100000 (for 8-bytes pointers or 4-bytes pointers)

It gives a sufficent margin due to -infinite doesn't exist in a computer.

By example, to imagine the sizes of the structs (positive or negative numbers)
when there are 10 voids and 3 ints, or 2 voids and 7 longs,
20000 voids and 19999 ints, 19999 voids and 20000 ints, ...


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug on sizeof(void) == 1, must be undefined or negative, == -100000.
  2005-06-17 20:34 Bug on sizeof(void) == 1, must be undefined or negative, == -100000 jc-nospam
@ 2005-06-17 21:05 ` Andrew Pinski
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Pinski @ 2005-06-17 21:05 UTC (permalink / raw)
  To: jc-nospam; +Cc: gcc-bugs


On Jun 17, 2005, at 4:33 PM, jc-nospam@jr-pizarro.jazztel.es wrote:

> Please, to run this script of 5 lines:
>
> #!/bin/sh
> cat > bug_void.c <<EOF
> int main() { printf("sizeof(void) = %d\n",sizeof(void)); return 0; }

This is invalid code and a GNU extension to take the sizeof(void).  The 
reason
why GCC defines it as 1 is because you can do the following:
void *a;
a++;

If you want to error out on GNU extensions, use -pedantic-errors.

Thanks,
Andrew Pinski


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug on sizeof(void) == 1, must be undefined or negative, == -100000.
@ 2005-06-17 21:51 jc-nospam
  0 siblings, 0 replies; 5+ messages in thread
From: jc-nospam @ 2005-06-17 21:51 UTC (permalink / raw)
  To: pinskia; +Cc: gcc-bugs

On Jun 17, 2005, at 17:31:34, pinskia@physics.uc.edu wrote:

> Since this is a GNU extension, GCC defines as adding 1.  See the  
> documentation
> where this is documented.
> http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Pointer-Arith.html#Pointer- 
> Arith
>
>
>   In GNU C, addition and subtraction operations are supported on  
> pointers to void and on pointers to functions. This is done by treating  
> the size of a void or of a function as 1.
>
>   A consequence of this is that sizeof is also allowed on void and on  
> function types, and returns 1.
>
> The option -Wpointer-arith requests a warning if these extensions are  
> used.
>
> -- Pinski

Conclusion: the GNU's law is:

             "void IS A byte"
            (1 void == 1 byte)

-- J.C. --


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug on sizeof(void) == 1, must be undefined or negative, == -100000.
  2005-06-17 21:28 jc-nospam
@ 2005-06-17 21:31 ` Andrew Pinski
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Pinski @ 2005-06-17 21:31 UTC (permalink / raw)
  To: jc-nospam; +Cc: gcc-bugs


On Jun 17, 2005, at 5:27 PM, jc-nospam@jr-pizarro.jazztel.es wrote:

> On Jun 17, 2005, at 17:05:37, pinskia@physics.uc.edu wrote:
>
>
> void *z = y; // -> z = 0xBAD0DAD5
> z++;         // adding +0? adding +1? adding +4? abort this error?

Since this is a GNU extension, GCC defines as adding 1.  See the  
documentation
where this is documented.
http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Pointer-Arith.html#Pointer- 
Arith


  In GNU C, addition and subtraction operations are supported on  
pointers to void and on pointers to functions. This is done by treating  
the size of a void or of a function as 1.

  A consequence of this is that sizeof is also allowed on void and on  
function types, and returns 1.

The option -Wpointer-arith requests a warning if these extensions are  
used.

-- Pinski


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Bug on sizeof(void) == 1, must be undefined or negative, == -100000.
@ 2005-06-17 21:28 jc-nospam
  2005-06-17 21:31 ` Andrew Pinski
  0 siblings, 1 reply; 5+ messages in thread
From: jc-nospam @ 2005-06-17 21:28 UTC (permalink / raw)
  To: pinskia; +Cc: gcc-bugs

On Jun 17, 2005, at 17:05:37, pinskia@physics.uc.edu wrote:

> This is invalid code and a GNU extension to take the sizeof(void).  The 
> reason
> why GCC defines it as 1 is because you can do the following:
> void *a;
> a++;
>
> If you want to error out on GNU extensions, use -pedantic-errors.
>
> Thanks,
> Andrew Pinski

To imagine the worst situation:

char *x = (char *)0xBAD0DAD0;
x++;         // -> x = 0xBAD0DAD1 (adding +1)
int *y = x;  // -> y = 0xBAD0DAD1
y++;         // -> y = 0xBAD0DAD5 (adding +4, sizeof(int)==4 )
void *z = y; // -> z = 0xBAD0DAD5
z++;         // adding +0? adding +1? adding +4? abort this error?

Sincerely yours, J.C.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-06-17 21:51 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-17 20:34 Bug on sizeof(void) == 1, must be undefined or negative, == -100000 jc-nospam
2005-06-17 21:05 ` Andrew Pinski
2005-06-17 21:28 jc-nospam
2005-06-17 21:31 ` Andrew Pinski
2005-06-17 21:51 jc-nospam

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