Сбой сборки LLVM при включенном MemorySanitizerC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сбой сборки LLVM при включенном MemorySanitizer

Сообщение Anonymous »

Получено из-за ошибки llvm при попытке собрать libcxx, оснащенной дезинфицирующим средством памяти.
Я пытаюсь собрать LLVM с помощью проектов libcxx и libcxxabi, оснащенных MemorySanitizer (Msan), для отладки использования неинициализированной памяти. в моих приложениях на C++.
Однако в процессе сборки возникают ошибки.
Предпринятые шаги
Во-первых, я успешно выполнил следующую команду CMake:

Код: Выделить всё

cmake -GNinja ../llvm \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DLLVM_USE_SANITIZER=MemoryWithOrigins
После выполнения команды я попытался собрать LLVM с помощью Ninja:

Код: Выделить всё

ninja -C ~/llvm-project/build -j2
Вывод ошибки
Возможно, я получил следующий вывод ошибки MemorySanitizer:

Код: Выделить всё

#7 0x555f2def5c9c in llvm::RecordKeeper::addClass(std::unique_ptr) /home/j/llvm-project/llvm/include/llvm/TableGen/Record.h:2027:24
#8 0x555f2def3f4 in llvm::TGParser::ParseClass() /home/j/llvm-project/llvm/lib/TableGen/TGParser.cpp:4008:13
#9 0x555f2def0bd7 in llvm::TGParser::ParseObject(llvm::MultiClass*) /home/j/llvm-project/llvm/lib/TableGen/TGParser.cpp:4377:12
#10 0x555f2df00c6a in ParseObjectList /home/j/llvm-project/llvm/lib/TableGen/TGParser.cpp:4389:9
#11 0x555f2df00c6a in llvm::TGParser::ParseFile() /home/j/llvm-project/llvm/lib/TableGen/TGParser.cpp:4398:7
#12 0x555f2ddb4772 in llvm::TableGenMain(char const*, std::function) /home/j/llvm-project/llvm/lib/TableGen/Main.cpp:127:14
#13 0x555f2db78c32 in main /home/j/llvm-project/llvm/utils/TableGen/TableGen.cpp:81:10
#14 0x7ff357429d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16

SUMMARY: MemorySanitizer: use-of-uninitialized-value /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/stl_tree.h:1336:4 in _M_lower_bound_tr
Exiting
ninja: build stopped: subcommand failed.
Цель сборки с помощью MemorySanitizer
Единственная причина, по которой я создаю LLVM с помощью строки -DLLVM_USE_SANITIZER=MemoryWithOrigins, — это исправьте проблему MemorySanitizer, поскольку он выдает ошибку при использовании неинициализированных значений. Согласно странице MemorySanitizer на GitHub, сборка LLVM с этим флагом необходима.
Когда я отключаю этот флаг, сборка завершается успешно, но я теряю возможность диагностировать проблемы с неинициализированной памятью.
Когда я отключаю этот флаг, сборка завершается успешно, но я теряю возможность диагностировать проблемы с неинициализированной памятью.
p>
Вопрос
Как я могу успешно создать LLVM с включенным MemorySanitizer, не столкнувшись с этими ошибками? Есть ли какие-то конкретные флаги или конфигурации, которые мне следует попробовать?

Подробнее здесь: https://stackoverflow.com/questions/791 ... er-enabled
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»