This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/41355] Type of ADDR_EXPR in CALL_EXPR not rebuilt when function is cloned
- From: "hubicka at ucw dot cz" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 5 Jul 2010 19:02:11 -0000
- Subject: [Bug tree-optimization/41355] Type of ADDR_EXPR in CALL_EXPR not rebuilt when function is cloned
- References: <bug-41355-8622@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from hubicka at ucw dot cz 2010-07-05 19:02 -------
Subject: Re: Type of ADDR_EXPR in CALL_EXPR
not rebuilt when function is cloned
> It turns out that the problem is that when build_function_type_skip_args
> creates
> the new type, TYPE_POINTER_TO for the new type is still pointing to the old
> type.
> When gimple_call_set_fndecl is used to change the fndecl to one with less
> arguments, an ADDR_EXPR is built. The type of the ADDR_EXPR is obtained from
> the
> TYPE_POINTER_TO field of the new type, and thus has type pointer-to-old-type
> rather than pointer-to-new-type. I'm testing the following patch. The idea
> here is that calling copy_node has no advantage. In spite of the comment,
The conditional you removed is about case where METHOD_TYPE is passed and
"this" pointer
is not removed. In this case we still want to produce METHOD_TYPE just with
args
adjusted. I think this functionality should be preserved.
Are attributes attached to decl (not type) also copied?
Honza
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41355