Index: include/llvm/Option/OptTable.h =================================================================== --- include/llvm/Option/OptTable.h +++ include/llvm/Option/OptTable.h @@ -191,12 +191,15 @@ /// \param FlagsToInclude - If non-zero, only include options with any /// of these flags set. /// \param FlagsToExclude - Exclude options with any of these flags set. - void PrintHelp(raw_ostream &OS, const char *Name, - const char *Title, unsigned FlagsToInclude, - unsigned FlagsToExclude) const; + /// \param ShowAllAliases - If true then aliases without explicitly set + /// HelpText will be rendered, inheriting it from + /// aliased option. + void PrintHelp(raw_ostream &OS, const char *Name, const char *Title, + unsigned FlagsToInclude, unsigned FlagsToExclude, + bool ShowAllAliases) const; - void PrintHelp(raw_ostream &OS, const char *Name, - const char *Title, bool ShowHidden = false) const; + void PrintHelp(raw_ostream &OS, const char *Name, const char *Title, + bool ShowHidden = false, bool ShowAllAliases = false) const; }; } // end namespace opt Index: lib/Option/OptTable.cpp =================================================================== --- lib/Option/OptTable.cpp +++ lib/Option/OptTable.cpp @@ -444,15 +444,14 @@ } void OptTable::PrintHelp(raw_ostream &OS, const char *Name, const char *Title, - bool ShowHidden) const { + bool ShowHidden, bool ShowAllAliases) const { PrintHelp(OS, Name, Title, /*Include*/ 0, /*Exclude*/ - (ShowHidden ? 0 : HelpHidden)); + (ShowHidden ? 0 : HelpHidden), ShowAllAliases); } - void OptTable::PrintHelp(raw_ostream &OS, const char *Name, const char *Title, - unsigned FlagsToInclude, - unsigned FlagsToExclude) const { + unsigned FlagsToInclude, unsigned FlagsToExclude, + bool ShowAllAliases) const { OS << "OVERVIEW: " << Title << "\n"; OS << '\n'; OS << "USAGE: " << Name << " [options] \n"; @@ -476,10 +475,21 @@ if (Flags & FlagsToExclude) continue; - if (const char *Text = getOptionHelpText(Id)) { + // Aliases usually do not have help text set explicitly. If we want to show + // such aliases in help, we use associated aliased option help text value. + // If both alias and aliased option has no text, that proably means option + // is ignored. + const char *HelpText = getOptionHelpText(Id); + if (!HelpText && ShowAllAliases) { + const Option Alias = getOption(Id).getAlias(); + if (Alias.isValid()) + HelpText = getOptionHelpText(Alias.getID()); + } + + if (HelpText) { const char *HelpGroup = getOptionHelpGroup(*this, Id); const std::string &OptName = getOptionHelpName(*this, Id); - GroupedOptionHelp[HelpGroup].push_back({OptName, Text}); + GroupedOptionHelp[HelpGroup].push_back({OptName, HelpText}); } }