elmcdonough updated this revision to Diff 496730.
elmcdonough retitled this revision from "Emit warning for `-Wextra` instead of 
error" to "Emit warning for unsupported gfortran flags".
elmcdonough added a comment.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This update adds other unsupported gfortran options to Options.td.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143301/new/

https://reviews.llvm.org/D143301

Files:
  clang/include/clang/Driver/Options.td
  flang/lib/Frontend/CompilerInvocation.cpp
  flang/test/Driver/werror-all.f90
  flang/test/Driver/wextra-ok.f90

Index: flang/test/Driver/wextra-ok.f90
===================================================================
--- /dev/null
+++ flang/test/Driver/wextra-ok.f90
@@ -0,0 +1,11 @@
+! Ensure that supplying -Wextra into flang-new does not raise error
+! The first check should be changed if -Wextra is implemented
+
+! RUN: %flang -std=f2018 -Wextra %s 2>&1 | FileCheck %s --check-prefix=CHECK-OK
+! RUN: not %flang -std=f2018 -Wblah -Wextra %s 2>&1 | FileCheck %s --check-prefix=WRONG
+
+! CHECK-OK: argument unused during compilation: '-Wextra'
+! WRONG: Only `-Werror` is supported currently.
+
+program wextra_ok
+end program wextra_ok
Index: flang/test/Driver/werror-all.f90
===================================================================
--- /dev/null
+++ flang/test/Driver/werror-all.f90
@@ -0,0 +1,13 @@
+! Ensures that -Werror is read regardless of whether or not other -W
+! flags are present in the CLI args
+
+! RUN: not %flang -std=f2018 -Werror -Wextra %s 2>&1 | FileCheck %s --check-prefix=WRONG 
+! RUN: %flang -std=f2018 -Wextra -Wall %s 2>&1 | FileCheck %s --check-prefix=CHECK-OK
+
+! WRONG: Semantic errors in
+! CHECK-OK: FORALL index variable
+
+program werror_check_all
+  integer :: a(3)
+  forall (j=1:n) a(i) = 1
+end program werror_check_all
Index: flang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- flang/lib/Frontend/CompilerInvocation.cpp
+++ flang/lib/Frontend/CompilerInvocation.cpp
@@ -604,14 +604,18 @@
   // TODO: Currently throws a Diagnostic for anything other than -W<error>,
   // this has to change when other -W<opt>'s are supported.
   if (args.hasArg(clang::driver::options::OPT_W_Joined)) {
-    if (args.getLastArgValue(clang::driver::options::OPT_W_Joined)
-            .equals("error")) {
-      res.setWarnAsErr(true);
-    } else {
-      const unsigned diagID =
-          diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
-                                "Only `-Werror` is supported currently.");
-      diags.Report(diagID);
+    const auto wArgs =
+        args.getAllArgValues(clang::driver::options::OPT_W_Joined);
+    for (const auto &wArg : wArgs) {
+      if (wArg == "error") {
+        res.setWarnAsErr(true);
+      } else {
+        const unsigned diagID =
+            diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
+                                  "Only `-Werror` is supported currently.");
+        diags.Report(diagID);
+        break;
+      }
     }
   }
 
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -4988,6 +4988,8 @@
 defm aggressive_function_elimination : BooleanFFlag<"aggressive-function-elimination">, Group<gfortran_Group>;
 defm align_commons : BooleanFFlag<"align-commons">, Group<gfortran_Group>;
 defm all_intrinsics : BooleanFFlag<"all-intrinsics">, Group<gfortran_Group>;
+defm allow_argument_mismatch : BooleanFFlag<"allow-argument-mismatch">, Group<gfortran_Group>;
+defm allow_invalid_boz : BooleanFFlag<"allow-invalid-boz">, Group<gfortran_Group>;
 def fautomatic : Flag<["-"], "fautomatic">; // -fno-automatic is significant
 defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>;
 defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>;
@@ -4995,6 +4997,17 @@
 defm cray_pointer : BooleanFFlag<"cray-pointer">, Group<gfortran_Group>;
 defm d_lines_as_code : BooleanFFlag<"d-lines-as-code">, Group<gfortran_Group>;
 defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, Group<gfortran_Group>;
+defm dec : BooleanFFlag<"dec">, Group<gfortran_Group>;
+defm dec_char_conversions : BooleanFFlag<"dec-char-conversions">, Group<gfortran_Group>;
+defm dec_structure : BooleanFFlag<"dec-structure">, Group<gfortran_Group>;
+defm dec_intrinsic_ints : BooleanFFlag<"dec-intrinsic-ints">, Group<gfortran_Group>;
+defm dec_static : BooleanFFlag<"dec-static">, Group<gfortran_Group>;
+defm dec_math : BooleanFFlag<"dec-math">, Group<gfortran_Group>;
+defm dec_include : BooleanFFlag<"dec-include">, Group<gfortran_Group>;
+defm dec_format_defaults : BooleanFFlag<"dec-format-defaults">, Group<gfortran_Group>;
+defm dec_blank_format_item : BooleanFFlag<"dec-blank-format-item">, Group<gfortran_Group>;
+defm default_real_10 : BooleanFFlag<"default-real-10">, Group<gfortran_Group>;
+defm default_real_16 : BooleanFFlag<"default-real-16">, Group<gfortran_Group>;
 defm dollar_ok : BooleanFFlag<"dollar-ok">, Group<gfortran_Group>;
 defm dump_fortran_optimized : BooleanFFlag<"dump-fortran-optimized">, Group<gfortran_Group>;
 defm dump_fortran_original : BooleanFFlag<"dump-fortran-original">, Group<gfortran_Group>;
@@ -5002,7 +5015,12 @@
 defm external_blas : BooleanFFlag<"external-blas">, Group<gfortran_Group>;
 defm f2c : BooleanFFlag<"f2c">, Group<gfortran_Group>;
 defm frontend_optimize : BooleanFFlag<"frontend-optimize">, Group<gfortran_Group>;
+defm frontend_loop_interchange : BooleanFFlag<"frontend-loop-interchange">, Group<gfortran_Group>;
+defm pad_source : BooleanFFlag<"pad-source">, Group<gfortran_Group>;
+defm init_derived : BooleanFFlag<"init-derived">, Group<gfortran_Group>;
 defm init_local_zero : BooleanFFlag<"init-local-zero">, Group<gfortran_Group>;
+defm inline_arg_packing : BooleanFFlag<"inline-arg-packing">, Group<gfortran_Group>;
+def finline_matmul_limit : Joined<["-"], "finline-matmul-limit=">, Group<gfortran_Group>;
 defm integer_4_integer_8 : BooleanFFlag<"integer-4-integer-8">, Group<gfortran_Group>;
 defm max_identifier_length : BooleanFFlag<"max-identifier-length">, Group<gfortran_Group>;
 defm module_private : BooleanFFlag<"module-private">, Group<gfortran_Group>;
@@ -5020,9 +5038,48 @@
 defm repack_arrays : BooleanFFlag<"repack-arrays">, Group<gfortran_Group>;
 defm second_underscore : BooleanFFlag<"second-underscore">, Group<gfortran_Group>;
 defm sign_zero : BooleanFFlag<"sign-zero">, Group<gfortran_Group>;
+defm test_forall_temp : BooleanFFlag<"test-forall-temp">, Group<gfortran_Group>;
+defm tail_call_workaround : BooleanFFlag<"tail-call-workaround">, Group<gfortran_Group>;
+def ftail_call_workaround_eq : Joined<["-"], "ftail-call-workaround=">, Group<gfortran_Group>;
 defm underscoring : BooleanFFlag<"underscoring">, Group<gfortran_Group>;
 defm whole_file : BooleanFFlag<"whole-file">, Group<gfortran_Group>;
 
+// Gfortran flags that are unsupported by flang
+def gfortran_unsupported_Group : OptionGroup<
+  "<gfortran_unsupported_Group>">, Flags<[FlangOnlyOption, Ignored]>;
+
+// gfortran warning flag unsupported in flang
+multiclass GfortUnsupportedWarning<string name> {
+  def unsupported_warning_w#NAME : Flag<["-", "--"], "W"#name>, Group<gfortran_unsupported_Group>;
+}
+
+defm : GfortUnsupportedWarning<"extra">;
+defm : GfortUnsupportedWarning<"aliasing">;
+defm : GfortUnsupportedWarning<"ampersand">;
+defm : GfortUnsupportedWarning<"array-bounds">;
+defm : GfortUnsupportedWarning<"c-binding-type">;
+defm : GfortUnsupportedWarning<"character-truncation">;
+defm : GfortUnsupportedWarning<"conversion">;
+defm : GfortUnsupportedWarning<"do-subscript">;
+defm : GfortUnsupportedWarning<"function-elimination">;
+defm : GfortUnsupportedWarning<"implicit-interface">;
+defm : GfortUnsupportedWarning<"implicit-procedure">;
+defm : GfortUnsupportedWarning<"intrinsic-shadow">;
+defm : GfortUnsupportedWarning<"use-without-only">;
+defm : GfortUnsupportedWarning<"intrinsics-std">;
+defm : GfortUnsupportedWarning<"line-truncation">;
+defm : GfortUnsupportedWarning<"no-align-commons">;
+defm : GfortUnsupportedWarning<"no-overwrite-recursive">;
+defm : GfortUnsupportedWarning<"no-tabs">;
+defm : GfortUnsupportedWarning<"real-q-constant">;
+defm : GfortUnsupportedWarning<"surprising">;
+defm : GfortUnsupportedWarning<"underflow">;
+defm : GfortUnsupportedWarning<"unused-parameter">;
+defm : GfortUnsupportedWarning<"realloc-lhs">;
+defm : GfortUnsupportedWarning<"realloc-lhs-all">;
+defm : GfortUnsupportedWarning<"frontend-loop-interchange">;
+defm : GfortUnsupportedWarning<"target-lifetime">;
+
 // C++ SYCL options
 def fsycl : Flag<["-"], "fsycl">, Flags<[NoXarchOption, CoreOption]>,
   Group<sycl_Group>, HelpText<"Enables SYCL kernels compilation for device">;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to