On Wed, Jun 12, 2019 at 01:30:14PM +0200, Martin Liška wrote: > @@ -9447,10 +9448,19 @@ do_warn_unused_result (gimple_seq seq) > location_t loc = gimple_location (g); > > if (fdecl) > - warning_at (loc, OPT_Wunused_result, > - "ignoring return value of %qD " > - "declared with attribute %<warn_unused_result%>", > - fdecl); > + { > + /* Some C libraries use alloca(0) in order to free previously > + allocated memory by alloca calls. */ > + if (gimple_maybe_alloca_call_p (g) > + && gimple_call_num_args (g) == 1 > + && integer_zerop (gimple_call_arg (g, 0))) > + ; > + else
Wouldn't it be easier to negate the condition and avoid the weird ; else ? I.e. if (!gimple_maybe... || gimple_call_num != 1 || !integer_zerop? > + warning_at (loc, OPT_Wunused_result, > + "ignoring return value of %qD declared " > + "with attribute %<warn_unused_result%>", > + fdecl); > + } > else > warning_at (loc, OPT_Wunused_result, > "ignoring return value of function " Otherwise LGTM as the patch, but I'd like to hear from others whether it is kosher to add such a special case to the warn_unused_result attribute warning. And if the agreement is yes, I think it should be documented somewhere that alloca (0) will not warn even when the call has such an attribute (probably in the description of warn_unused_result attribute). Jakub