http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55341
--- Comment #45 from Kostya Serebryany <kcc at gcc dot gnu.org> 2012-12-23 07:44:32 UTC --- >> The point of failure is not in the object, >> but in a routine called after a routine from this object finishes. What if you remove -fsanitize=address for that single object? Your explanation sounds like we are missing some of the return statements in that routine. Consider this code: foo(); bar(); foo is the guilty routine, bar is the routine where a failure happens. - foo is entered, asan poisons redzones between all stack objects in foo. - foo exits, all redzones should be unpoisoned. But due to some bug this does not happen. - bar enters and some of bar's stack variables have the same addresses as redzones in foo, which are still poisoned. BOOM. Just speculating...