На EuroLLVM 2014 Костя Серебряный представил способ обнаружения переполнения вектора. На слайде 12 он представляет ссылку на версию GCC 207517, где можно увидеть branches/google/gcc-4_8/libstdc++-v3/
.
Интересно, в какой версии GCC можно использовать обнаружение ошибок переполнения контейнера? Если он только в транке, доступен ли он в выпуске Clang 3.9 или он также есть в транке?
Как использовать обнаружение ошибок переполнения контейнера в GCC?
Ответы (1)
Аннотации векторов дезинфицирующего средства недоступны в исходном 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&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 теперь нет аннотаций дезинфицирующего средства (ищите «санитайзер»):
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 г.