[Lldb-commits] [lldb] ce06ac9 - [Option] Remove OPTTABLE_STR_TABLE_CODE (#224822)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Sep 21 20:52:11 PDT 2026
Author: Fangrui Song
Date: 2026-09-22T03:52:05Z
New Revision: ce06ac932eca6a403fa2f1f84fc5724fd30dc562
URL: https://github.com/llvm/llvm-project/commit/ce06ac932eca6a403fa2f1f84fc5724fd30dc562
DIFF: https://github.com/llvm/llvm-project/commit/ce06ac932eca6a403fa2f1f84fc5724fd30dc562.diff
LOG: [Option] Remove OPTTABLE_STR_TABLE_CODE (#224822)
Its two users read OptionStrTable to spell an option. The unittest now
compares option IDs. lldb prepends '-' to the name it reads, which has
been the prefixed name since 501f92d34382 (2023), so it passes
"--mmacos-version-min=<ver>", which the driver rejects and drops; spell
it with the driver option table instead.
Aided by Opus 5
Added:
Modified:
lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
llvm/unittests/Option/OptionMarshallingTest.cpp
llvm/utils/TableGen/OptionParserEmitter.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt b/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
index 0f1a28160465d..9f98795edfd5e 100644
--- a/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
+++ b/lldb/source/Plugins/Platform/MacOSX/CMakeLists.txt
@@ -58,6 +58,7 @@ add_lldb_library(lldbPluginPlatformMacOSX PLUGIN
${OBJC_LIBS}
CLANG_LIBS
clangBasic
+ clangOptions
)
add_dependencies(lldbPluginPlatformMacOSX
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 54316db02a5ee..8216d3c0e6b32 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -43,8 +43,8 @@
#include "lldb/Utility/ProcessInfo.h"
#include "lldb/Utility/Status.h"
#include "lldb/Utility/Timer.h"
+#include "clang/Options/Options.h"
#include "llvm/ADT/STLExtras.h"
-#include "llvm/ADT/StringTable.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Threading.h"
@@ -58,9 +58,6 @@
using namespace lldb;
using namespace lldb_private;
-#define OPTTABLE_STR_TABLE_CODE
-#include "clang/Options/Options.inc"
-
static Status ExceptionMaskValidator(const char *string, void *unused) {
Status error;
llvm::StringRef str_ref(string);
@@ -1178,33 +1175,29 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
// clang has no version-min clang flag for XROS.
if (!version.empty() && sdk_type != XcodeSDK::Type::Linux &&
sdk_type != XcodeSDK::Type::XROS) {
-#define OPTION(PREFIX_OFFSET, NAME_OFFSET, VAR, ...) \
- llvm::StringRef opt_##VAR = OptionStrTable[NAME_OFFSET]; \
- (void)opt_##VAR;
-#include "clang/Options/Options.inc"
-#undef OPTION
- minimum_version_option << '-';
+ clang::options::ID version_min_option = clang::options::OPT_INVALID;
switch (sdk_type) {
case XcodeSDK::Type::MacOSX:
- minimum_version_option << opt_mmacos_version_min_EQ;
+ version_min_option = clang::options::OPT_mmacos_version_min_EQ;
break;
case XcodeSDK::Type::iPhoneSimulator:
- minimum_version_option << opt_mios_simulator_version_min_EQ;
+ version_min_option = clang::options::OPT_mios_simulator_version_min_EQ;
break;
case XcodeSDK::Type::iPhoneOS:
- minimum_version_option << opt_mios_version_min_EQ;
+ version_min_option = clang::options::OPT_mios_version_min_EQ;
break;
case XcodeSDK::Type::AppleTVSimulator:
- minimum_version_option << opt_mtvos_simulator_version_min_EQ;
+ version_min_option = clang::options::OPT_mtvos_simulator_version_min_EQ;
break;
case XcodeSDK::Type::AppleTVOS:
- minimum_version_option << opt_mtvos_version_min_EQ;
+ version_min_option = clang::options::OPT_mtvos_version_min_EQ;
break;
case XcodeSDK::Type::WatchSimulator:
- minimum_version_option << opt_mwatchos_simulator_version_min_EQ;
+ version_min_option =
+ clang::options::OPT_mwatchos_simulator_version_min_EQ;
break;
case XcodeSDK::Type::watchOS:
- minimum_version_option << opt_mwatchos_version_min_EQ;
+ version_min_option = clang::options::OPT_mwatchos_version_min_EQ;
break;
case XcodeSDK::Type::XRSimulator:
case XcodeSDK::Type::XROS:
@@ -1220,7 +1213,10 @@ void PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
}
return;
}
- minimum_version_option << version.getAsString();
+ minimum_version_option << clang::getDriverOptTable()
+ .getOption(version_min_option)
+ .getPrefixedName()
+ << version.getAsString();
options.emplace_back(std::string(minimum_version_option.GetString()));
}
diff --git a/llvm/unittests/Option/OptionMarshallingTest.cpp b/llvm/unittests/Option/OptionMarshallingTest.cpp
index 086ddcfb56525..0fbaa4bc8f75f 100644
--- a/llvm/unittests/Option/OptionMarshallingTest.cpp
+++ b/llvm/unittests/Option/OptionMarshallingTest.cpp
@@ -6,22 +6,22 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/StringTable.h"
+#include "llvm/Option/OptTable.h"
#include "gtest/gtest.h"
-#define OPTTABLE_STR_TABLE_CODE
+enum ID {
+ OPT_INVALID = 0, // This is not an option ID.
+#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
#include "Opts.inc"
+ LastOption
+#undef OPTION
+};
struct OptionWithMarshallingInfo {
- int PrefixedNameOffset;
+ ID Opt;
const char *KeyPath;
const char *ImpliedCheck;
const char *ImpliedValue;
-
- llvm::StringRef getPrefixedName() const {
- return OptionStrTable[PrefixedNameOffset];
- }
};
static const OptionWithMarshallingInfo MarshallingTable[] = {
@@ -30,16 +30,16 @@ static const OptionWithMarshallingInfo MarshallingTable[] = {
FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, VALUES, \
SUBCOMMANDIDS_OFFSET, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, TABLE_INDEX) \
- {PREFIXED_NAME_OFFSET, #KEYPATH, #IMPLIED_CHECK, #IMPLIED_VALUE},
+ {OPT_##ID, #KEYPATH, #IMPLIED_CHECK, #IMPLIED_VALUE},
#include "Opts.inc"
#undef OPTION_WITH_MARSHALLING
};
TEST(OptionMarshalling, EmittedOrderSameAsDefinitionOrder) {
- ASSERT_EQ(MarshallingTable[0].getPrefixedName(), "-marshalled-flag-d");
- ASSERT_EQ(MarshallingTable[1].getPrefixedName(), "-marshalled-flag-c");
- ASSERT_EQ(MarshallingTable[2].getPrefixedName(), "-marshalled-flag-b");
- ASSERT_EQ(MarshallingTable[3].getPrefixedName(), "-marshalled-flag-a");
+ ASSERT_EQ(MarshallingTable[0].Opt, OPT_marshalled_flag_d);
+ ASSERT_EQ(MarshallingTable[1].Opt, OPT_marshalled_flag_c);
+ ASSERT_EQ(MarshallingTable[2].Opt, OPT_marshalled_flag_b);
+ ASSERT_EQ(MarshallingTable[3].Opt, OPT_marshalled_flag_a);
}
TEST(OptionMarshalling, EmittedSpecifiedKeyPath) {
diff --git a/llvm/utils/TableGen/OptionParserEmitter.cpp b/llvm/utils/TableGen/OptionParserEmitter.cpp
index 2718f801c229d..dd13c927b2e02 100644
--- a/llvm/utils/TableGen/OptionParserEmitter.cpp
+++ b/llvm/utils/TableGen/OptionParserEmitter.cpp
@@ -320,19 +320,13 @@ static void emitOptionParser(const RecordKeeper &Records, raw_ostream &OS) {
return 0u;
};
- // Dump string table.
- OS << "/////////\n";
- OS << "// String table\n\n";
- OS << "#if defined(OPTTABLE_STR_TABLE_CODE) || defined(OPTTABLE_CODE)\n";
- Table.EmitStringTableDef(OS, "OptionStrTable");
- OS << "#undef OPTTABLE_STR_TABLE_CODE\n";
- OS << "#endif // OPTTABLE_STR_TABLE_CODE || OPTTABLE_CODE\n\n";
-
OS << "/////////\n";
OS << "// Tables\n\n";
OS << "#ifdef OPTTABLE_CODE\n";
// A function rather than an object: the object needs dynamic relocations.
OS << "static llvm::opt::OptTable::Tables optionTables() {\n";
+ Table.EmitStringTableDef(OS, "OptionStrTable");
+ OS << "\n";
// Dump prefixes.
OS << " static constexpr llvm::StringTable::Offset OptionPrefixesTable[] = "
@@ -481,7 +475,7 @@ static void emitOptionParser(const RecordKeeper &Records, raw_ostream &OS) {
}
OS << " };\n\n";
- OS << " return {OptionStrTableStorage, OptionPrefixesTable,\n";
+ OS << " return {OptionStrTable, OptionPrefixesTable,\n";
OS << " OptionInfoTable, OptionInfoExtrasTable, "
"OptionHelpTextVariantsTable, "
<< (SubCommands.empty() ? "{}" : "OptionSubCommands")
More information about the lldb-commits
mailing list