Skip to content

Commit 860935d

Browse files
committed
Add a createError variant without error code (NFC) (llvm#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. (cherry picked from commit af31883)
1 parent 04fb099 commit 860935d

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
@@ -2641,8 +2641,7 @@ bool ScriptInterpreterPythonImpl::LoadScriptingModule(
26412641

26422642
auto ExtendSysPath = [&](std::string directory) -> llvm::Error {
26432643
if (directory.empty()) {
2644-
return llvm::make_error<llvm::StringError>(
2645-
"invalid directory name", llvm::inconvertibleErrorCode());
2644+
return llvm::createStringError("invalid directory name");
26462645
}
26472646

26482647
replace_all(directory, "\\", "\\\\");
@@ -2655,10 +2654,8 @@ bool ScriptInterpreterPythonImpl::LoadScriptingModule(
26552654
directory.c_str(), directory.c_str());
26562655
bool syspath_retval =
26572656
ExecuteMultipleLines(command_stream.GetData(), exc_options).Success();
2658-
if (!syspath_retval) {
2659-
return llvm::make_error<llvm::StringError>(
2660-
"Python sys.path handling failed", llvm::inconvertibleErrorCode());
2661-
}
2657+
if (!syspath_retval)
2658+
return llvm::createStringError("Python sys.path handling failed");
26622659

26632660
return llvm::Error::success();
26642661
};

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
@@ -5401,8 +5401,7 @@ TypeSystemClang::GetNumChildren(lldb::opaque_compiler_type_t type,
54015401
bool omit_empty_base_classes,
54025402
const ExecutionContext *exe_ctx) {
54035403
if (!type)
5404-
return llvm::make_error<llvm::StringError>("invalid clang type",
5405-
llvm::inconvertibleErrorCode());
5404+
return llvm::createStringError("invalid clang type");
54065405

54075406
uint32_t num_children = 0;
54085407
clang::QualType qual_type(RemoveWrappingTypes(GetQualType(type)));
@@ -5463,9 +5462,8 @@ TypeSystemClang::GetNumChildren(lldb::opaque_compiler_type_t type,
54635462
field != field_end; ++field)
54645463
++num_children;
54655464
} else
5466-
return llvm::make_error<llvm::StringError>(
5467-
"incomplete type \"" + GetDisplayTypeName(type).GetString() + "\"",
5468-
llvm::inconvertibleErrorCode());
5465+
return llvm::createStringError(
5466+
"incomplete type \"" + GetDisplayTypeName(type).GetString() + "\"");
54695467
break;
54705468
case clang::Type::ObjCObject:
54715469
case clang::Type::ObjCInterface:
@@ -6354,9 +6352,7 @@ llvm::Expected<CompilerType> TypeSystemClang::GetChildCompilerTypeAtIndex(
63546352
std::optional<uint64_t> size =
63556353
base_class_clang_type.GetBitSize(get_exe_scope());
63566354
if (!size)
6357-
return llvm::make_error<llvm::StringError>(
6358-
"no size info for base class",
6359-
llvm::inconvertibleErrorCode());
6355+
return llvm::createStringError("no size info for base class");
63606356

63616357
uint64_t base_class_clang_type_bit_size = *size;
63626358

@@ -6389,8 +6385,7 @@ llvm::Expected<CompilerType> TypeSystemClang::GetChildCompilerTypeAtIndex(
63896385
std::optional<uint64_t> size =
63906386
field_clang_type.GetByteSize(get_exe_scope());
63916387
if (!size)
6392-
return llvm::make_error<llvm::StringError>(
6393-
"no size info for field", llvm::inconvertibleErrorCode());
6388+
return llvm::createStringError("no size info for field");
63946389

63956390
child_byte_size = *size;
63966391
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
@@ -616,8 +616,7 @@ CompilerType::GetNumChildren(bool omit_empty_base_classes,
616616
if (auto type_system_sp = GetTypeSystem())
617617
return type_system_sp->GetNumChildren(m_type, omit_empty_base_classes,
618618
exe_ctx);
619-
return llvm::make_error<llvm::StringError>("invalid type",
620-
llvm::inconvertibleErrorCode());
619+
return llvm::createStringError("invalid type");
621620
}
622621

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

lldb/source/Symbol/Symbol.cpp

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

105104
if (!symbol.value && !symbol.address)
106-
return llvm::make_error<llvm::StringError>(
107-
"symbol must contain either a value or an address",
108-
llvm::inconvertibleErrorCode());
105+
return llvm::createStringError(
106+
"symbol must contain either a value or an address");
109107

110108
if (symbol.value && symbol.address)
111-
return llvm::make_error<llvm::StringError>(
112-
"symbol cannot contain both a value and an address",
113-
llvm::inconvertibleErrorCode());
109+
return llvm::createStringError(
110+
"symbol cannot contain both a value and an address");
114111

115112
const uint64_t size = symbol.size.value_or(0);
116113
const bool is_artificial = false;
@@ -131,9 +128,8 @@ llvm::Expected<Symbol> Symbol::FromJSON(const JSONSymbol &symbol,
131128
AddressRange(section_sp, offset, size), size_is_valid,
132129
contains_linker_annotations, flags);
133130
}
134-
return llvm::make_error<llvm::StringError>(
135-
llvm::formatv("no section found for address: {0:x}", *symbol.address),
136-
llvm::inconvertibleErrorCode());
131+
return llvm::createStringError(
132+
llvm::formatv("no section found for address: {0:x}", *symbol.address));
137133
}
138134

139135
// 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
@@ -280,21 +280,19 @@ llvm::Expected<lldb::TypeSystemSP> TypeSystemMap::GetTypeSystemForLanguage(
280280
std::optional<CreateCallback> create_callback) {
281281
std::lock_guard<std::mutex> guard(m_mutex);
282282
if (m_clear_in_progress)
283-
return llvm::make_error<llvm::StringError>(
284-
"Unable to get TypeSystem because TypeSystemMap is being cleared",
285-
llvm::inconvertibleErrorCode());
283+
return llvm::createStringError(
284+
"Unable to get TypeSystem because TypeSystemMap is being cleared");
286285

287286
collection::iterator pos = m_map.find(language);
288287
if (pos != m_map.end()) {
289288
if (pos->second) {
290289
assert(!pos->second->weak_from_this().expired());
291290
return pos->second;
292291
}
293-
return llvm::make_error<llvm::StringError>(
292+
return llvm::createStringError(
294293
"TypeSystem for language " +
295-
llvm::StringRef(Language::GetNameForLanguageType(language)) +
296-
" doesn't exist",
297-
llvm::inconvertibleErrorCode());
294+
llvm::StringRef(Language::GetNameForLanguageType(language)) +
295+
" doesn't exist");
298296
}
299297

300298
for (const auto &pair : m_map) {
@@ -304,31 +302,27 @@ llvm::Expected<lldb::TypeSystemSP> TypeSystemMap::GetTypeSystemForLanguage(
304302
m_map[language] = pair.second;
305303
if (pair.second)
306304
return pair.second;
307-
return llvm::make_error<llvm::StringError>(
305+
return llvm::createStringError(
308306
"TypeSystem for language " +
309-
llvm::StringRef(Language::GetNameForLanguageType(language)) +
310-
" doesn't exist",
311-
llvm::inconvertibleErrorCode());
307+
llvm::StringRef(Language::GetNameForLanguageType(language)) +
308+
" doesn't exist");
312309
}
313310
}
314311

315312
if (!create_callback)
316-
return llvm::make_error<llvm::StringError>(
313+
return llvm::createStringError(
317314
"Unable to find type system for language " +
318-
llvm::StringRef(Language::GetNameForLanguageType(language)),
319-
llvm::inconvertibleErrorCode());
320-
315+
llvm::StringRef(Language::GetNameForLanguageType(language)));
321316
// Cache even if we get a shared pointer that contains a null type system
322317
// back.
323318
TypeSystemSP type_system_sp = (*create_callback)();
324319
m_map[language] = type_system_sp;
325320
if (type_system_sp)
326321
return type_system_sp;
327-
return llvm::make_error<llvm::StringError>(
322+
return llvm::createStringError(
328323
"TypeSystem for language " +
329-
llvm::StringRef(Language::GetNameForLanguageType(language)) +
330-
" doesn't exist",
331-
llvm::inconvertibleErrorCode());
324+
llvm::StringRef(Language::GetNameForLanguageType(language)) +
325+
" doesn't exist");
332326
}
333327

334328
llvm::Expected<lldb::TypeSystemSP>

lldb/source/Target/Target.cpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,8 +2612,7 @@ Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language,
26122612
bool create_on_demand,
26132613
const char *compiler_options) {
26142614
if (!m_valid)
2615-
return llvm::make_error<llvm::StringError>("Invalid Target",
2616-
llvm::inconvertibleErrorCode());
2615+
return llvm::createStringError("Invalid Target");
26172616

26182617
if (language == eLanguageTypeMipsAssembler // GNU AS and LLVM use it for all
26192618
// assembly code
@@ -2626,9 +2625,8 @@ Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language,
26262625
// target language.
26272626
} else {
26282627
if (languages_for_expressions.Empty())
2629-
return llvm::make_error<llvm::StringError>(
2630-
"No expression support for any languages",
2631-
llvm::inconvertibleErrorCode());
2628+
return llvm::createStringError(
2629+
"No expression support for any languages");
26322630
language = (LanguageType)languages_for_expressions.bitvector.find_first();
26332631
}
26342632
}
@@ -2895,23 +2893,20 @@ Target::CreateUtilityFunction(std::string expression, std::string name,
28952893
return type_system_or_err.takeError();
28962894
auto ts = *type_system_or_err;
28972895
if (!ts)
2898-
return llvm::make_error<llvm::StringError>(
2896+
return llvm::createStringError(
28992897
llvm::StringRef("Type system for language ") +
2900-
Language::GetNameForLanguageType(language) +
2901-
llvm::StringRef(" is no longer live"),
2902-
llvm::inconvertibleErrorCode());
2898+
Language::GetNameForLanguageType(language) +
2899+
llvm::StringRef(" is no longer live"));
29032900
std::unique_ptr<UtilityFunction> utility_fn =
29042901
ts->CreateUtilityFunction(std::move(expression), std::move(name));
29052902
if (!utility_fn)
2906-
return llvm::make_error<llvm::StringError>(
2903+
return llvm::createStringError(
29072904
llvm::StringRef("Could not create an expression for language") +
2908-
Language::GetNameForLanguageType(language),
2909-
llvm::inconvertibleErrorCode());
2905+
Language::GetNameForLanguageType(language));
29102906

29112907
DiagnosticManager diagnostics;
29122908
if (!utility_fn->Install(diagnostics, exe_ctx))
2913-
return llvm::make_error<llvm::StringError>(diagnostics.GetString(),
2914-
llvm::inconvertibleErrorCode());
2909+
return llvm::createStringError(diagnostics.GetString());
29152910

29162911
return std::move(utility_fn);
29172912
}
@@ -3221,8 +3216,7 @@ void Target::SetDefaultArchitecture(const ArchSpec &arch) {
32213216
llvm::Error Target::SetLabel(llvm::StringRef label) {
32223217
size_t n = LLDB_INVALID_INDEX32;
32233218
if (llvm::to_integer(label, n))
3224-
return llvm::make_error<llvm::StringError>(
3225-
"Cannot use integer as target label.", llvm::inconvertibleErrorCode());
3219+
return llvm::createStringError("Cannot use integer as target label.");
32263220
TargetList &targets = GetDebugger().GetTargetList();
32273221
for (size_t i = 0; i < targets.GetNumTargets(); i++) {
32283222
TargetSP target_sp = targets.GetTargetAtIndex(i);
@@ -3390,15 +3384,13 @@ llvm::Expected<lldb_private::Address> Target::GetEntryPointAddress() {
33903384

33913385
// We haven't found the entry point address. Return an appropriate error.
33923386
if (!has_primary_executable)
3393-
return llvm::make_error<llvm::StringError>(
3387+
return llvm::createStringError(
33943388
"No primary executable found and could not find entry point address in "
3395-
"any executable module",
3396-
llvm::inconvertibleErrorCode());
3389+
"any executable module");
33973390

3398-
return llvm::make_error<llvm::StringError>(
3391+
return llvm::createStringError(
33993392
"Could not find entry point address for primary executable module \"" +
3400-
exe_module->GetFileSpec().GetFilename().GetStringRef() + "\"",
3401-
llvm::inconvertibleErrorCode());
3393+
exe_module->GetFileSpec().GetFilename().GetStringRef() + "\"");
34023394
}
34033395

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

0 commit comments

Comments
 (0)