From mboxrd@z Thu Jan 1 00:00:00 1970 From: david@blue-labs.org To: gcc-gnats@gcc.gnu.org Subject: c/4552: case statement "without range" causes gcc to quickly eat all memory Date: Fri, 12 Oct 2001 01:36:00 -0000 Message-id: <20011012082757.2716.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00240.html List-Id: >Number: 4552 >Category: c >Synopsis: case statement "without range" causes gcc to quickly eat all memory >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Oct 12 01:36:00 PDT 2001 >Closed-Date: >Last-Modified: >Originator: David Ford >Release: /home/gccbuild/gcc_auto_build/install/i686-pc-linux-gnu/lib/gcc-lib/i686-pc-linux-gnu/3.0.2 >Organization: >Environment: Linux 2.4.10 with GLIBC 2.2.4 >Description: a case X ... Y where X and Y have either no range or invalid range, a gcc subprocess has an argv[0] of garbage and that process consumes memory at an alarming rate. gcc -c -DVERSION=0.2.5 -fpic -g3 -DDEBUG=0 -DSQLPostgres -pipe -Wall -W -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -Wcast-align -I/usr/local/pgsql/include -I/usr/local/include startup.c startup.c: In function `parse_options': startup.c:298: warning: empty range specified david 25964 0.0 0.1 1468 488 pts/20 S Oct06 0:00 gcc -c -DVERSION=0.2.5 -fpic -g3 -DDEBUG=0 -DSQLPostgres -pipe -Wall david 25965 0.0 84.9 217824 215608 pts/20 R Oct06 0:03 A@??A@??A@??A@??A@ david 25966 0.0 0.3 2248 988 pts/20 S Oct06 0:00 as --traditional-format -Qy -o startup.o - david 26058 0.0 0.3 1764 784 pts/20 S Oct06 0:00 | \_ make startup.o david 26062 0.0 0.2 1472 548 pts/20 S Oct06 0:00 | \_ gcc -c -DVERSION=0.2.5 -fpic -g3 -DDEBUG=0 -DSQLPostg david 26064 0.0 1.3 6344 3468 pts/20 R Oct06 0:00 | \_ /home/gccbuild/gcc_auto_build/install/i686-pc-lin becomes... david 26064 0.0 87.6 224312 222372 pts/20 D Oct06 0:03 | \_ D@0?D@@?D@P?D@`?D@p?D@??D@??D@??D@??D@??D@??D@??D switch (c) ... where c is an unsigned integer. startup.c:298 case o_ADD_USER ... o_OPTIONMAX: enum { o_NONE=0, /*skip the lower 256 bits to allow for single char matches*/ o_ADD_USER=1<<8, o_CHECK_CONFIG=1<<9, o_CONVERT_TO_SQL=1<<10, o_CREATE_LIST=1<<11, o_CREATE_TABLES=1<<12, o_HELP=1<<13, o_IMPORT_MESSAGE=1<<14, o_INITIALIZE_SQL=1<<15, o_MAINTENANCE=1<<16, o_MAKE_DIGESTS=1<<17, o_VERSION=1<<18, o_LISTNAME=1<<19, o_LISTGROUP=1<<20, o_LIST_VALUES=1<<21, o_OPTIONMAX=1<<31 }; >How-To-Repeat: I believe any test case utilizing a bad range will suffice. >Fix: >Release-Note: >Audit-Trail: >Unformatted: