------- Additional Comments From mark at codesourcery dot com 2005-03-03 18:47 ------- Subject: Re: [3.4 Regression] const/pure functions result in bad asm
ebotcazou at gcc dot gnu dot org wrote: > 2. The tree-inliner inlines the call. Since the same tree is referenced twice > in the expression, the inlined body is also referenced twice is the expression > and, therefore, expanded twice to RTL. However labels are not expanded > multiple > times but reused, so the second block of RTL ends up referencing the first and > all hell breaks loose. It really seems like the C++ front end is doing the right thing, abstractly -- these functions don't have side-effects! So, either the inliner or stabilize reference seems like it needs fixing. Maybe the latter should recognize CALL_EPRs? If it's not possible to fix this, then what we should do is modify build3 to mark CALL_EXPRs as having side-effects. Right now, it makrs them based on the flags for the function, so this problem isn't really C++-specific; it probably effects all languages except those whose front ends set TREE_SIDE_EFFECTS additionally themselves. (Unless C++ is changing out the operands to the CALL_EXPR after its created.) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17972