[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

gcc allows negatively sized arrays.



>Submitter-Id:	net
>Originator:	Steven Young
>Organization:	n/a
>Confidential:	no
>Synopsis:	gcc allows negatively-sized arrays
>Severity:	non-critical
>Priority:	low
>Category:	c
>Class:		accepts-illegal
>Release:	gcc (GCC) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)
>Environment:
System: Linux pc1 2.6.20-15-generic #2 SMP Sun Apr 15 07:36:31 UTC 2007 i686 GNU/Linux
Architecture: i686
	
host: i486-pc-linux-gnu
build: i486-pc-linux-gnu
target: i486-pc-linux-gnu
configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu
>Description:
    By using an integer variable as the size of an array to be 
    initialized on the stack, you can trick gcc into accepting
    and trying to create a negatively-sized array.  The assembly
    it generates in such a case seems to indicate it really thinks
    it has a negatively-sized array.
>How-To-Repeat:
    #include <stdio.h>

    int main(int argc, char **argv) {
	int x = -2;
	int y[x];

	printf("%d\n", sizeof(y));
    }

    This will output -8.

>Fix:
    I don't know.



Reply to: