Как использовать обнаружение ошибок переполнения контейнера в GCC?

На EuroLLVM 2014 Костя Серебряный представил способ обнаружения переполнения вектора. На слайде 12 он представляет ссылку на версию GCC 207517, где можно увидеть branches/google/gcc-4_8/libstdc++-v3/.
Интересно, в какой версии GCC можно использовать обнаружение ошибок переполнения контейнера? Если он только в транке, доступен ли он в выпуске Clang 3.9 или он также есть в транке?


person DuckQueen    schedule 17.07.2016    source источник
comment
У меня есть забавная проблема - есть какое-то обнаружение ошибок переполнения контейнера, которое представлено и принудительно представлено в MSVC 2015. В версиях, скомпилированных с ним, все наши модульные тесты терпят неудачу... поэтому мне нужно убедить Linux (где эти ошибки не появляются). ) разработчикам, что это не проблема Windows, а ошибка в коде, которую нужно исправить.   -  person DuckQueen    schedule 17.07.2016
comment
Вы должны отредактировать вопрос, чтобы включить эту информацию, а не комментировать под ней.   -  person Borgleader    schedule 17.07.2016
comment
это помогает?   -  person Baum mit Augen    schedule 17.07.2016
comment
@BaummitAugen: нет информации, к какой минимальной версии GCC это относится.   -  person DuckQueen    schedule 17.07.2016
comment
@Borgleader: ИМХО, это скорее забавный факт, чем информация, связанная с вопросами ...   -  person DuckQueen    schedule 17.07.2016
comment
@DuckQueen Не могу увидеть это в документах, но я никогда не слышал, чтобы это было новым, так что, вероятно, оно старое. В 4.8 точно есть, я уже тогда пользовался.   -  person Baum mit Augen    schedule 17.07.2016
comment
Как вы могли бы использовать его, если коммит добавил векторные аннотации всего 2 года назад в ветку Google gcc 4.8?   -  person DuckQueen    schedule 18.07.2016
comment
@DuckQueen Я использовал не эту штуку google, а вещь из ссылки (которая также проверяет доступ за пределами сети и т. д. в контейнерах стандартной библиотеки). Кстати, вы должны @пинговать меня, когда отвечаете мне, я увидел это случайно.   -  person Baum mit Augen    schedule 18.07.2016


Ответы (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":

https://gcc.gnu.org/viewcvs/gcc/branches/google/gcc-4_8/libstdc%2B%2B-v3/include/bits/vector.tcc?r1=207517&r2=207516&pathrev=207517

Мы можем получить имена аннотаций из коммита:

 // 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 г.

person osgx    schedule 19.07.2016