S
SIGSEGV DREC
@segfault_drec747 подп.
820просмотров
13 марта 2025 г.
Score: 902
Такие себе инженерные решения Копаясь в LLVM, нашёл в clang/doc/LibTooling.rst строку в глобальном scope: static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage); И это выглядит очень странно: как-то неявно связанное с... Чем-то глобальным. Так оно в целом и есть. Посмотрим на сам класс: struct extrahelp { StringRef morehelp; explicit extrahelp(StringRef help); }; extrahelp::extrahelp(StringRef Help) : morehelp(Help) { GlobalParser->MoreHelp.push_back(Help); } То есть фактически здесь сделан вызов до main с помощью конструктора глобального объекта. Но здесь мы используем какой-то другой глобальный объект... А началась ли его жизнь? И здесь ещё один трюк: static ManagedStatic<CommandLineParser> GlobalParser; А ManagedStatic — это класс с перегрузкой operator*/operator->, которые лениво создают этот объект. Забавно. #compiler #llvm
820
просмотров
862
символов
Нет
эмодзи
Нет
медиа

Другие посты @segfault_drec

Все посты канала →
Такие себе инженерные решения Копаясь в LLVM, нашёл в clang/ — @segfault_drec | PostSniper