Начало основного контента

Type Sanitizer: способ обнаружения нарушений правил strict aliasing в C++

Зал 3
Язык -RU

Одними из наиболее неочевидных и трудноуловимых правил стандарта языка С++ являются правила strict aliasing, которые создают множество проблем (например, таких как «каламбур типов» (type punning)). Из-за этого многие приложения собираются с опцией -fno-strict-aliasing, которая запрещает компилятору полагаться на использование этих правил. В свою очередь, это ведет к снижению производительности программ, т. к. компиляторные оптимизации, полагающиеся на анализ типов, не могут в полной мере произвести оптимизацию кода. Вместо этого было бы полезно иметь способ обнаружения нарушений strict aliasing-правил, который бы позволил избежать использования опции -fno-strict-aliasing при сборке программы.

В данном докладе обсуждается способ динамического анализа приложений, который позволит обнаружить нарушения strict aliasing-правил, не замеченных компилятором. Данный доклад нацелен по большей части на компиляторную аудиторию, т. к. затрагивает детали реализации внутренностей LLVM.

  • #llvm
  • #компиляторы
  • #динамический_анализ