Skip to content

Commit af31883

Browse files
Add a createError variant without error code (NFC) (#93209)
For the significant amount of call sites that want to create an incontrovertible error, such a wrapper function creates a significant readability improvement and lowers the cost of entry to add error handling in more places.
1 parent dc1bfbc commit af31883

File tree

13 files changed

+68
-103
lines changed

13 files changed

+68
-103
lines changed

lldb/source/Host/common/Socket.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,7 @@ llvm::Error Socket::Initialize() {
8787
if (err == 0) {
8888
if (wsaData.wVersion < wVersion) {
8989
WSACleanup();
90-
return llvm::make_error<llvm::StringError>(
91-
"WSASock version is not expected.", llvm::inconvertibleErrorCode());
90+
return llvm::createStringError("WSASock version is not expected.");
9291
}
9392
} else {
9493
return llvm::errorCodeToError(llvm::mapWindowsError(::WSAGetLastError()));

lldb/source/Interpreter/Options.cpp

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -931,8 +931,7 @@ llvm::Expected<Args> Options::ParseAlias(const Args &args,
931931
Option *long_options = GetLongOptions();
932932

933933
if (long_options == nullptr) {
934-
return llvm::make_error<llvm::StringError>("Invalid long options",
935-
llvm::inconvertibleErrorCode());
934+
return llvm::createStringError("Invalid long options");
936935
}
937936

938937
std::string short_options = BuildShortOptions(long_options);
@@ -957,8 +956,7 @@ llvm::Expected<Args> Options::ParseAlias(const Args &args,
957956
break;
958957

959958
if (val == '?') {
960-
return llvm::make_error<llvm::StringError>(
961-
"Unknown or ambiguous option", llvm::inconvertibleErrorCode());
959+
return llvm::createStringError("Unknown or ambiguous option");
962960
}
963961

964962
if (val == 0)
@@ -980,9 +978,8 @@ llvm::Expected<Args> Options::ParseAlias(const Args &args,
980978

981979
// See if the option takes an argument, and see if one was supplied.
982980
if (long_options_index == -1) {
983-
return llvm::make_error<llvm::StringError>(
984-
llvm::formatv("Invalid option with value '{0}'.", char(val)).str(),
985-
llvm::inconvertibleErrorCode());
981+
return llvm::createStringError(
982+
llvm::formatv("Invalid option with value '{0}'.", char(val)).str());
986983
}
987984

988985
StreamString option_str;
@@ -995,11 +992,10 @@ llvm::Expected<Args> Options::ParseAlias(const Args &args,
995992
switch (has_arg) {
996993
case OptionParser::eRequiredArgument:
997994
if (OptionParser::GetOptionArgument() == nullptr) {
998-
return llvm::make_error<llvm::StringError>(
995+
return llvm::createStringError(
999996
llvm::formatv("Option '{0}' is missing argument specifier.",
1000997
option_str.GetString())
1001-
.str(),
1002-
llvm::inconvertibleErrorCode());
998+
.str());
1003999
}
10041000
[[fallthrough]];
10051001
case OptionParser::eOptionalArgument:
@@ -1008,12 +1004,11 @@ llvm::Expected<Args> Options::ParseAlias(const Args &args,
10081004
case OptionParser::eNoArgument:
10091005
break;
10101006
default:
1011-
return llvm::make_error<llvm::StringError>(
1007+
return llvm::createStringError(
10121008
llvm::formatv("error with options table; invalid value in has_arg "
10131009
"field for option '{0}'.",
10141010
char(val))
1015-
.str(),
1016-
llvm::inconvertibleErrorCode());
1011+
.str());
10171012
}
10181013
// Find option in the argument list; also see if it was supposed to take an
10191014
// argument and if one was supplied. Remove option (and argument, if
@@ -1261,8 +1256,7 @@ llvm::Expected<Args> Options::Parse(const Args &args,
12611256
Status error;
12621257
Option *long_options = GetLongOptions();
12631258
if (long_options == nullptr) {
1264-
return llvm::make_error<llvm::StringError>("Invalid long options.",
1265-
llvm::inconvertibleErrorCode());
1259+
return llvm::createStringError("Invalid long options.");
12661260
}
12671261

12681262
std::string short_options = BuildShortOptions(long_options);
@@ -1322,9 +1316,8 @@ llvm::Expected<Args> Options::Parse(const Args &args,
13221316
if (!platform_sp && require_validation) {
13231317
// Caller requires validation but we cannot validate as we don't have
13241318
// the mandatory platform against which to validate.
1325-
return llvm::make_error<llvm::StringError>(
1326-
"cannot validate options: no platform available",
1327-
llvm::inconvertibleErrorCode());
1319+
return llvm::createStringError(
1320+
"cannot validate options: no platform available");
13281321
}
13291322

13301323
bool validation_failed = false;

lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,14 +501,12 @@ class ReturnValueExtractor {
501501
CompilerType &type) {
502502
RegisterContext *reg_ctx = thread.GetRegisterContext().get();
503503
if (!reg_ctx)
504-
return llvm::make_error<llvm::StringError>(
505-
LOG_PREFIX "Failed to get RegisterContext",
506-
llvm::inconvertibleErrorCode());
504+
return llvm::createStringError(LOG_PREFIX
505+
"Failed to get RegisterContext");
507506

508507
ProcessSP process_sp = thread.GetProcess();
509508
if (!process_sp)
510-
return llvm::make_error<llvm::StringError>(
511-
LOG_PREFIX "GetProcess() failed", llvm::inconvertibleErrorCode());
509+
return llvm::createStringError(LOG_PREFIX "GetProcess() failed");
512510

513511
return ReturnValueExtractor(thread, type, reg_ctx, process_sp);
514512
}

lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2494,8 +2494,7 @@ bool ScriptInterpreterPythonImpl::LoadScriptingModule(
24942494

24952495
auto ExtendSysPath = [&](std::string directory) -> llvm::Error {
24962496
if (directory.empty()) {
2497-
return llvm::make_error<llvm::StringError>(
2498-
"invalid directory name", llvm::inconvertibleErrorCode());
2497+
return llvm::createStringError("invalid directory name");
24992498
}
25002499

25012500
replace_all(directory, "\\", "\\\\");
@@ -2508,10 +2507,8 @@ bool ScriptInterpreterPythonImpl::LoadScriptingModule(
25082507
directory.c_str(), directory.c_str());
25092508
bool syspath_retval =
25102509
ExecuteMultipleLines(command_stream.GetData(), exc_options).Success();
2511-
if (!syspath_retval) {
2512-
return llvm::make_error<llvm::StringError>(
2513-
"Python sys.path handling failed", llvm::inconvertibleErrorCode());
2514-
}
2510+
if (!syspath_retval)
2511+
return llvm::createStringError("Python sys.path handling failed");
25152512

25162513
return llvm::Error::success();
25172514
};

lldb/source/Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,8 @@ class SymbolFileBreakpad : public SymbolFileCommon {
120120

121121
llvm::Expected<lldb::TypeSystemSP>
122122
GetTypeSystemForLanguage(lldb::LanguageType language) override {
123-
return llvm::make_error<llvm::StringError>(
124-
"SymbolFileBreakpad does not support GetTypeSystemForLanguage",
125-
llvm::inconvertibleErrorCode());
123+
return llvm::createStringError(
124+
"SymbolFileBreakpad does not support GetTypeSystemForLanguage");
126125
}
127126

128127
CompilerDeclContext FindNamespace(ConstString name,

lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5272,8 +5272,7 @@ TypeSystemClang::GetNumChildren(lldb::opaque_compiler_type_t type,
52725272
bool omit_empty_base_classes,
52735273
const ExecutionContext *exe_ctx) {
52745274
if (!type)
5275-
return llvm::make_error<llvm::StringError>("invalid clang type",
5276-
llvm::inconvertibleErrorCode());
5275+
return llvm::createStringError("invalid clang type");
52775276

52785277
uint32_t num_children = 0;
52795278
clang::QualType qual_type(RemoveWrappingTypes(GetQualType(type)));
@@ -5331,9 +5330,8 @@ TypeSystemClang::GetNumChildren(lldb::opaque_compiler_type_t type,
53315330
num_children += std::distance(record_decl->field_begin(),
53325331
record_decl->field_end());
53335332
} else
5334-
return llvm::make_error<llvm::StringError>(
5335-
"incomplete type \"" + GetDisplayTypeName(type).GetString() + "\"",
5336-
llvm::inconvertibleErrorCode());
5333+
return llvm::createStringError(
5334+
"incomplete type \"" + GetDisplayTypeName(type).GetString() + "\"");
53375335
break;
53385336
case clang::Type::ObjCObject:
53395337
case clang::Type::ObjCInterface:
@@ -6239,9 +6237,7 @@ llvm::Expected<CompilerType> TypeSystemClang::GetChildCompilerTypeAtIndex(
62396237
std::optional<uint64_t> size =
62406238
base_class_clang_type.GetBitSize(get_exe_scope());
62416239
if (!size)
6242-
return llvm::make_error<llvm::StringError>(
6243-
"no size info for base class",
6244-
llvm::inconvertibleErrorCode());
6240+
return llvm::createStringError("no size info for base class");
62456241

62466242
uint64_t base_class_clang_type_bit_size = *size;
62476243

@@ -6274,8 +6270,7 @@ llvm::Expected<CompilerType> TypeSystemClang::GetChildCompilerTypeAtIndex(
62746270
std::optional<uint64_t> size =
62756271
field_clang_type.GetByteSize(get_exe_scope());
62766272
if (!size)
6277-
return llvm::make_error<llvm::StringError>(
6278-
"no size info for field", llvm::inconvertibleErrorCode());
6273+
return llvm::createStringError("no size info for field");
62796274

62806275
child_byte_size = *size;
62816276
const uint32_t child_bit_size = child_byte_size * 8;

lldb/source/Symbol/CompilerType.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -805,8 +805,7 @@ CompilerType::GetNumChildren(bool omit_empty_base_classes,
805805
if (auto type_system_sp = GetTypeSystem())
806806
return type_system_sp->GetNumChildren(m_type, omit_empty_base_classes,
807807
exe_ctx);
808-
return llvm::make_error<llvm::StringError>("invalid type",
809-
llvm::inconvertibleErrorCode());
808+
return llvm::createStringError("invalid type");
810809
}
811810

812811
lldb::BasicType CompilerType::GetBasicTypeEnumeration() const {

lldb/source/Symbol/Symbol.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -101,18 +101,15 @@ const Symbol &Symbol::operator=(const Symbol &rhs) {
101101
llvm::Expected<Symbol> Symbol::FromJSON(const JSONSymbol &symbol,
102102
SectionList *section_list) {
103103
if (!section_list)
104-
return llvm::make_error<llvm::StringError>("no section list provided",
105-
llvm::inconvertibleErrorCode());
104+
return llvm::createStringError("no section list provided");
106105

107106
if (!symbol.value && !symbol.address)
108-
return llvm::make_error<llvm::StringError>(
109-
"symbol must contain either a value or an address",
110-
llvm::inconvertibleErrorCode());
107+
return llvm::createStringError(
108+
"symbol must contain either a value or an address");
111109

112110
if (symbol.value && symbol.address)
113-
return llvm::make_error<llvm::StringError>(
114-
"symbol cannot contain both a value and an address",
115-
llvm::inconvertibleErrorCode());
111+
return llvm::createStringError(
112+
"symbol cannot contain both a value and an address");
116113

117114
const uint64_t size = symbol.size.value_or(0);
118115
const bool is_artificial = false;
@@ -133,9 +130,8 @@ llvm::Expected<Symbol> Symbol::FromJSON(const JSONSymbol &symbol,
133130
AddressRange(section_sp, offset, size), size_is_valid,
134131
contains_linker_annotations, flags);
135132
}
136-
return llvm::make_error<llvm::StringError>(
137-
llvm::formatv("no section found for address: {0:x}", *symbol.address),
138-
llvm::inconvertibleErrorCode());
133+
return llvm::createStringError(
134+
llvm::formatv("no section found for address: {0:x}", *symbol.address));
139135
}
140136

141137
// Absolute symbols encode the integer value in the m_offset of the

lldb/source/Symbol/SymbolFileOnDemand.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,8 @@ SymbolFileOnDemand::GetTypeSystemForLanguage(LanguageType language) {
457457
Log *log = GetLog();
458458
LLDB_LOG(log, "[{0}] {1} is skipped for language type {2}",
459459
GetSymbolFileName(), __FUNCTION__, language);
460-
return llvm::make_error<llvm::StringError>(
461-
"GetTypeSystemForLanguage is skipped by SymbolFileOnDemand",
462-
llvm::inconvertibleErrorCode());
460+
return llvm::createStringError(
461+
"GetTypeSystemForLanguage is skipped by SymbolFileOnDemand");
463462
}
464463
return m_sym_file_impl->GetTypeSystemForLanguage(language);
465464
}

lldb/source/Symbol/TypeSystem.cpp

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -267,21 +267,19 @@ llvm::Expected<lldb::TypeSystemSP> TypeSystemMap::GetTypeSystemForLanguage(
267267
std::optional<CreateCallback> create_callback) {
268268
std::lock_guard<std::mutex> guard(m_mutex);
269269
if (m_clear_in_progress)
270-
return llvm::make_error<llvm::StringError>(
271-
"Unable to get TypeSystem because TypeSystemMap is being cleared",
272-
llvm::inconvertibleErrorCode());
270+
return llvm::createStringError(
271+
"Unable to get TypeSystem because TypeSystemMap is being cleared");
273272

274273
collection::iterator pos = m_map.find(language);
275274
if (pos != m_map.end()) {
276275
if (pos->second) {
277276
assert(!pos->second->weak_from_this().expired());
278277
return pos->second;
279278
}
280-
return llvm::make_error<llvm::StringError>(
279+
return llvm::createStringError(
281280
"TypeSystem for language " +
282-
llvm::StringRef(Language::GetNameForLanguageType(language)) +
283-
" doesn't exist",
284-
llvm::inconvertibleErrorCode());
281+
llvm::StringRef(Language::GetNameForLanguageType(language)) +
282+
" doesn't exist");
285283
}
286284

287285
for (const auto &pair : m_map) {
@@ -291,31 +289,27 @@ llvm::Expected<lldb::TypeSystemSP> TypeSystemMap::GetTypeSystemForLanguage(
291289
m_map[language] = pair.second;
292290
if (pair.second)
293291
return pair.second;
294-
return llvm::make_error<llvm::StringError>(
292+
return llvm::createStringError(
295293
"TypeSystem for language " +
296-
llvm::StringRef(Language::GetNameForLanguageType(language)) +
297-
" doesn't exist",
298-
llvm::inconvertibleErrorCode());
294+
llvm::StringRef(Language::GetNameForLanguageType(language)) +
295+
" doesn't exist");
299296
}
300297
}
301298

302299
if (!create_callback)
303-
return llvm::make_error<llvm::StringError>(
300+
return llvm::createStringError(
304301
"Unable to find type system for language " +
305-
llvm::StringRef(Language::GetNameForLanguageType(language)),
306-
llvm::inconvertibleErrorCode());
307-
302+
llvm::StringRef(Language::GetNameForLanguageType(language)));
308303
// Cache even if we get a shared pointer that contains a null type system
309304
// back.
310305
TypeSystemSP type_system_sp = (*create_callback)();
311306
m_map[language] = type_system_sp;
312307
if (type_system_sp)
313308
return type_system_sp;
314-
return llvm::make_error<llvm::StringError>(
309+
return llvm::createStringError(
315310
"TypeSystem for language " +
316-
llvm::StringRef(Language::GetNameForLanguageType(language)) +
317-
" doesn't exist",
318-
llvm::inconvertibleErrorCode());
311+
llvm::StringRef(Language::GetNameForLanguageType(language)) +
312+
" doesn't exist");
319313
}
320314

321315
llvm::Expected<lldb::TypeSystemSP>

lldb/source/Target/Target.cpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2414,8 +2414,7 @@ llvm::Expected<lldb::TypeSystemSP>
24142414
Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language,
24152415
bool create_on_demand) {
24162416
if (!m_valid)
2417-
return llvm::make_error<llvm::StringError>("Invalid Target",
2418-
llvm::inconvertibleErrorCode());
2417+
return llvm::createStringError("Invalid Target");
24192418

24202419
if (language == eLanguageTypeMipsAssembler // GNU AS and LLVM use it for all
24212420
// assembly code
@@ -2428,9 +2427,8 @@ Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language,
24282427
// target language.
24292428
} else {
24302429
if (languages_for_expressions.Empty())
2431-
return llvm::make_error<llvm::StringError>(
2432-
"No expression support for any languages",
2433-
llvm::inconvertibleErrorCode());
2430+
return llvm::createStringError(
2431+
"No expression support for any languages");
24342432
language = (LanguageType)languages_for_expressions.bitvector.find_first();
24352433
}
24362434
}
@@ -2574,23 +2572,20 @@ Target::CreateUtilityFunction(std::string expression, std::string name,
25742572
return type_system_or_err.takeError();
25752573
auto ts = *type_system_or_err;
25762574
if (!ts)
2577-
return llvm::make_error<llvm::StringError>(
2575+
return llvm::createStringError(
25782576
llvm::StringRef("Type system for language ") +
2579-
Language::GetNameForLanguageType(language) +
2580-
llvm::StringRef(" is no longer live"),
2581-
llvm::inconvertibleErrorCode());
2577+
Language::GetNameForLanguageType(language) +
2578+
llvm::StringRef(" is no longer live"));
25822579
std::unique_ptr<UtilityFunction> utility_fn =
25832580
ts->CreateUtilityFunction(std::move(expression), std::move(name));
25842581
if (!utility_fn)
2585-
return llvm::make_error<llvm::StringError>(
2582+
return llvm::createStringError(
25862583
llvm::StringRef("Could not create an expression for language") +
2587-
Language::GetNameForLanguageType(language),
2588-
llvm::inconvertibleErrorCode());
2584+
Language::GetNameForLanguageType(language));
25892585

25902586
DiagnosticManager diagnostics;
25912587
if (!utility_fn->Install(diagnostics, exe_ctx))
2592-
return llvm::make_error<llvm::StringError>(diagnostics.GetString(),
2593-
llvm::inconvertibleErrorCode());
2588+
return llvm::createStringError(diagnostics.GetString());
25942589

25952590
return std::move(utility_fn);
25962591
}
@@ -2621,8 +2616,7 @@ void Target::SetDefaultArchitecture(const ArchSpec &arch) {
26212616
llvm::Error Target::SetLabel(llvm::StringRef label) {
26222617
size_t n = LLDB_INVALID_INDEX32;
26232618
if (llvm::to_integer(label, n))
2624-
return llvm::make_error<llvm::StringError>(
2625-
"Cannot use integer as target label.", llvm::inconvertibleErrorCode());
2619+
return llvm::createStringError("Cannot use integer as target label.");
26262620
TargetList &targets = GetDebugger().GetTargetList();
26272621
for (size_t i = 0; i < targets.GetNumTargets(); i++) {
26282622
TargetSP target_sp = targets.GetTargetAtIndex(i);
@@ -2790,15 +2784,13 @@ llvm::Expected<lldb_private::Address> Target::GetEntryPointAddress() {
27902784

27912785
// We haven't found the entry point address. Return an appropriate error.
27922786
if (!has_primary_executable)
2793-
return llvm::make_error<llvm::StringError>(
2787+
return llvm::createStringError(
27942788
"No primary executable found and could not find entry point address in "
2795-
"any executable module",
2796-
llvm::inconvertibleErrorCode());
2789+
"any executable module");
27972790

2798-
return llvm::make_error<llvm::StringError>(
2791+
return llvm::createStringError(
27992792
"Could not find entry point address for primary executable module \"" +
2800-
exe_module->GetFileSpec().GetFilename().GetStringRef() + "\"",
2801-
llvm::inconvertibleErrorCode());
2793+
exe_module->GetFileSpec().GetFilename().GetStringRef() + "\"");
28022794
}
28032795

28042796
lldb::addr_t Target::GetCallableLoadAddress(lldb::addr_t load_addr,

0 commit comments

Comments
 (0)