------- 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

Reply via email to