Skip to content

Commit aff197f

Browse files
committed
Reland "[flang][clang] Add Visibility specific help text for options (#81869)"
This reverts commit 67d2041. This includes fixes for clanginstallapi.
1 parent 67d2041 commit aff197f

File tree

16 files changed

+252
-57
lines changed

16 files changed

+252
-57
lines changed

clang-tools-extra/clangd/CompileCommands.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,8 @@ llvm::ArrayRef<ArgStripper::Rule> ArgStripper::rulesFor(llvm::StringRef Arg) {
466466
static constexpr llvm::ArrayRef<llvm::StringLiteral> NAME( \
467467
NAME##_init, std::size(NAME##_init) - 1);
468468
#define OPTION(PREFIX, PREFIXED_NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, \
469-
FLAGS, VISIBILITY, PARAM, HELP, METAVAR, VALUES) \
469+
FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, \
470+
METAVAR, VALUES) \
470471
Prefixes[DriverID::OPT_##ID] = PREFIX;
471472
#include "clang/Driver/Options.inc"
472473
#undef OPTION
@@ -478,7 +479,8 @@ llvm::ArrayRef<ArgStripper::Rule> ArgStripper::rulesFor(llvm::StringRef Arg) {
478479
const void *AliasArgs;
479480
} AliasTable[] = {
480481
#define OPTION(PREFIX, PREFIXED_NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, \
481-
FLAGS, VISIBILITY, PARAM, HELP, METAVAR, VALUES) \
482+
FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, \
483+
METAVAR, VALUES) \
482484
{DriverID::OPT_##ID, DriverID::OPT_##ALIAS, ALIASARGS},
483485
#include "clang/Driver/Options.inc"
484486
#undef OPTION

clang/include/clang/Driver/Options.td

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3409,10 +3409,16 @@ def fopenmp : Flag<["-"], "fopenmp">, Group<f_Group>,
34093409
HelpText<"Parse OpenMP pragmas and generate parallel code.">;
34103410
def fno_openmp : Flag<["-"], "fno-openmp">, Group<f_Group>,
34113411
Flags<[NoArgumentUnused]>;
3412+
class OpenMPVersionHelp<string program, string default> {
3413+
string str = !strconcat(
3414+
"Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is ",
3415+
default, " for ", program);
3416+
}
34123417
def fopenmp_version_EQ : Joined<["-"], "fopenmp-version=">, Group<f_Group>,
34133418
Flags<[NoArgumentUnused]>,
34143419
Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
3415-
HelpText<"Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 51 for Clang">;
3420+
HelpText<OpenMPVersionHelp<"Clang", "51">.str>,
3421+
HelpTextForVariants<[FlangOption, FC1Option], OpenMPVersionHelp<"Flang", "11">.str>;
34163422
defm openmp_extensions: BoolFOption<"openmp-extensions",
34173423
LangOpts<"OpenMPExtensions">, DefaultTrue,
34183424
PosFlag<SetTrue, [NoArgumentUnused], [ClangOption, CC1Option],

clang/lib/Frontend/CompilerInvocation.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -533,10 +533,10 @@ static T extractMaskValue(T KeyPath) {
533533

534534
#define PARSE_OPTION_WITH_MARSHALLING( \
535535
ARGS, DIAGS, PREFIX_TYPE, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, \
536-
FLAGS, VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES, SHOULD_PARSE, \
537-
ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, \
538-
NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \
539-
if ((VISIBILITY)&options::CC1Option) { \
536+
FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, VALUES, \
537+
SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, \
538+
IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \
539+
if ((VISIBILITY) & options::CC1Option) { \
540540
KEYPATH = MERGER(KEYPATH, DEFAULT_VALUE); \
541541
if (IMPLIED_CHECK) \
542542
KEYPATH = MERGER(KEYPATH, IMPLIED_VALUE); \
@@ -550,10 +550,10 @@ static T extractMaskValue(T KeyPath) {
550550
// with lifetime extension of the reference.
551551
#define GENERATE_OPTION_WITH_MARSHALLING( \
552552
CONSUMER, PREFIX_TYPE, SPELLING, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \
553-
VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES, SHOULD_PARSE, ALWAYS_EMIT, \
554-
KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
555-
DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \
556-
if ((VISIBILITY)&options::CC1Option) { \
553+
VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, VALUES, \
554+
SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, \
555+
IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \
556+
if ((VISIBILITY) & options::CC1Option) { \
557557
[&](const auto &Extracted) { \
558558
if (ALWAYS_EMIT || \
559559
(Extracted != \

clang/tools/clang-installapi/Options.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,21 @@ static constexpr const ArrayRef<StringLiteral>
4545
/// Create table mapping all options defined in InstallAPIOpts.td.
4646
static constexpr OptTable::Info InfoTable[] = {
4747
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \
48-
VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES) \
49-
{PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, \
50-
PARAM, FLAGS, VISIBILITY, OPT_##GROUP, OPT_##ALIAS, ALIASARGS, \
48+
VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, \
49+
VALUES) \
50+
{PREFIX, \
51+
NAME, \
52+
HELPTEXT, \
53+
HELPTEXTSFORVARIANTS, \
54+
METAVAR, \
55+
OPT_##ID, \
56+
Option::KIND##Class, \
57+
PARAM, \
58+
FLAGS, \
59+
VISIBILITY, \
60+
OPT_##GROUP, \
61+
OPT_##ALIAS, \
62+
ALIASARGS, \
5163
VALUES},
5264
#include "InstallAPIOpts.inc"
5365
#undef OPTION

clang/tools/clang-installapi/Options.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ class Options {
144144
enum ID {
145145
OPT_INVALID = 0, // This is not an option ID.
146146
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \
147-
VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES) \
147+
VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, \
148+
VALUES) \
148149
OPT_##ID,
149150
#include "InstallAPIOpts.inc"
150151
LastOption

clang/utils/TableGen/ClangOptionDocEmitter.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,38 @@ void emitOption(const DocumentedOption &Option, const Record *DocInfo,
359359

360360
// Emit the description, if we have one.
361361
const Record *R = Option.Option;
362-
std::string Description =
363-
getRSTStringWithTextFallback(R, "DocBrief", "HelpText");
362+
std::string Description;
363+
364+
// Prefer a program specific help string.
365+
// This is a list of (visibilities, string) pairs.
366+
std::vector<Record *> VisibilitiesHelp =
367+
R->getValueAsListOfDefs("HelpTextsForVariants");
368+
for (Record *VisibilityHelp : VisibilitiesHelp) {
369+
// This is a list of visibilities.
370+
ArrayRef<Init *> Visibilities =
371+
VisibilityHelp->getValueAsListInit("Visibilities")->getValues();
372+
373+
// See if any of the program's visibilities are in the list.
374+
for (StringRef DocInfoMask :
375+
DocInfo->getValueAsListOfStrings("VisibilityMask")) {
376+
for (Init *Visibility : Visibilities) {
377+
if (Visibility->getAsUnquotedString() == DocInfoMask) {
378+
// Use the first one we find.
379+
Description = escapeRST(VisibilityHelp->getValueAsString("Text"));
380+
break;
381+
}
382+
}
383+
if (!Description.empty())
384+
break;
385+
}
386+
387+
if (!Description.empty())
388+
break;
389+
}
390+
391+
// If there's not a program specific string, use the default one.
392+
if (Description.empty())
393+
Description = getRSTStringWithTextFallback(R, "DocBrief", "HelpText");
364394

365395
if (!isa<UnsetInit>(R->getValueInit("Values"))) {
366396
if (!Description.empty() && Description.back() != '.')

flang/test/Driver/driver-help-hidden.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
! CHECK-NEXT: -fopenmp-targets=<value>
8282
! CHECK-NEXT: Specify comma-separated list of triples OpenMP offloading targets to be supported
8383
! CHECK-NEXT: -fopenmp-version=<value>
84-
! CHECK-NEXT: Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 51 for Clang
84+
! CHECK-NEXT: Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 11 for Flang
8585
! CHECK-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code.
8686
! CHECK-NEXT: -foptimization-record-file=<file>
8787
! CHECK-NEXT: Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.

flang/test/Driver/driver-help.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
! HELP-NEXT: -fopenmp-targets=<value>
7070
! HELP-NEXT: Specify comma-separated list of triples OpenMP offloading targets to be supported
7171
! HELP-NEXT: -fopenmp-version=<value>
72-
! HELP-NEXT: Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 51 for Clang
72+
! HELP-NEXT: Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 11 for Flang
7373
! HELP-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code.
7474
! HELP-NEXT: -foptimization-record-file=<file>
7575
! HELP-NEXT: Specify the output name of the file containing the optimization remarks. Implies -fsave-optimization-record. On Darwin platforms, this cannot be used with multiple -arch <arch> options.
@@ -226,7 +226,7 @@
226226
! HELP-FC1-NEXT: Generate code only for an OpenMP target device.
227227
! HELP-FC1-NEXT: -fopenmp-target-debug Enable debugging in the OpenMP offloading device RTL
228228
! HELP-FC1-NEXT: -fopenmp-version=<value>
229-
! HELP-FC1-NEXT: Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 51 for Clang
229+
! HELP-FC1-NEXT: Set OpenMP version (e.g. 45 for OpenMP 4.5, 51 for OpenMP 5.1). Default value is 11 for Flang
230230
! HELP-FC1-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code.
231231
! HELP-FC1-NEXT: -fpass-plugin=<dsopath> Load pass plugin from a dynamic shared object file (only with new pass manager).
232232
! HELP-FC1-NEXT: -fppc-native-vector-element-order

lld/MachO/DriverUtils.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,21 @@ using namespace lld::macho;
4545
// Create table mapping all options defined in Options.td
4646
static constexpr OptTable::Info optInfo[] = {
4747
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \
48-
VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES) \
49-
{PREFIX, NAME, HELPTEXT, \
50-
METAVAR, OPT_##ID, opt::Option::KIND##Class, \
51-
PARAM, FLAGS, VISIBILITY, \
52-
OPT_##GROUP, OPT_##ALIAS, ALIASARGS, \
48+
VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, \
49+
VALUES) \
50+
{PREFIX, \
51+
NAME, \
52+
HELPTEXT, \
53+
HELPTEXTSFORVARIANTS, \
54+
METAVAR, \
55+
OPT_##ID, \
56+
opt::Option::KIND##Class, \
57+
PARAM, \
58+
FLAGS, \
59+
VISIBILITY, \
60+
OPT_##GROUP, \
61+
OPT_##ALIAS, \
62+
ALIASARGS, \
5363
VALUES},
5464
#include "Options.inc"
5565
#undef OPTION

lld/MinGW/Driver.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,21 @@ enum {
6969
// Create table mapping all options defined in Options.td
7070
static constexpr opt::OptTable::Info infoTable[] = {
7171
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \
72-
VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES) \
73-
{PREFIX, NAME, HELPTEXT, \
74-
METAVAR, OPT_##ID, opt::Option::KIND##Class, \
75-
PARAM, FLAGS, VISIBILITY, \
76-
OPT_##GROUP, OPT_##ALIAS, ALIASARGS, \
72+
VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, \
73+
VALUES) \
74+
{PREFIX, \
75+
NAME, \
76+
HELPTEXT, \
77+
HELPTEXTSFORVARIANTS, \
78+
METAVAR, \
79+
OPT_##ID, \
80+
opt::Option::KIND##Class, \
81+
PARAM, \
82+
FLAGS, \
83+
VISIBILITY, \
84+
OPT_##GROUP, \
85+
OPT_##ALIAS, \
86+
ALIASARGS, \
7787
VALUES},
7888
#include "Options.inc"
7989
#undef OPTION

lld/wasm/Driver.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,21 @@ bool link(ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
132132
// Create table mapping all options defined in Options.td
133133
static constexpr opt::OptTable::Info optInfo[] = {
134134
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, \
135-
VISIBILITY, PARAM, HELPTEXT, METAVAR, VALUES) \
136-
{PREFIX, NAME, HELPTEXT, \
137-
METAVAR, OPT_##ID, opt::Option::KIND##Class, \
138-
PARAM, FLAGS, VISIBILITY, \
139-
OPT_##GROUP, OPT_##ALIAS, ALIASARGS, \
135+
VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, METAVAR, \
136+
VALUES) \
137+
{PREFIX, \
138+
NAME, \
139+
HELPTEXT, \
140+
HELPTEXTSFORVARIANTS, \
141+
METAVAR, \
142+
OPT_##ID, \
143+
opt::Option::KIND##Class, \
144+
PARAM, \
145+
FLAGS, \
146+
VISIBILITY, \
147+
OPT_##GROUP, \
148+
OPT_##ALIAS, \
149+
ALIASARGS, \
140150
VALUES},
141151
#include "Options.inc"
142152
#undef OPTION

llvm/include/llvm/Option/OptParser.td

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ class OptionGroup<string name> {
9393

9494
// Define the option class.
9595

96+
class HelpTextVariant<list<OptionVisibility> visibilities, string text> {
97+
list<OptionVisibility> Visibilities = visibilities;
98+
string Text = text;
99+
}
100+
96101
class Option<list<string> prefixes, string name, OptionKind kind> {
97102
string EnumName = ?; // Uses the def name if undefined.
98103
list<string> Prefixes = prefixes;
@@ -101,6 +106,7 @@ class Option<list<string> prefixes, string name, OptionKind kind> {
101106
// Used by MultiArg option kind.
102107
int NumArgs = 0;
103108
string HelpText = ?;
109+
list<HelpTextVariant> HelpTextsForVariants = [];
104110
string MetaVarName = ?;
105111
string Values = ?;
106112
code ValuesCode = ?;
@@ -155,6 +161,12 @@ class Visibility<list<OptionVisibility> visibility> {
155161
}
156162
class Group<OptionGroup group> { OptionGroup Group = group; }
157163
class HelpText<string text> { string HelpText = text; }
164+
class HelpTextForVariants<list<OptionVisibility> Visibilities, string text> {
165+
list<HelpTextVariant> HelpTextsForVariants = [
166+
HelpTextVariant<Visibilities, text>
167+
];
168+
}
169+
158170
class MetaVarName<string name> { string MetaVarName = name; }
159171
class Values<string value> { string Values = value; }
160172
class ValuesCode<code valuecode> { code ValuesCode = valuecode; }

0 commit comments

Comments
 (0)