On Tue, Jul 04, 2017 at 09:47:29AM +0200, Martin Liška wrote: > As mentioned in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81040#c15, the > sanitization is > done only when one uses use-after-scope. That's caused by fact that I > decorated the newly > created auto variables with DECL_ARTIFICIAL = 1. Because of that > > static inline bool > asan_protect_stack_decl (tree decl) > { > return DECL_P (decl) > && (!DECL_ARTIFICIAL (decl) > || (asan_sanitize_use_after_scope () && TREE_ADDRESSABLE (decl))); > } > > returns false. I hope not marking the variable as DECL_ARTIFICIAL will work > fine? > Or am I missing something?
Well, you should make sure the debug info is correct. Which means ideally that there is just one DW_TAG_formal_parameter and no DW_TAG_variable for the parameter. For the addressable parameters I hope the corresponding artificial vars just live in memory for the whole rest of the scope, at least for the case where you emit a debug bind (hope it is after the assignment to the artificial var) I think it should be fine to set DECL_IGNORED_P on the artificial var instead of DECL_ARTIFICIAL. For the other case where there is DECL_VALUE_EXPR, perhaps try it too and see what you get. Jakub