[Bug c++/19199] [3.3/3.4/4.0/4.1 Regression] Wrong warning about returning a reference to a temporary

mark at codesourcery dot com gcc-bugzilla@gcc.gnu.org
Fri Mar 25 06:29:00 GMT 2005


------- Additional Comments From mark at codesourcery dot com  2005-03-25 06:29 -------
Subject: Re:  [3.3/3.4/4.0/4.1 Regression] Wrong warning about
 returning a reference to a temporary


> Alex, could you confirm that the above suggestion resolves the PR when used
> in combination with your maybe_lvalue_p split?  Mark, do you agree that this
> is a reasonable (the most reasonable?) compromise in the 4.0 timeframe? 

Thank you for looking at this again.

Yes, I think your patch is a reasonable solution in the 4.0 timeframe. 
It does, of course, mean that there will be programs that are less 
well-optimized in C++ than in C, but I agree with you that there's no 
good way around that in the short term.  If you're worried about the 
cost of the strcmp, you could cache the result, but I have no reason to 
think that's a real problem.  Also, I think this patch should go on the 
mainline too, until we get a better fix -- but I think we should work on 
that, so that this doesn't actually make it into 4.1.

(In 4.1, I disagree that we need new tree codes.  I think all we need to 
do is wait to call fold until gimplification time in C++; then, the 
middle end will never see COND_EXPRs used as lvalues.  In C++, 
conditionals can be lvalues, but we actually fix that up before passing 
them to the middle end.  The middle end sees COND_EXPRs that would be 
lvalues in C++, but they are only used as rvalues, so the transformation 
in fold would be fine.

But, we can have that debate later!)

Thanks,



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19199



More information about the Gcc-bugs mailing list