As the patch quite significantly slowed down tramp3d, there's analysis of # of variables which are poisoned by the sanitizer:
== normal variables == 24 B: 348x (5.80%) 16 B: 273x (4.55%) 8 B: 237x (3.95%) 1 B: 177x (2.95%) 4 B: 119x (1.98%) 40 B: 89x (1.48%) 144 B: 83x (1.38%) == C++ artifical variables == 1 B: 1325x (22.08%) 8 B: 983x (16.38%) 24 B: 586x (9.77%) 144 B: 415x (6.92%) 4 B: 310x (5.17%) 12 B: 274x (4.57%) 16 B: 119x (1.98%) Where sample of C++ artificial can be seen here: struct iterator D.608813; struct iterator D.369241; try { ASAN_MARK (2, &D.369241, 8); _1 = &this->D.110510._M_impl._M_start; __gnu_cxx::__normal_iterator<Pooma::StatisticsData**, std::vector<Pooma::StatisticsData*> >::__normal_iterator (&D.369241, _1); try { D.608813 = D.369241; return D.608813; } finally { ASAN_MARK (1, &D.369241, 8); } } catch { <<<eh_must_not_throw (terminate)>>> } Problem is that these artificial variables (>70% of all in tramp3d) are often passed by reference and many functions in tramp3d either mark the argument as unused, or just dereference. In situations where a reference is not saved, these variables should not live in memory. However, do we have a machinery that can help with that? My next step would be to adapt sanopt algorithm to catch use-after-scope {un}poisoning, however this is a different story that has significant impact on # of poisoned variables. Thoughts? Martin