На EuroLLVM 2014 Костя Серебряный представил способ обнаружения переполнения вектора. На слайде 12 он представляет ссылку на GCC, редакция 207517 где можно увидеть branches/google/gcc-4_8/libstdc++-v3/
,
Интересно, в какой версии GCC я могу использовать обнаружение ошибок переполнения контейнера?
Если это только в стволе, это доступно в выпуске Clang 3.9, или это также в стволе?
Векторные аннотации Sanitizer недоступны в исходном gcc, эти изменения являются лишь частью ветки gcc google (опубликованной на gcc.gnu.org). Описание филиалов: https://www.gnu.org/software/gcc/svn.html
google/main
Эта ветвь содержит локальные патчи Google, предназначенные для добавления в транк. Некоторые из этих исправлений либо находятся в процессе проверки, либо еще не были предложены. Цель этой ветви — служить промежуточной платформой для совместной работы с внешними разработчиками. Ожидается, что патчи в этой ветке останутся здесь до тех пор, пока они не будут рассмотрены и приняты в транке. Эта ветвь поддерживается Диего Новилло
Фиксация добавления аннотаций AddressSanitizer в вектор:
https://gcc.gnu.org/viewcvs/gcc?view=revision&Пересмотр = 207517 «Для Google b / 8513090 добавьте аннотации AddressSanitizer в std :: vector»:
Мы можем получить имена аннотаций из коммита:
// When sanitizer annotataions are off, avoid bazillion of no-op
// functions that blow up debug binary size.
#define __sanitizer_vector_annotate_new()
#define __sanitizer_vector_annotate_delete()
#define __sanitizer_vector_annotate_increase(a)
#define __sanitizer_vector_annotate_shrink(a)
В транковой версии GNU vector.tcc или stl_vector.h нет аннотаций дезинфицирующего средства (ищите «sanitizer»):
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/vector.tcc
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_vector.h
Тема в списке рассылки gcc-patches: https://gcc.gnu.org/ml/gcc-patches/2014-05/msg02180.html «обнаружение» ошибок переполнения контейнера в std :: vector «, От: Константин Серебряный, 26 мая 2014.
Других решений пока нет …