This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/17972] [3.4 Regression] const/pure functions result in bad asm
- From: "mark at codesourcery dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Mar 2005 18:47:07 -0000
- Subject: [Bug c++/17972] [3.4 Regression] const/pure functions result in bad asm
- References: <20041013124723.17972.mostrows@watson.ibm.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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