On Fri, Jun 06, 2014 at 09:08:17AM +0400, Yury Gribov wrote: > Build_check_stmt is now unified for const/variable lengths > but I'd still prefer to treat the use_calls case specially > because calling single __asan_loadN is more space-efficient > than emitting two separate calls with a length check.
That is not what I meant. 1) instrument_mem_region_access/instrument_strlen should use a single build_check_stmt call instead of two that they do now, both for use_calls case and !use_calls case, the difference is just that instrument_mem_region_access needs to guard it against len == 0, while for use_calls it doesn't have to, it seems __asan_{load,store}N handles length of 0 correctly (still, the caller shouldn't update_mem_ref_hash_table if length might be zero, even in the use_calls case) 2) passing always a tree length to build_check_stmt and then recreating size_in_bytes out of it is ugly, just add a new tree parameter, if it is non-NULL, the length is variable, and real_size_in_bytes should be 1, and the code additionally has to compute length - 1 at runtime and add the result, otherwise it just keeps adding precomputed constant Jakub