------- Comment #7 from rguenth at gcc dot gnu dot org 2009-09-12 12:10 ------- Because I can easily cause exponential growth with them:
void foo (int i) { int i1 = i + i; int i2 = i1 + i1; int i3 = i2 + i2; int i4 = i3 + i3; } will generate # DEBUG i1 => i_1(D) + i_1(D) # DEBUG i2 => (i_1(D) + i_1(D)) + (i_1(D) + i_1(D)) # DEBUG i3 => ((i_1(D) + i_1(D)) + (i_1(D) + i_1(D))) + ((i_1(D) + i_1(D)) + (i_1(D) + i_1(D))) # DEBUG i4 => (((i_1(D) + i_1(D)) + (i_1(D) + i_1(D))) + ((i_1(D) + i_1(D)) + (i_1(D) + i_1(D)))) + (((i_1(D) + i_1(D)) + (i_1(D) + i_1(D))) + ((i_1(D) + i_1(D)) + (i_1(D) + i_1(D)))) Testcase: #define X(new,old) int i ## new = i ## old + i ## old; #define Y(pfx) X(pfx ## 1, pfx) \ X(pfx ## 2, pfx ## 1) \ X(pfx ## 3, pfx ## 2) \ X(pfx ## 4, pfx ## 3) \ X(pfx ## 5, pfx ## 4) \ X(pfx ## 6, pfx ## 5) \ X(pfx ## 7, pfx ## 6) \ X(pfx ## 8, pfx ## 7) \ X(pfx ## 9, pfx ## 8) void foo (int i1) { Y(1) Y(11) Y(111) } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41343