[Lldb-commits] [PATCH] D56688: Make CompilerType::getBitSize() / getByteSize() return an optional result. (NFC)

Adrian Prantl via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Mon Jan 14 16:22:05 PST 2019


aprantl created this revision.
aprantl added reviewers: jingham, davide, labath, clayborg.
Herald added subscribers: atanasyan, kbarton, javed.absar, nemanjai.

My apologies for the horrible patch.

The code in LLDB assumes that CompilerType and friends use the size 0 as a sentinel value to signal an error. This works for C++, where no zero-sized type exists, but in many other programming languages (including I believe C) types of size zero are possible and even common. This is a particular pain point in swift-lldb, where extra code exists to double-check that a type is *really* of size zero and not an error at various locations.

To remedy this situation, this patch starts by converting CompilerType::getBitSize() and getByteSize() to return an optional result. To avoid wasting space, I hand-rolled my own optional data type assuming that no type is larger than what fits into 63 bits. Follow-up patches would make similar changes to the ValueObject hierarchy.


https://reviews.llvm.org/D56688

Files:
  include/lldb/Symbol/CompilerType.h
  include/lldb/Target/ProcessStructReader.h
  source/API/SBType.cpp
  source/Commands/CommandObjectMemory.cpp
  source/Core/Value.cpp
  source/Core/ValueObject.cpp
  source/Core/ValueObjectConstResult.cpp
  source/Core/ValueObjectMemory.cpp
  source/Core/ValueObjectVariable.cpp
  source/DataFormatters/TypeFormat.cpp
  source/DataFormatters/VectorType.cpp
  source/Expression/Materializer.cpp
  source/Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.cpp
  source/Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.cpp
  source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp
  source/Plugins/ABI/SysV-arm/ABISysV_arm.cpp
  source/Plugins/ABI/SysV-arm64/ABISysV_arm64.cpp
  source/Plugins/ABI/SysV-i386/ABISysV_i386.cpp
  source/Plugins/ABI/SysV-mips/ABISysV_mips.cpp
  source/Plugins/ABI/SysV-mips64/ABISysV_mips64.cpp
  source/Plugins/ABI/SysV-ppc/ABISysV_ppc.cpp
  source/Plugins/ABI/SysV-ppc64/ABISysV_ppc64.cpp
  source/Plugins/ABI/SysV-s390x/ABISysV_s390x.cpp
  source/Plugins/ABI/SysV-x86_64/ABISysV_x86_64.cpp
  source/Plugins/ExpressionParser/Clang/IRForTarget.cpp
  source/Plugins/Language/CPlusPlus/CxxStringTypes.cpp
  source/Plugins/Language/CPlusPlus/LibCxx.cpp
  source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp
  source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp
  source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
  source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
  source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
  source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
  source/Symbol/ClangASTContext.cpp
  source/Symbol/CompilerType.cpp
  source/Symbol/Type.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56688.181665.patch
Type: text/x-patch
Size: 116759 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20190115/d5590d11/attachment-0001.bin>


More information about the lldb-commits mailing list