diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2022-07-12 10:56:01 -0700 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2022-07-12 13:12:36 -0700 |
commit | b620852d235079e56a4fdf71828bf8e7c66f813f (patch) | |
tree | ae1afc0997472ad1d9653cfaca44b28427fdf417 /lldb/source/Interpreter/CommandObject.cpp | |
parent | 42ca354cb5b83ec329ca66540ddc29f8d9e0d5ac (diff) | |
download | llvm-b620852d235079e56a4fdf71828bf8e7c66f813f.zip llvm-b620852d235079e56a4fdf71828bf8e7c66f813f.tar.gz llvm-b620852d235079e56a4fdf71828bf8e7c66f813f.tar.bz2 |
[lldb] Make the g_arguments_data constexpr and fix the static assert
This fixes the static assert that's meant to keep the g_arguments_data
table in sync with the CommandArgumentType enumeration. Indeed, the
assert didn't fire even though the current code is missing an entry.
This patches fixes that as well.
Differential revision: https://reviews.llvm.org/D129529
Diffstat (limited to 'lldb/source/Interpreter/CommandObject.cpp')
-rw-r--r-- | lldb/source/Interpreter/CommandObject.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp index c92fec5..910d740 100644 --- a/lldb/source/Interpreter/CommandObject.cpp +++ b/lldb/source/Interpreter/CommandObject.cpp @@ -547,7 +547,7 @@ CommandObject::LookupArgumentName(llvm::StringRef arg_name) { const ArgumentTableEntry *table = GetArgumentTable(); for (int i = 0; i < eArgTypeLastArg; ++i) if (arg_name == table[i].arg_name) - return_type = g_arguments_data[i].arg_type; + return_type = GetArgumentTable()[i].arg_type; return return_type; } @@ -924,14 +924,14 @@ const char *CommandObject::GetArgumentTypeAsCString( const lldb::CommandArgumentType arg_type) { assert(arg_type < eArgTypeLastArg && "Invalid argument type passed to GetArgumentTypeAsCString"); - return g_arguments_data[arg_type].arg_name; + return GetArgumentTable()[arg_type].arg_name; } const char *CommandObject::GetArgumentDescriptionAsCString( const lldb::CommandArgumentType arg_type) { assert(arg_type < eArgTypeLastArg && "Invalid argument type passed to GetArgumentDescriptionAsCString"); - return g_arguments_data[arg_type].help_text; + return GetArgumentTable()[arg_type].help_text; } Target &CommandObject::GetDummyTarget() { @@ -1041,7 +1041,7 @@ static llvm::StringRef arch_helper() { return g_archs_help.GetString(); } -CommandObject::ArgumentTableEntry CommandObject::g_arguments_data[] = { +static constexpr CommandObject::ArgumentTableEntry g_arguments_data[] = { // clang-format off { eArgTypeAddress, "address", CommandCompletions::eNoCompletion, { nullptr, false }, "A valid address in the target program's execution space." }, { eArgTypeAddressOrExpression, "address-expression", CommandCompletions::eNoCompletion, { nullptr, false }, "An expression that resolves to an address." }, @@ -1134,17 +1134,18 @@ CommandObject::ArgumentTableEntry CommandObject::g_arguments_data[] = { { eArgTypeSaveCoreStyle, "corefile-style", CommandCompletions::eNoCompletion, { nullptr, false }, "The type of corefile that lldb will try to create, dependant on this target's capabilities." }, { eArgTypeLogHandler, "log-handler", CommandCompletions::eNoCompletion, { nullptr, false }, "The log handle that will be used to write out log messages." }, { eArgTypeSEDStylePair, "substitution-pair", CommandCompletions::eNoCompletion, { nullptr, false }, "A sed-style pattern and target pair." }, + { eArgTypeRecognizerID, "frame-recognizer-id", CommandCompletions::eNoCompletion, { nullptr, false }, "The ID for a stack frame recognizer." }, { eArgTypeConnectURL, "process-connect-url", CommandCompletions::eNoCompletion, { nullptr, false }, "A URL-style specification for a remote connection." }, { eArgTypeTargetID, "target-id", CommandCompletions::eNoCompletion, { nullptr, false }, "The index ID for an lldb Target." }, { eArgTypeStopHookID, "stop-hook-id", CommandCompletions::eNoCompletion, { nullptr, false }, "The ID you receive when you create a stop-hook." } // clang-format on }; +static_assert( + (sizeof(g_arguments_data) / sizeof(CommandObject::ArgumentTableEntry)) == + eArgTypeLastArg, + "g_arguments_data out of sync with CommandArgumentType enumeration"); + const CommandObject::ArgumentTableEntry *CommandObject::GetArgumentTable() { - // If this assertion fires, then the table above is out of date with the - // CommandArgumentType enumeration - static_assert((sizeof(CommandObject::g_arguments_data) / - sizeof(CommandObject::ArgumentTableEntry)) == eArgTypeLastArg, - ""); - return CommandObject::g_arguments_data; + return g_arguments_data; } |