[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