@@ -458,20 +458,6 @@ llvm::ArrayRef<ArgStripper::Rule> ArgStripper::rulesFor(llvm::StringRef Arg) {
458458 PrevAlias[Self] = T;
459459 NextAlias[T] = Self;
460460 };
461- // Also grab prefixes for each option, these are not fully exposed.
462- llvm::ArrayRef<llvm::StringLiteral> Prefixes[DriverID::LastOption];
463-
464- #define PREFIX (NAME, VALUE ) \
465- static constexpr llvm::StringLiteral NAME##_init[] = VALUE; \
466- static constexpr llvm::ArrayRef<llvm::StringLiteral> NAME ( \
467- NAME##_init, std::size (NAME##_init) - 1 );
468- #define OPTION (PREFIX, PREFIXED_NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, \
469- FLAGS, VISIBILITY, PARAM, HELPTEXT, HELPTEXTSFORVARIANTS, \
470- METAVAR, VALUES) \
471- Prefixes[DriverID::OPT_##ID] = PREFIX;
472- #include " clang/Driver/Options.inc"
473- #undef OPTION
474- #undef PREFIX
475461
476462 struct {
477463 DriverID ID;
@@ -498,7 +484,9 @@ llvm::ArrayRef<ArgStripper::Rule> ArgStripper::rulesFor(llvm::StringRef Arg) {
498484 llvm::SmallVector<Rule> Rules;
499485 // Iterate over each alias, to add rules for parsing it.
500486 for (unsigned A = ID; A != DriverID::OPT_INVALID; A = NextAlias[A]) {
501- if (!Prefixes[A].size ()) // option groups.
487+ llvm::SmallVector<llvm::StringRef, 4 > Prefixes;
488+ DriverTable.appendOptionPrefixes (A, Prefixes);
489+ if (Prefixes.empty ()) // option groups.
502490 continue ;
503491 auto Opt = DriverTable.getOption (A);
504492 // Exclude - and -foo pseudo-options.
@@ -507,7 +495,7 @@ llvm::ArrayRef<ArgStripper::Rule> ArgStripper::rulesFor(llvm::StringRef Arg) {
507495 auto Modes = getModes (Opt);
508496 std::pair<unsigned , unsigned > ArgCount = getArgCount (Opt);
509497 // Iterate over each spelling of the alias, e.g. -foo vs --foo.
510- for (StringRef Prefix : Prefixes[A] ) {
498+ for (StringRef Prefix : Prefixes) {
511499 llvm::SmallString<64 > Buf (Prefix);
512500 Buf.append (Opt.getName ());
513501 llvm::StringRef Spelling = Result->try_emplace (Buf).first ->getKey ();
0 commit comments