https://github.com/JDPailleux updated https://github.com/llvm/llvm-project/pull/127605
>From 75c8eb0bf27529c629da02b140502e7557b9be46 Mon Sep 17 00:00:00 2001 From: Jean-Didier Pailleux <jean-didier.paill...@sipearl.com> Date: Tue, 18 Feb 2025 10:12:32 +0100 Subject: [PATCH] [flang][Driver] Add support of -fd-lines-as-comments and -fd-lines-as-code flags --- clang/include/clang/Driver/Options.td | 12 ++++++++-- clang/lib/Driver/ToolChains/Flang.cpp | 2 ++ flang/lib/Frontend/CompilerInvocation.cpp | 26 ++++++++++++++++++++ flang/test/Driver/fd-lines-as.f90 | 29 +++++++++++++++++++++++ flang/test/Preprocessing/fd-lines-as.f90 | 23 ++++++++++++++++++ 5 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 flang/test/Driver/fd-lines-as.f90 create mode 100644 flang/test/Preprocessing/fd-lines-as.f90 diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 5ad187926e710..91d57bb73e5bb 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -6747,8 +6747,16 @@ defm backtrace : BooleanFFlag<"backtrace">, Group<gfortran_Group>; defm bounds_check : BooleanFFlag<"bounds-check">, Group<gfortran_Group>; defm check_array_temporaries : BooleanFFlag<"check-array-temporaries">, Group<gfortran_Group>; 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 d_lines_as_code : BooleanFFlag<"d-lines-as-code">, + HelpText<"Treat fixed form lines with 'd' or 'D' in the " + "first column as blank.">, + Group<f_Group>, + Visibility<[FlangOption, FC1Option]>; +defm d_lines_as_comments : BooleanFFlag<"d-lines-as-comments">, + HelpText<"Treat fixed form lines with 'd' or 'D' in " + "the first column as comments.">, + Group<f_Group>, + Visibility<[FlangOption, FC1Option]>; 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>; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 9ad795edd724d..4c452491fa415 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -60,6 +60,8 @@ void Flang::addFortranDialectOptions(const ArgList &Args, options::OPT_frealloc_lhs, options::OPT_fno_realloc_lhs, options::OPT_fsave_main_program, + options::OPT_fd_lines_as_code, + options::OPT_fd_lines_as_comments, options::OPT_fno_save_main_program}); } diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index f3d9432c62d3b..cb01b1f9ff16f 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -957,6 +957,32 @@ static bool parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args, clang::DiagnosticsEngine &diags) { unsigned numErrorsBefore = diags.getNumErrors(); + // -fd-lines-as-code + if (args.hasArg(clang::driver::options::OPT_fd_lines_as_code)) { + if (res.getFrontendOpts().fortranForm == FortranForm::FreeForm) { + const unsigned fdLinesAsWarning = diags.getCustomDiagID( + clang::DiagnosticsEngine::Warning, + "‘-fd-lines-as-code’ has no effect in free form."); + diags.Report(fdLinesAsWarning); + } else { + res.getFrontendOpts().features.Enable( + Fortran::common::LanguageFeature::OldDebugLines, true); + } + } + + // -fd-lines-as-comments + if (args.hasArg(clang::driver::options::OPT_fd_lines_as_comments)) { + if (res.getFrontendOpts().fortranForm == FortranForm::FreeForm) { + const unsigned fdLinesAsWarning = diags.getCustomDiagID( + clang::DiagnosticsEngine::Warning, + "‘-fd-lines-as-comments’ has no effect in free form."); + diags.Report(fdLinesAsWarning); + } else { + res.getFrontendOpts().features.Enable( + Fortran::common::LanguageFeature::OldDebugLines, false); + } + } + // -fdefault* family if (args.hasArg(clang::driver::options::OPT_fdefault_real_8)) { res.getDefaultKinds().set_defaultRealKind(8); diff --git a/flang/test/Driver/fd-lines-as.f90 b/flang/test/Driver/fd-lines-as.f90 new file mode 100644 index 0000000000000..ea06a39378e28 --- /dev/null +++ b/flang/test/Driver/fd-lines-as.f90 @@ -0,0 +1,29 @@ +! Ensure arguments -fd-lines-as-comments and -fd-lines-as-code as expected. + +!-------------------------- +! FLANG DRIVER (flang) +!-------------------------- +! Default behavior is equivalent as -fd-lines-as-comments +!-------------------------- +! RUN: %flang -fsyntax-only -ffixed-form %s 2>&1 +! RUN: %flang -fsyntax-only -ffixed-form -fd-lines-as-comments %s 2>&1 +! RUN: not %flang -fsyntax-only -ffixed-form -fd-lines-as-code %s 2>&1 | FileCheck %s --check-prefix=CODE +! RUN: not %flang -fsyntax-only -ffree-form -fd-lines-as-comments %s 2>&1 | FileCheck %s --check-prefix=WARNING-COMMENTS +! RUN: not %flang -fsyntax-only -ffree-form -fd-lines-as-code %s 2>&1 | FileCheck %s --check-prefix=WARNING-CODE + +!---------------------------------------- +! FRONTEND FLANG DRIVER (flang -fc1) +!---------------------------------------- +! RUN: %flang_fc1 -fsyntax-only -ffixed-form %s 2>&1 +! RUN: %flang_fc1 -fsyntax-only -ffixed-form -fd-lines-as-comments %s 2>&1 +! RUN: not %flang_fc1 -fsyntax-only -ffixed-form -fd-lines-as-code %s 2>&1 | FileCheck %s --check-prefix=CODE +! RUN: not %flang_fc1 -fsyntax-only -ffree-form -fd-lines-as-comments %s 2>&1 | FileCheck %s --check-prefix=WARNING-COMMENTS +! RUN: not %flang_fc1 -fsyntax-only -ffree-form -fd-lines-as-code %s 2>&1 | FileCheck %s --check-prefix=WARNING-CODE + +! CODE: Semantic errors +! WARNING-COMMENTS: warning: ‘-fd-lines-as-comments’ has no effect in free form. +! WARNING-CODE: warning: ‘-fd-lines-as-code’ has no effect in free form. + + program FixedForm +d end + end diff --git a/flang/test/Preprocessing/fd-lines-as.f90 b/flang/test/Preprocessing/fd-lines-as.f90 new file mode 100644 index 0000000000000..bae40e5ccdb20 --- /dev/null +++ b/flang/test/Preprocessing/fd-lines-as.f90 @@ -0,0 +1,23 @@ +! Ensure arguments -fd-lines-as-comments and -fd-lines-as-code display the correct output with -E. + +!-------------------------- +! Default behavior is equivalent as -fd-lines-as-comments +!-------------------------- +! RUN: %flang -E -ffixed-form %s 2>&1 | FileCheck %s --check-prefix=COMMENT +! RUN: %flang -E -ffixed-form -fd-lines-as-comments %s 2>&1 | FileCheck %s --check-prefix=COMMENT +! RUN: %flang -E -ffixed-form -fd-lines-as-code %s 2>&1 | FileCheck %s --check-prefix=CODE + + program FixedForm +d end +D end + end + +! COMMENT: program FixedForm +! COMMENT: end +! COMMENT-NOT: end +! COMMENT-NOT: end + +! CODE: program FixedForm +! CODE: end +! CODE: end +! CODE: end _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits