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

Reply via email to