[lldb] llvm::Optional::value() && => operator*/operator->

std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
This commit is contained in:
Fangrui Song
2022-12-17 20:37:13 +00:00
parent b6ef76a1ec
commit f43886e7ba
8 changed files with 31 additions and 33 deletions

View File

@@ -144,10 +144,10 @@ protected:
"`frame diagnose --address` is incompatible with other arguments.");
return false;
}
valobj_sp = frame_sp->GuessValueForAddress(m_options.address.value());
valobj_sp = frame_sp->GuessValueForAddress(*m_options.address);
} else if (m_options.reg) {
valobj_sp = frame_sp->GuessValueForRegisterAndOffset(
m_options.reg.value(), m_options.offset.value_or(0));
*m_options.reg, m_options.offset.value_or(0));
} else {
StopInfoSP stop_info_sp = thread->GetStopInfo();
if (!stop_info_sp) {

View File

@@ -1739,7 +1739,7 @@ protected:
const llvm::Optional<std::vector<addr_t>> &dirty_page_list =
range_info.GetDirtyPageList();
if (dirty_page_list) {
const size_t page_count = dirty_page_list.value().size();
const size_t page_count = dirty_page_list->size();
result.AppendMessageWithFormat(
"Modified memory (dirty) page list provided, %zu entries.\n",
page_count);

View File

@@ -1214,8 +1214,7 @@ public:
return transformOptional(inst.rs1.Read(m_emu),
[&](auto &&rs1) {
uint64_t addr = rs1 + uint64_t(inst.imm);
uint64_t bits =
m_emu.ReadMem<uint64_t>(addr).value();
uint64_t bits = *m_emu.ReadMem<uint64_t>(addr);
APFloat f(semantics(), APInt(numBits, bits));
return inst.rd.WriteAPFloat(m_emu, f);
})

View File

@@ -55,8 +55,8 @@ Optional<ParsedName> CPlusPlusNameParser::ParseAsFullName() {
if (HasMoreTokens())
return std::nullopt;
ParsedName result;
result.basename = GetTextForRange(name_ranges.value().basename_range);
result.context = GetTextForRange(name_ranges.value().context_range);
result.basename = GetTextForRange(name_ranges->basename_range);
result.context = GetTextForRange(name_ranges->context_range);
return result;
}
@@ -130,8 +130,8 @@ CPlusPlusNameParser::ParseFunctionImpl(bool expect_return_type) {
SkipFunctionQualifiers();
size_t end_position = GetCurrentPosition();
result.name.basename = GetTextForRange(maybe_name.value().basename_range);
result.name.context = GetTextForRange(maybe_name.value().context_range);
result.name.basename = GetTextForRange(maybe_name->basename_range);
result.name.context = GetTextForRange(maybe_name->context_range);
result.arguments = GetTextForRange(Range(argument_start, qualifiers_start));
result.qualifiers = GetTextForRange(Range(qualifiers_start, end_position));
start_position.Remove();
@@ -709,10 +709,10 @@ CPlusPlusNameParser::ParseFullNameImpl() {
state == State::AfterTemplate) {
ParsedNameRanges result;
if (last_coloncolon_position) {
result.context_range = Range(start_position.GetSavedPosition(),
last_coloncolon_position.value());
result.context_range =
Range(start_position.GetSavedPosition(), *last_coloncolon_position);
result.basename_range =
Range(last_coloncolon_position.value() + 1, GetCurrentPosition());
Range(*last_coloncolon_position + 1, GetCurrentPosition());
} else {
result.basename_range =
Range(start_position.GetSavedPosition(), GetCurrentPosition());

View File

@@ -2049,7 +2049,7 @@ lldb::ValueObjectSP Thread::GetSiginfoValue() {
llvm::Optional<uint64_t> type_size = type.GetByteSize(nullptr);
assert(type_size);
llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> data =
GetSiginfo(type_size.value());
GetSiginfo(*type_size);
if (!data)
return ValueObjectConstResult::Create(&target, Status(data.takeError()));

View File

@@ -883,7 +883,7 @@ static Mangled::NamePreference opts::symtab::getNamePreference() {
int opts::symtab::handleSymtabCommand(Debugger &Dbg) {
if (auto error = validate()) {
logAllUnhandledErrors(std::move(error.value()), WithColor::error(), "");
logAllUnhandledErrors(std::move(*error), WithColor::error(), "");
return 1;
}

View File

@@ -27,7 +27,7 @@ public:
std::string uri(connection_file_descriptor.GetURI());
EXPECT_EQ((URI{"connect", ip, socket->GetRemotePortNumber(), "/"}),
URI::Parse(uri).value());
*URI::Parse(uri));
}
};

View File

@@ -109,77 +109,76 @@ TEST(StringExtractorGDBRemoteTest, GetPidTid) {
// pure thread id
ex.Reset("-1");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(100, StringExtractorGDBRemote::AllThreads));
ex.Reset("1234");
EXPECT_THAT(ex.GetPidTid(100).value(), ::testing::Pair(100, 0x1234ULL));
EXPECT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x1234ULL));
ex.Reset("123456789ABCDEF0");
EXPECT_THAT(ex.GetPidTid(100).value(),
::testing::Pair(100, 0x123456789ABCDEF0ULL));
EXPECT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x123456789ABCDEF0ULL));
// pure process id
ex.Reset("p-1");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(StringExtractorGDBRemote::AllProcesses,
StringExtractorGDBRemote::AllThreads));
ex.Reset("p1234");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
ex.Reset("p123456789ABCDEF0");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x123456789ABCDEF0ULL,
StringExtractorGDBRemote::AllThreads));
ex.Reset("pFFFFFFFFFFFFFFFF");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(StringExtractorGDBRemote::AllProcesses,
StringExtractorGDBRemote::AllThreads));
// combined thread id + process id
ex.Reset("p-1.-1");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(StringExtractorGDBRemote::AllProcesses,
StringExtractorGDBRemote::AllThreads));
ex.Reset("p1234.-1");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
ex.Reset("p1234.123456789ABCDEF0");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x1234ULL, 0x123456789ABCDEF0ULL));
ex.Reset("p123456789ABCDEF0.-1");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x123456789ABCDEF0ULL,
StringExtractorGDBRemote::AllThreads));
ex.Reset("p123456789ABCDEF0.1234");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x123456789ABCDEF0ULL, 0x1234ULL));
ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
EXPECT_THAT(ex.GetPidTid(100).value(),
EXPECT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
}
TEST(StringExtractorGDBRemoteTest, GetPidTidMultipleValues) {
StringExtractorGDBRemote ex("1234;p12;p1234.-1");
ASSERT_THAT(ex.GetPidTid(100).value(), ::testing::Pair(100, 0x1234ULL));
ASSERT_THAT(*ex.GetPidTid(100), ::testing::Pair(100, 0x1234ULL));
ASSERT_EQ(ex.GetChar(), ';');
ASSERT_THAT(ex.GetPidTid(100).value(),
ASSERT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x12ULL, StringExtractorGDBRemote::AllThreads));
ASSERT_EQ(ex.GetChar(), ';');
ASSERT_THAT(ex.GetPidTid(100).value(),
ASSERT_THAT(*ex.GetPidTid(100),
::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
}