[Lldb-commits] [lldb] [lldb][ClangExpressionParser] Log and assert on failure to create TargetInfo (PR #101697)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 2 10:11:20 PDT 2024
================
@@ -465,18 +465,24 @@ ClangExpressionParser::ClangExpressionParser(
// A value of 0 means no limit for both LLDB and Clang.
m_compiler->getDiagnostics().setErrorLimit(target_sp->GetExprErrorLimit());
- auto target_info = TargetInfo::CreateTargetInfo(
- m_compiler->getDiagnostics(), m_compiler->getInvocation().TargetOpts);
- if (log) {
- LLDB_LOGF(log, "Target datalayout string: '%s'",
- target_info->getDataLayoutString());
- LLDB_LOGF(log, "Target ABI: '%s'", target_info->getABI().str().c_str());
- LLDB_LOGF(log, "Target vector alignment: %d",
- target_info->getMaxVectorAlign());
- }
- m_compiler->setTarget(target_info);
+ if (auto *target_info = TargetInfo::CreateTargetInfo(
+ m_compiler->getDiagnostics(),
+ m_compiler->getInvocation().TargetOpts)) {
+ if (log) {
+ LLDB_LOGF(log, "Target datalayout string: '%s'",
+ target_info->getDataLayoutString());
+ LLDB_LOGF(log, "Target ABI: '%s'", target_info->getABI().str().c_str());
+ LLDB_LOGF(log, "Target vector alignment: %d",
+ target_info->getMaxVectorAlign());
+ }
+ m_compiler->setTarget(target_info);
+ } else {
+ if (log)
+ LLDB_LOGF(log, "Failed to create TargetInfo for '%s'",
+ m_compiler->getTargetOpts().Triple.c_str());
- assert(m_compiler->hasTarget());
+ lldbassert(false && "Failed to create TargetInfo.");
----------------
Michael137 wrote:
It's a bit awkward because this all happens in the constructor. And stopping the construction half-way probably won't buy us much. I think this is one of those unusual circumstance where we want to assert at runtime. I guess we could have a separate `Init` method for the `ClangExpressionParser`. Which returns `Expected`. Then update all the users to check the return of that.
But that's a larger refactor that we can do at some later point.
What used to happen in release builds (tbh I'm not sure if this ever really gets exercised in practice), is that `target_info` was a `nullptr`. And we just happily continued with the construction of the object.
https://github.com/llvm/llvm-project/pull/101697
More information about the lldb-commits
mailing list