------- Comment #5 from pinskia at gcc dot gnu dot org 2008-12-31 21:11 ------- Actually this testcase is regression because of the removal of SFTs. in 4.1-4.3, the loop did not exist. In fact I filed this bug right after SFTs were removed.
The reason why it is considered addressable is because of: /* Return true if T is a GIMPLE variable whose address is not needed. */ bool is_gimple_non_addressable (tree t) { if (TREE_CODE (t) == SSA_NAME) t = SSA_NAME_VAR (t); return (is_gimple_variable (t) && ! needs_to_live_in_memory (t)); } needs_to_live_in_memory is true because of return (TREE_ADDRESSABLE (t) || is_global_var (t) || (TREE_CODE (t) == RESULT_DECL && aggregate_value_p (t, current_function_decl))); And aggregate_value_p is true because of: if (TREE_CODE (exp) == CALL_EXPR && fndecl && DECL_RESULT (fndecl) && DECL_BY_REFERENCE (DECL_RESULT (fndecl))) return 1; DECL_BY_REFERENCE is true because this is a nonPOD. -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|enhancement |normal Known to fail| |4.4.0 Known to work| |4.3.0 4.1.2 Summary|NVR in the front-end causes |[4.4 Regression] NVR in the |missed optimization later on|front-end causes missed |(<retval> thought to alias |optimization later on |arguments) |(<retval> thought to alias | |arguments) Target Milestone|--- |4.4.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36201