Доклад

Как компиляторы на основе LLVM моделируют неопределенное поведение и извлекают из него пользу

  • На русском языке

Все знают, что в С++ некоторые конструкции ведут к неопределенному поведению программы (UB). Многие догадываются, что благодаря этому компиляторы могут лучше оптимизировать код. Но немногие знают, как именно компиляторы моделируют работу с неопределенным поведением, и как устроены оптимизации на их основе.

Я расскажу о том, как компиляторы на основе LLVM, такие как Clang, решали проблему представления неопределенного поведения в своем IR. Познакомимся с понятием отложенного UB, из-за которого опасный код не взрывается сразу, и поговорим о том, как LLVM с ним работает. Как было раньше и как стало сейчас, как от этого выигрывает оптимизатор, и какие опасности подстерегают тех, кто недостаточно осторожен с конструкциями, которые могут производить UB.

Спикеры

Доклады