llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver @llvm/pr-subscribers-flang-fir-hlfir Author: None (jeanPerier) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/121968.diff 5 Files Affected: - (modified) clang/include/clang/Driver/Options.td (+3) - (modified) clang/lib/Driver/ToolChains/Flang.cpp (+2-1) - (modified) flang/lib/Frontend/CompilerInvocation.cpp (+5) - (added) flang/test/Driver/fsave-main-program.f90 (+5) - (added) flang/test/Lower/fsave-main-program.f90 (+10) ``````````diff diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 0528104f055158..85d02edc935f0b 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -6945,6 +6945,9 @@ defm unsigned : OptInFC1FFlag<"unsigned", "Enables UNSIGNED type">; def fno_automatic : Flag<["-"], "fno-automatic">, Group<f_Group>, HelpText<"Implies the SAVE attribute for non-automatic local objects in subprograms unless RECURSIVE">; +def fsave_main_program : Flag<["-"], "fsave-main-program">, Group<f_Group>, + HelpText<"Place all variables from the main program in static memory (otherwise scalar may be placed on the stack)">; + defm stack_arrays : BoolOptionWithoutMarshalling<"f", "stack-arrays", PosFlag<SetTrue, [], [ClangOption], "Attempt to allocate array temporaries on the stack, no matter their size">, NegFlag<SetFalse, [], [ClangOption], "Allocate array temporaries on the heap (default)">>; diff --git a/clang/lib/Driver/ToolChains/Flang.cpp b/clang/lib/Driver/ToolChains/Flang.cpp index 7034e5b475c1d3..75b10e88371ae7 100644 --- a/clang/lib/Driver/ToolChains/Flang.cpp +++ b/clang/lib/Driver/ToolChains/Flang.cpp @@ -57,7 +57,8 @@ void Flang::addFortranDialectOptions(const ArgList &Args, options::OPT_fno_automatic, options::OPT_fhermetic_module_files, options::OPT_frealloc_lhs, - options::OPT_fno_realloc_lhs}); + options::OPT_fno_realloc_lhs, + options::OPT_fsave_main_program}); } void Flang::addPreprocessingOptions(const ArgList &Args, diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 79386c92d552ca..340efb1c63a5e5 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -766,6 +766,11 @@ static bool parseFrontendArgs(FrontendOptions &opts, llvm::opt::ArgList &args, opts.features.Enable(Fortran::common::LanguageFeature::DefaultSave); } + // -fsave-main-program + if (args.hasArg(clang::driver::options::OPT_fsave_main_program)) { + opts.features.Enable(Fortran::common::LanguageFeature::SaveMainProgram); + } + if (args.hasArg( clang::driver::options::OPT_falternative_parameter_statement)) { opts.features.Enable(Fortran::common::LanguageFeature::OldStyleParameter); diff --git a/flang/test/Driver/fsave-main-program.f90 b/flang/test/Driver/fsave-main-program.f90 new file mode 100644 index 00000000000000..bffdfd97911e80 --- /dev/null +++ b/flang/test/Driver/fsave-main-program.f90 @@ -0,0 +1,5 @@ +! Check that the driver passes through -fsave-main-program: +! RUN: %flang -### -S -fsave-main-program %s -o - 2>&1 | FileCheck %s +! Check that the compiler accepts -fsave-main-program: +! RUN: %flang_fc1 -emit-hlfir -fsave-main-program %s -o - +! CHECK: "-fc1"{{.*}}"-fsave-main-program" diff --git a/flang/test/Lower/fsave-main-program.f90 b/flang/test/Lower/fsave-main-program.f90 new file mode 100644 index 00000000000000..17fc1b02f5068f --- /dev/null +++ b/flang/test/Lower/fsave-main-program.f90 @@ -0,0 +1,10 @@ +! Test -fsave-main-program switch. +! RUN: %flang_fc1 -emit-hlfir -o - %s | FileCheck --check-prefix=CHECK-DEFAULT %s +! RUN: %flang_fc1 -fsave-main-program -emit-hlfir -o - %s | FileCheck --check-prefix=CHECK-SAVE %s +program test +integer :: i +call foo(i) +end + +!CHECK-DEFAULT-NOT: fir.global internal @_QFEi +!CHECK-SAVE: fir.global internal @_QFEi `````````` </details> https://github.com/llvm/llvm-project/pull/121968 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits