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

Compile time increases quadratically with struct size



>Submitter-Id:	net
>Originator:	Zoltan Hidvegi
>Confidential:	no
>Synopsis:	Compile time increases quadratically with struct size
>Severity:	critical
>Priority:	medium
>Category:	c++
>Class:		sw-bug
>Release:	gcc version 3.3 20030512 (prerelease)
>Environment:
System: x86/Linux & PowerPC/AIX

>Description:
Name lookups for struct members use linear search, which can result in
quadratic compile time increase.  See also c/10675:
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=10675
http://gcc.gnu.org/ml/gcc-bugs/2003-05/msg01072.html

This happens in both c and c++, but I can only specify one category.

>How-To-Repeat:
The following is a shell script that will generate a struct with a
given number of members and a functions that assings zero to all
members.

------- BEGIN biggen.sh -------------
#! /bin/sh
let i=0
echo 'struct foo {'
while [ "$i" -lt "$1" ]
do
    echo "    int i_$((i=i+1));"
done
echo '};'
#echo 'struct foo f;'

let i=0
echo 'void init_foo(struct foo *p) {'
while [ "$i" -lt "$1" ]
do
    echo "    p->i_$((i=i+1)) = 0;"
done
echo '}'
--------- END biggen.sh -------------

Run it like this:
./biggen.sh 10000 > big.C; time g++ -c big.c
Change the number from 10000 and see how the compile time is
affected.  Also watch the memory usage, e.g. with 25000 members it
needs 55M, but the memory usage scales linearly.

>Fix:



Reply to: