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