------- 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