detect empty functions
Prathamesh Kulkarni
bilbotheelffriend@gmail.com
Thu Feb 6 14:30:00 GMT 2014
On Thu, Feb 6, 2014 at 7:48 PM, Florian Weimer <fweimer@redhat.com> wrote:
> On 02/06/2014 03:15 PM, Prathamesh Kulkarni wrote:
>>
>> On Thu, Feb 6, 2014 at 5:34 PM, Florian Weimer <fweimer@redhat.com> wrote:
>>>
>>> On 02/05/2014 03:30 PM, Prathamesh Kulkarni wrote:
>>>>
>>>>
>>>> I wanted to ask, is there a way to detect if a function has empty body
>>>> using GCC API ?
>>>
>>>
>>>
>>> Yes, you can write a plug-in and iterate over all the basic blocks in a
>>> function and check if they are empty.
>
>
>> I was looking for a way to detect empty function at GENERIC level.
>> Is the following correct way to do it ?
>
>
> I expect it's not fully reliable because the parser will remove some
> constructs and add others. It depends on what you're trying to achieve.
I was trying to make -Wunused-parameter not warn, if the function is
empty (since an empty function would most likely
be a stub function).
Does that sound reasonable ?
+bool
+is_tree_empty_function (tree fn)
+{
+ tree body, kid;
+
+ body = DECL_SAVED_TREE (fn);
+ if (!body)
+ return false;
+ kid = TREE_OPERAND (body, 1); // body is bind_expr
+ gcc_assert (kid);
+ return TREE_CODE (kid) == STATEMENT_LIST && (STATEMENT_LIST_HEAD
(kid) == NULL);
+}
+
/* Possibly warn about unused parameters. */
void
do_warn_unused_parameter (tree fn)
{
tree decl;
-
+ bool empty_function;
+
+ empty_function = is_tree_empty_function (fn);
for (decl = DECL_ARGUMENTS (fn);
decl; decl = DECL_CHAIN (decl))
if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
&& DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)
- && !TREE_NO_WARNING (decl))
+ && !TREE_NO_WARNING (decl) && !empty_function)
warning (OPT_Wunused_parameter, "unused parameter %q+D", decl);
}
>
>
> --
> Florian Weimer / Red Hat Product Security Team
More information about the Gcc-help
mailing list