c++/10760: Compile time increases quadratically with struct size

hzoli@hzoli.2y.net hzoli@hzoli.2y.net
Mon May 12 22:47:00 GMT 2003


>Number:         10760
>Category:       c++
>Synopsis:       Compile time increases quadratically with struct size
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon May 12 22:46:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Zoltan Hidvegi
>Release:        gcc version 3.3 20030512 (prerelease)
>Organization:
>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:
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list