diff --git a/clang-tools-extra/clangd/CompileCommands.cpp b/clang-tools-extra/clangd/CompileCommands.cpp --- a/clang-tools-extra/clangd/CompileCommands.cpp +++ b/clang-tools-extra/clangd/CompileCommands.cpp @@ -493,8 +493,8 @@ static constexpr llvm::StringLiteral NAME##_init[] = VALUE; \ static constexpr llvm::ArrayRef NAME( \ NAME##_init, std::size(NAME##_init) - 1); -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELP, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELP, METAVAR, VALUES) \ Prefixes[DriverID::OPT_##ID] = PREFIX; #include "clang/Driver/Options.inc" #undef OPTION @@ -505,8 +505,8 @@ DriverID AliasID; const void *AliasArgs; } AliasTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELP, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELP, METAVAR, VALUES) \ {DriverID::OPT_##ID, DriverID::OPT_##ALIAS, ALIASARGS}, #include "clang/Driver/Options.inc" #undef OPTION diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -427,10 +427,10 @@ } #define PARSE_OPTION_WITH_MARSHALLING( \ - ARGS, DIAGS, PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \ - PARAM, HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, \ - KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \ - DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + ARGS, DIAGS, PREFIX_TYPE, NAME, SPELLING, ID, KIND, GROUP, ALIAS, \ + ALIASARGS, FLAGS, PARAM, HELPTEXT, METAVAR, VALUES, SHOULD_PARSE, \ + ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, \ + NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ if ((FLAGS)&options::CC1Option) { \ KEYPATH = MERGER(KEYPATH, DEFAULT_VALUE); \ if (IMPLIED_CHECK) \ @@ -444,10 +444,10 @@ // Capture the extracted value as a lambda argument to avoid potential issues // with lifetime extension of the reference. #define GENERATE_OPTION_WITH_MARSHALLING( \ - ARGS, STRING_ALLOCATOR, PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, \ - ALIASARGS, FLAGS, PARAM, HELPTEXT, METAVAR, VALUES, SPELLING, \ - SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, \ - IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ + ARGS, STRING_ALLOCATOR, PREFIX_TYPE, NAME, SPELLING, ID, KIND, GROUP, \ + ALIAS, ALIASARGS, FLAGS, PARAM, HELPTEXT, METAVAR, VALUES, SHOULD_PARSE, \ + ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, \ + NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \ if ((FLAGS)&options::CC1Option) { \ [&](const auto &Extracted) { \ if (ALWAYS_EMIT || \ diff --git a/llvm/include/llvm/Option/OptTable.h b/llvm/include/llvm/Option/OptTable.h --- a/llvm/include/llvm/Option/OptTable.h +++ b/llvm/include/llvm/Option/OptTable.h @@ -45,6 +45,7 @@ /// matching. ArrayRef Prefixes; StringRef Name; + StringLiteral Spelling; const char *HelpText; const char *MetaVar; unsigned ID; diff --git a/llvm/include/llvm/Option/Option.h b/llvm/include/llvm/Option/Option.h --- a/llvm/include/llvm/Option/Option.h +++ b/llvm/include/llvm/Option/Option.h @@ -100,6 +100,11 @@ return Info->Name; } + StringLiteral getSpelling() const { + assert(Info && "Must have a valid info!"); + return Info->Spelling; + } + const Option getGroup() const { assert(Info && "Must have a valid info!"); assert(Owner && "Must have a valid owner!"); diff --git a/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.h b/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.h --- a/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.h +++ b/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.h @@ -26,7 +26,8 @@ enum { COFF_OPT_INVALID = 0, -#define OPTION(_1, _2, ID, _4, _5, _6, _7, _8, _9, _10, _11, _12) COFF_OPT_##ID, +#define OPTION(_1, _2, _3, ID, _5, _6, _7, _8, _9, _10, _11, _12, _13) \ + COFF_OPT_##ID, #include "COFFOptions.inc" #undef OPTION }; diff --git a/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.cpp b/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.cpp --- a/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.cpp @@ -37,19 +37,20 @@ // Create table mapping all options defined in COFFOptions.td static constexpr opt::OptTable::Info infoTable[] = { -#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \ +#define OPTION(X1, X2, X3, ID, KIND, GROUP, ALIAS, X8, X9, X10, X11, X12, X13) \ {X1, \ X2, \ - X10, \ + X3, \ X11, \ + X12, \ COFF_OPT_##ID, \ opt::Option::KIND##Class, \ + X10, \ X9, \ - X8, \ COFF_OPT_##GROUP, \ COFF_OPT_##ALIAS, \ - X7, \ - X12}, + X8, \ + X13}, #include "COFFOptions.inc" #undef OPTION }; diff --git a/llvm/tools/llvm-lipo/llvm-lipo.cpp b/llvm/tools/llvm-lipo/llvm-lipo.cpp --- a/llvm/tools/llvm-lipo/llvm-lipo.cpp +++ b/llvm/tools/llvm-lipo/llvm-lipo.cpp @@ -67,8 +67,8 @@ namespace { enum LipoID { LIPO_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ LIPO_##ID, #include "LipoOpts.inc" #undef OPTION @@ -83,12 +83,21 @@ #undef PREFIX static constexpr opt::OptTable::Info LipoInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ - {PREFIX, NAME, HELPTEXT, \ - METAVAR, LIPO_##ID, opt::Option::KIND##Class, \ - PARAM, FLAGS, LIPO_##GROUP, \ - LIPO_##ALIAS, ALIASARGS, VALUES}, +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ + {PREFIX, \ + NAME, \ + SPELLING, \ + HELPTEXT, \ + METAVAR, \ + LIPO_##ID, \ + opt::Option::KIND##Class, \ + PARAM, \ + FLAGS, \ + LIPO_##GROUP, \ + LIPO_##ALIAS, \ + ALIASARGS, \ + VALUES}, #include "LipoOpts.inc" #undef OPTION }; diff --git a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp --- a/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp +++ b/llvm/tools/llvm-objcopy/ObjcopyOptions.cpp @@ -30,8 +30,8 @@ namespace { enum ObjcopyID { OBJCOPY_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ OBJCOPY_##ID, #include "ObjcopyOpts.inc" #undef OPTION @@ -46,12 +46,21 @@ #undef PREFIX static constexpr opt::OptTable::Info ObjcopyInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ - {PREFIX, NAME, HELPTEXT, \ - METAVAR, OBJCOPY_##ID, opt::Option::KIND##Class, \ - PARAM, FLAGS, OBJCOPY_##GROUP, \ - OBJCOPY_##ALIAS, ALIASARGS, VALUES}, +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ + {PREFIX, \ + NAME, \ + SPELLING, \ + HELPTEXT, \ + METAVAR, \ + OBJCOPY_##ID, \ + opt::Option::KIND##Class, \ + PARAM, \ + FLAGS, \ + OBJCOPY_##GROUP, \ + OBJCOPY_##ALIAS, \ + ALIASARGS, \ + VALUES}, #include "ObjcopyOpts.inc" #undef OPTION }; @@ -66,8 +75,8 @@ enum InstallNameToolID { INSTALL_NAME_TOOL_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ INSTALL_NAME_TOOL_##ID, #include "InstallNameToolOpts.inc" #undef OPTION @@ -83,10 +92,11 @@ #undef PREFIX static constexpr opt::OptTable::Info InstallNameToolInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ {PREFIX, \ NAME, \ + SPELLING, \ HELPTEXT, \ METAVAR, \ INSTALL_NAME_TOOL_##ID, \ @@ -110,8 +120,8 @@ enum BitcodeStripID { BITCODE_STRIP_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ BITCODE_STRIP_##ID, #include "BitcodeStripOpts.inc" #undef OPTION @@ -127,10 +137,11 @@ #undef PREFIX static constexpr opt::OptTable::Info BitcodeStripInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ {PREFIX, \ NAME, \ + SPELLING, \ HELPTEXT, \ METAVAR, \ BITCODE_STRIP_##ID, \ @@ -154,8 +165,8 @@ enum StripID { STRIP_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ STRIP_##ID, #include "StripOpts.inc" #undef OPTION @@ -170,12 +181,21 @@ #undef PREFIX static constexpr opt::OptTable::Info StripInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ - {PREFIX, NAME, HELPTEXT, \ - METAVAR, STRIP_##ID, opt::Option::KIND##Class, \ - PARAM, FLAGS, STRIP_##GROUP, \ - STRIP_##ALIAS, ALIASARGS, VALUES}, +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ + {PREFIX, \ + NAME, \ + SPELLING, \ + HELPTEXT, \ + METAVAR, \ + STRIP_##ID, \ + opt::Option::KIND##Class, \ + PARAM, \ + FLAGS, \ + STRIP_##GROUP, \ + STRIP_##ALIAS, \ + ALIASARGS, \ + VALUES}, #include "StripOpts.inc" #undef OPTION }; diff --git a/llvm/tools/llvm-objdump/ObjdumpOptID.h b/llvm/tools/llvm-objdump/ObjdumpOptID.h --- a/llvm/tools/llvm-objdump/ObjdumpOptID.h +++ b/llvm/tools/llvm-objdump/ObjdumpOptID.h @@ -3,8 +3,8 @@ enum ObjdumpOptID { OBJDUMP_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ OBJDUMP_##ID, #include "ObjdumpOpts.inc" #undef OPTION diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -128,12 +128,21 @@ #undef PREFIX static constexpr opt::OptTable::Info ObjdumpInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ - {PREFIX, NAME, HELPTEXT, \ - METAVAR, OBJDUMP_##ID, opt::Option::KIND##Class, \ - PARAM, FLAGS, OBJDUMP_##GROUP, \ - OBJDUMP_##ALIAS, ALIASARGS, VALUES}, +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ + {PREFIX, \ + NAME, \ + SPELLING, \ + HELPTEXT, \ + METAVAR, \ + OBJDUMP_##ID, \ + opt::Option::KIND##Class, \ + PARAM, \ + FLAGS, \ + OBJDUMP_##GROUP, \ + OBJDUMP_##ALIAS, \ + ALIASARGS, \ + VALUES}, #include "ObjdumpOpts.inc" #undef OPTION }; @@ -149,8 +158,8 @@ enum OtoolOptID { OTOOL_INVALID = 0, // This is not an option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ OTOOL_##ID, #include "OtoolOpts.inc" #undef OPTION @@ -165,12 +174,21 @@ #undef PREFIX static constexpr opt::OptTable::Info OtoolInfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ - {PREFIX, NAME, HELPTEXT, \ - METAVAR, OTOOL_##ID, opt::Option::KIND##Class, \ - PARAM, FLAGS, OTOOL_##GROUP, \ - OTOOL_##ALIAS, ALIASARGS, VALUES}, +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ + {PREFIX, \ + NAME, \ + SPELLING, \ + HELPTEXT, \ + METAVAR, \ + OTOOL_##ID, \ + opt::Option::KIND##Class, \ + PARAM, \ + FLAGS, \ + OTOOL_##GROUP, \ + OTOOL_##ALIAS, \ + ALIASARGS, \ + VALUES}, #include "OtoolOpts.inc" #undef OPTION }; diff --git a/llvm/tools/llvm-rc/llvm-rc.cpp b/llvm/tools/llvm-rc/llvm-rc.cpp --- a/llvm/tools/llvm-rc/llvm-rc.cpp +++ b/llvm/tools/llvm-rc/llvm-rc.cpp @@ -77,8 +77,8 @@ enum Windres_ID { WINDRES_INVALID = 0, // This is not a correct option ID. -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ WINDRES_##ID, #include "WindresOpts.inc" #undef OPTION @@ -93,12 +93,21 @@ #undef PREFIX static constexpr opt::OptTable::Info InfoTable[] = { -#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \ - HELPTEXT, METAVAR, VALUES) \ - {PREFIX, NAME, HELPTEXT, \ - METAVAR, WINDRES_##ID, opt::Option::KIND##Class, \ - PARAM, FLAGS, WINDRES_##GROUP, \ - WINDRES_##ALIAS, ALIASARGS, VALUES}, +#define OPTION(PREFIX, NAME, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \ + FLAGS, PARAM, HELPTEXT, METAVAR, VALUES) \ + {PREFIX, \ + NAME, \ + SPELLING, \ + HELPTEXT, \ + METAVAR, \ + WINDRES_##ID, \ + opt::Option::KIND##Class, \ + PARAM, \ + FLAGS, \ + WINDRES_##GROUP, \ + WINDRES_##ALIAS, \ + ALIASARGS, \ + VALUES}, #include "WindresOpts.inc" #undef OPTION }; diff --git a/llvm/utils/TableGen/OptParserEmitter.cpp b/llvm/utils/TableGen/OptParserEmitter.cpp --- a/llvm/utils/TableGen/OptParserEmitter.cpp +++ b/llvm/utils/TableGen/OptParserEmitter.cpp @@ -105,8 +105,6 @@ } void emit(raw_ostream &OS) const { - write_cstring(OS, StringRef(getOptionSpelling(R))); - OS << ", "; OS << ShouldParse; OS << ", "; OS << ShouldAlwaysEmit; @@ -306,6 +304,9 @@ // The option string. OS << ", \"" << R.getValueAsString("Name") << '"'; + // The option spelling. + OS << ", \"" << R.getValueAsString("Name") << '"'; + // The option identifier name. OS << ", " << getOptionName(R); @@ -349,6 +350,11 @@ // The option string. emitNameUsingSpelling(OS, R); + // The option spelling. + OS << ", llvm::StringLiteral("; + write_cstring(OS, getOptionSpelling(R)); + OS << ")"; + // The option identifier name. OS << ", " << getOptionName(R);