[Symbol] GetTypeBitAlign() should return None in case of failure.

Summary:
And not `zero`. This is the last API needed to be converted to
an Optional<T>.

Reviewers: xiaobai, compnerd

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D66093

llvm-svn: 368614
This commit is contained in:
Davide Italiano 2019-08-12 20:03:19 +00:00
parent d2e493c337
commit 36f13e4912
7 changed files with 28 additions and 17 deletions

View File

@ -708,7 +708,8 @@ public:
lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override;
size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
llvm::Optional<size_t>
GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;
uint32_t GetNumChildren(lldb::opaque_compiler_type_t type,
bool omit_empty_base_classes,

View File

@ -257,7 +257,7 @@ public:
lldb::Format GetFormat() const;
size_t GetTypeBitAlign() const;
llvm::Optional<size_t> GetTypeBitAlign() const;
uint32_t GetNumChildren(bool omit_empty_base_classes,
const ExecutionContext *exe_ctx) const;

View File

@ -386,7 +386,8 @@ public:
virtual bool IsCStringType(lldb::opaque_compiler_type_t type,
uint32_t &length) = 0;
virtual size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) = 0;
virtual llvm::Optional<size_t>
GetTypeBitAlign(lldb::opaque_compiler_type_t type) = 0;
virtual CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) = 0;

View File

@ -530,12 +530,15 @@ public:
return;
}
size_t bit_align =
llvm::Optional<size_t> opt_bit_align =
m_variable_sp->GetType()->GetLayoutCompilerType().GetTypeBitAlign();
size_t byte_align = (bit_align + 7) / 8;
if (!opt_bit_align) {
err.SetErrorStringWithFormat("can't get the type alignment for %s",
m_variable_sp->GetName().AsCString());
return;
}
if (!byte_align)
byte_align = 1;
size_t byte_align = (*opt_bit_align + 7) / 8;
Status alloc_error;
const bool zero_memory = false;
@ -788,11 +791,14 @@ public:
err.SetErrorString("can't get size of type");
return;
}
size_t bit_align = m_type.GetTypeBitAlign();
size_t byte_align = (bit_align + 7) / 8;
if (!byte_align)
byte_align = 1;
llvm::Optional<size_t> opt_bit_align = m_type.GetTypeBitAlign();
if (!opt_bit_align) {
err.SetErrorStringWithFormat("can't get the type alignment");
return;
}
size_t byte_align = (*opt_bit_align + 7) / 8;
Status alloc_error;
const bool zero_memory = true;

View File

@ -1302,8 +1302,10 @@ bool IRForTarget::MaybeHandleVariable(Value *llvm_value_ptr) {
llvm::Optional<uint64_t> value_size = compiler_type.GetByteSize(nullptr);
if (!value_size)
return false;
lldb::offset_t value_alignment =
(compiler_type.GetTypeBitAlign() + 7ull) / 8ull;
llvm::Optional<size_t> opt_alignment = compiler_type.GetTypeBitAlign();
if (!opt_alignment)
return false;
lldb::offset_t value_alignment = (*opt_alignment + 7ull) / 8ull;
LLDB_LOG(log,
"Type of \"{0}\" is [clang \"{1}\", llvm \"{2}\"] [size {3}, "

View File

@ -5087,10 +5087,11 @@ ClangASTContext::GetBitSize(lldb::opaque_compiler_type_t type,
return None;
}
size_t ClangASTContext::GetTypeBitAlign(lldb::opaque_compiler_type_t type) {
llvm::Optional<size_t>
ClangASTContext::GetTypeBitAlign(lldb::opaque_compiler_type_t type) {
if (GetCompleteType(type))
return getASTContext()->getTypeAlign(GetQualType(type));
return 0;
return {};
}
lldb::Encoding ClangASTContext::GetEncoding(lldb::opaque_compiler_type_t type,

View File

@ -503,10 +503,10 @@ CompilerType::GetByteSize(ExecutionContextScope *exe_scope) const {
return {};
}
size_t CompilerType::GetTypeBitAlign() const {
llvm::Optional<size_t> CompilerType::GetTypeBitAlign() const {
if (IsValid())
return m_type_system->GetTypeBitAlign(m_type);
return 0;
return {};
}
lldb::Encoding CompilerType::GetEncoding(uint64_t &count) const {