Код Clang предполагает, что ошибка cannot compile this <something> yet
означает, что <something>
является конструкцией, которая не поддерживается Clang в целевой архитектуре.
В этом случае init_dwarf_reg_size_table
является встроенным GCC,который не полностью поддерживается на всех целях Clang.Проверка GCC builtins.def
может подтвердить, что init_dwarf_reg_size_table
является расширением GCC.
В качестве обходного пути вам, возможно, придется скомпилировать вместо этого GCC или более позднюю версию clang, которая поддерживаетэто встроенное, если есть.
После кода лязга сообщение cannot compile this <something> yet
печатается функцией ErrorUnsupported
в CodeGenModule.cpp
:
/// ErrorUnsupported - Print out an error that codegen doesn't support the
/// specified stmt yet.
void CodeGenModule::ErrorUnsupported(const Stmt *S, const char *Type) {
unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
"cannot compile this %0 yet");
std::string Msg = Type;
getDiags().Report(Context.getFullLoc(S->getLocStart()), DiagID)
<< Msg << S->getSourceRange();
}
В CGBuiltin.cpp
встроенная функция раскрывается и ErrorUnsupported
вызывается, если целевой хук initDwarfEHRegSizeTable
не удался:
case Builtin::BI__builtin_init_dwarf_reg_size_table: {
Value *Address = EmitScalarExpr(E->getArg(0));
if (getTargetHooks().initDwarfEHRegSizeTable(*this, Address))
CGM.ErrorUnsupported(E, "__builtin_init_dwarf_reg_size_table");
return RValue::get(llvm::UndefValue::get(ConvertType(E->getType())));
}
initDwarfEHRegSizeTable
определено в TargetInfo.cpp
.Честно говоря, я еще не до конца понимаю, при каких условиях он выходит из строя (что также зависит от целевой архитектуры).