This fixes an invalid NRV optimization done for returning a non-automatic var.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2014-10-08 Richard Biener <rguent...@suse.de> PR tree-optimization/61969 * tree-nrv.c (pass_nrv::execute): Properly test for automatic variables. Index: gcc/tree-nrv.c =================================================================== --- gcc/tree-nrv.c (revision 215917) +++ gcc/tree-nrv.c (working copy) @@ -216,8 +216,7 @@ pass_nrv::execute (function *fun) same type and alignment as the function's result. */ if (TREE_CODE (found) != VAR_DECL || TREE_THIS_VOLATILE (found) - || DECL_CONTEXT (found) != current_function_decl - || TREE_STATIC (found) + || !auto_var_in_fn_p (found, current_function_decl) || TREE_ADDRESSABLE (found) || DECL_ALIGN (found) > DECL_ALIGN (result) || !useless_type_conversion_p (result_type,