Hello,
On Fri, 13 Mar 2020, Erick Ochoa wrote:
> + for (tree parm = DECL_ARGUMENTS (undefined_function->decl); parm; parm =
> DECL_CHAIN (parm))
> + {
> + tree type = TREE_TYPE(parm);
> + if (dump_file) fprintf(dump_file, "I want the type, do I have it?
> %s\n", type ? "true" : "false");
> + }
> + }
> + return 0;
> +}
>
> I have added the complete patch below, however the function iphw_execute
> encapsulates the logic I am trying at the moment.
>
> The problem is that while this program runs, DECL_ARGUMENTS returns NULL and
> therefore the loop is never entered. This is true for functions that have
> arguments, such as puts/malloc/... and others in glibc.
As argument (types) conceptually belong to the functions type (not its
decl), you should look at the function decls type, not at DECL_ARGUMENTS.
See the FOREACH_FUNCTION_ARGS iterator and its helpers. Note that you
need to pass it TREE_TYPE(funcdecl).
(DECL_ARGUMENTS is the list of formal parameters viewed from the function
bodies perspective, so without a body that isn't filled).
Ciao,
Michael.