jansvoboda11 created this revision. jansvoboda11 added reviewers: dexonsmith, Bigcheese. jansvoboda11 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This is needed for a future patch, where we start using normalizers in contexts where no Diags are available. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D93701 Files: clang/include/clang/Frontend/CompilerInvocation.h clang/lib/Frontend/CompilerInvocation.cpp
Index: clang/lib/Frontend/CompilerInvocation.cpp =================================================================== --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -131,7 +131,7 @@ static llvm::Optional<bool> normalizeSimpleFlag(OptSpecifier Opt, unsigned TableIndex, const ArgList &Args, - DiagnosticsEngine &Diags, bool &Success) { + DiagnosticsEngine *Diags, bool &Success) { if (Args.hasArg(Opt)) return true; return None; @@ -139,7 +139,7 @@ static Optional<bool> normalizeSimpleNegativeFlag(OptSpecifier Opt, unsigned, const ArgList &Args, - DiagnosticsEngine &, + DiagnosticsEngine *, bool &Success) { if (Args.hasArg(Opt)) return false; @@ -166,7 +166,7 @@ std::enable_if_t<!is_uint64_t_convertible<T>(), bool> = false> static auto makeFlagToValueNormalizer(T Value) { return [Value](OptSpecifier Opt, unsigned, const ArgList &Args, - DiagnosticsEngine &, bool &Success) -> Optional<T> { + DiagnosticsEngine *, bool &Success) -> Optional<T> { if (Args.hasArg(Opt)) return Value; return None; @@ -182,7 +182,7 @@ static auto makeBooleanOptionNormalizer(bool Value, bool OtherValue, OptSpecifier OtherOpt) { return [Value, OtherValue, OtherOpt](OptSpecifier Opt, unsigned, - const ArgList &Args, DiagnosticsEngine &, + const ArgList &Args, DiagnosticsEngine *, bool &Success) -> Optional<bool> { if (const Arg *A = Args.getLastArg(Opt, OtherOpt)) { return A->getOption().matches(Opt) ? Value : OtherValue; @@ -248,7 +248,7 @@ static llvm::Optional<unsigned> normalizeSimpleEnum(OptSpecifier Opt, unsigned TableIndex, const ArgList &Args, - DiagnosticsEngine &Diags, bool &Success) { + DiagnosticsEngine *Diags, bool &Success) { assert(TableIndex < SimpleEnumValueTablesSize); const SimpleEnumValueTable &Table = SimpleEnumValueTables[TableIndex]; @@ -261,8 +261,9 @@ return MaybeEnumVal->Value; Success = false; - Diags.Report(diag::err_drv_invalid_value) - << Arg->getAsString(Args) << ArgValue; + if (Diags) + Diags->Report(diag::err_drv_invalid_value) + << Arg->getAsString(Args) << ArgValue; return None; } @@ -294,7 +295,7 @@ static Optional<std::string> normalizeString(OptSpecifier Opt, int TableIndex, const ArgList &Args, - DiagnosticsEngine &Diags, + DiagnosticsEngine *Diags, bool &Success) { auto *Arg = Args.getLastArg(Opt); if (!Arg) @@ -305,22 +306,23 @@ template <typename IntTy> static Optional<IntTy> normalizeStringIntegral(OptSpecifier Opt, int, const ArgList &Args, - DiagnosticsEngine &Diags, bool &Success) { + DiagnosticsEngine *Diags, bool &Success) { auto *Arg = Args.getLastArg(Opt); if (!Arg) return None; IntTy Res; if (StringRef(Arg->getValue()).getAsInteger(0, Res)) { Success = false; - Diags.Report(diag::err_drv_invalid_int_value) - << Arg->getAsString(Args) << Arg->getValue(); + if (Diags) + Diags->Report(diag::err_drv_invalid_int_value) + << Arg->getAsString(Args) << Arg->getValue(); } return Res; } static Optional<std::vector<std::string>> normalizeStringVector(OptSpecifier Opt, int, const ArgList &Args, - DiagnosticsEngine &, bool &Success) { + DiagnosticsEngine *, bool &Success) { return Args.getAllArgValues(Opt); } @@ -356,7 +358,7 @@ static Optional<std::string> normalizeTriple(OptSpecifier Opt, int TableIndex, const ArgList &Args, - DiagnosticsEngine &Diags, + DiagnosticsEngine *Diags, bool &Success) { auto *Arg = Args.getLastArg(Opt); if (!Arg) @@ -2990,7 +2992,9 @@ } bool CompilerInvocation::parseSimpleArgs(const ArgList &Args, - DiagnosticsEngine &Diags) { + DiagnosticsEngine &DiagsRef) { + DiagnosticsEngine *Diags = &DiagsRef; + bool Success = true; #define OPTION_WITH_MARSHALLING( \ Index: clang/include/clang/Frontend/CompilerInvocation.h =================================================================== --- clang/include/clang/Frontend/CompilerInvocation.h +++ clang/include/clang/Frontend/CompilerInvocation.h @@ -242,10 +242,10 @@ /// table-gen definition /// /// \param Args - The argument list containing the arguments to parse - /// \param Diags - The DiagnosticsEngine associated with CreateFromArgs + /// \param DiagsRef - The DiagnosticsEngine associated with CreateFromArgs /// \returns - True if parsing was successful, false otherwise bool parseSimpleArgs(const llvm::opt::ArgList &Args, - DiagnosticsEngine &Diags); + DiagnosticsEngine &DiagsRef); }; IntrusiveRefCntPtr<llvm::vfs::FileSystem>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits