On Wed, Jun 12, 2019 at 01:11:09PM +0200, Martin Liška wrote: > 2019-06-12 Martin Liska <mli...@suse.cz> > > * calls.c (special_function_p): Make it global. > * calls.h (special_function_p): Declare.
Why? > * tree-cfg.c (do_warn_unused_result): Do not > warn for alloca(0). > --- a/gcc/tree-cfg.c > +++ b/gcc/tree-cfg.c > @@ -63,6 +63,7 @@ along with GCC; see the file COPYING3. If not see > #include "opts.h" > #include "asan.h" > #include "profile.h" > +#include "calls.h" > > /* This file contains functions for building the Control Flow Graph (CFG) > for a function tree. */ > @@ -9447,10 +9448,17 @@ 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); > + { > + if ((special_function_p (fdecl, 0) & ECF_MAY_BE_ALLOCA) Why not instead gimple_maybe_alloca_call_p (g) ? On the other side, you want && gimple_call_num_args (g) == 1, if some alloca call had wrong declaration, you might ICE otherwise. > + && TREE_CODE (gimple_call_arg (g, 0)) == INTEGER_CST > + && wi::to_wide (gimple_call_arg (g, 0)) == 0) && integer_zerop (gimple_call_arg (g, 0)) instead? Plus you need a comment explaining why we don't warn about alloca with constant 0 argument. Jakub