[clang] e1da329 - [flang][driver] Add support for the "-init-only" option
Andrzej Warzynski via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 7 07:40:59 PDT 2021
Author: Stuart Ellis
Date: 2021-06-07T15:40:26+01:00
New Revision: e1da3297d253b33be1ff941cf9ed9091dd332ea5
URL: https://github.com/llvm/llvm-project/commit/e1da3297d253b33be1ff941cf9ed9091dd332ea5
DIFF: https://github.com/llvm/llvm-project/commit/e1da3297d253b33be1ff941cf9ed9091dd332ea5.diff
LOG: [flang][driver] Add support for the "-init-only" option
Adding the `-init-only` option and corresponding frontend action to
generate a diagnostic.
`-init-only` vs `-test-io`:
`-init-only` ignores the input (it never calls the prescanner)
`-test-io` is similar to `-init-only`, but does read and print the input
without calling the prescanner.
This patch also adds a Driver test to check this action.
Reviewed By: awarzynski, AMDChirag
Differential Revision: https://reviews.llvm.org/D102849
Added:
flang/test/Driver/init-only.f90
Modified:
clang/include/clang/Driver/Options.td
flang/include/flang/Frontend/FrontendActions.h
flang/include/flang/Frontend/FrontendOptions.h
flang/lib/Frontend/CompilerInvocation.cpp
flang/lib/Frontend/FrontendActions.cpp
flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
flang/test/Driver/driver-help.f90
Removed:
################################################################################
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index c2945fb0bf184..c92348d040712 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -5273,8 +5273,6 @@ def analyze : Flag<["-"], "analyze">,
HelpText<"Run static analysis engine">;
def dump_tokens : Flag<["-"], "dump-tokens">,
HelpText<"Run preprocessor, dump internal rep of tokens">;
-def init_only : Flag<["-"], "init-only">,
- HelpText<"Only execute frontend initialization">;
def fixit : Flag<["-"], "fixit">,
HelpText<"Apply fix-it advice to the input source">;
def fixit_EQ : Joined<["-"], "fixit=">,
@@ -5740,6 +5738,8 @@ let Group = Action_Group in {
def emit_obj : Flag<["-"], "emit-obj">,
HelpText<"Emit native object files">;
+def init_only : Flag<["-"], "init-only">,
+ HelpText<"Only execute frontend initialization">;
} // let Group = Action_Group
} // let Flags = [CC1Option, FC1Option, NoDriverOption]
diff --git a/flang/include/flang/Frontend/FrontendActions.h b/flang/include/flang/Frontend/FrontendActions.h
index 619e83ad88c77..7a88382075741 100644
--- a/flang/include/flang/Frontend/FrontendActions.h
+++ b/flang/include/flang/Frontend/FrontendActions.h
@@ -38,6 +38,10 @@ class EmitObjAction : public FrontendAction {
void ExecuteAction() override;
};
+class InitOnlyAction : public FrontendAction {
+ void ExecuteAction() override;
+};
+
//===----------------------------------------------------------------------===//
// Prescan Actions
//===----------------------------------------------------------------------===//
diff --git a/flang/include/flang/Frontend/FrontendOptions.h b/flang/include/flang/Frontend/FrontendOptions.h
index e18fd961a55b0..9c34abb68f2d6 100644
--- a/flang/include/flang/Frontend/FrontendOptions.h
+++ b/flang/include/flang/Frontend/FrontendOptions.h
@@ -71,7 +71,10 @@ enum ActionKind {
GetDefinition,
/// Parse, run semantics and then dump symbol sources map
- GetSymbolsSources
+ GetSymbolsSources,
+
+ /// Only execute frontend initialization
+ InitOnly
/// TODO: RunPreprocessor, EmitLLVM, EmitLLVMOnly,
/// EmitCodeGenOnly, EmitAssembly, (...)
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 6d9a3a7f31947..5098da42dfc0f 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -162,9 +162,12 @@ static bool ParseFrontendArgs(FrontendOptions &opts, llvm::opt::ArgList &args,
case clang::driver::options::OPT_fget_definition:
opts.programAction_ = GetDefinition;
break;
+ case clang::driver::options::OPT_init_only:
+ opts.programAction_ = InitOnly;
+ break;
// TODO:
- // case calng::driver::options::OPT_emit_llvm:
+ // case clang::driver::options::OPT_emit_llvm:
// case clang::driver::options::OPT_emit_llvm_only:
// case clang::driver::options::OPT_emit_codegen_only:
// case clang::driver::options::OPT_emit_module:
diff --git a/flang/lib/Frontend/FrontendActions.cpp b/flang/lib/Frontend/FrontendActions.cpp
index de8a02753391b..f4ba515440d9b 100644
--- a/flang/lib/Frontend/FrontendActions.cpp
+++ b/flang/lib/Frontend/FrontendActions.cpp
@@ -447,3 +447,11 @@ void EmitObjAction::ExecuteAction() {
clang::DiagnosticsEngine::Error, "code-generation is not available yet");
ci.diagnostics().Report(DiagID);
}
+
+void InitOnlyAction::ExecuteAction() {
+ CompilerInstance &ci = this->instance();
+ unsigned DiagID =
+ ci.diagnostics().getCustomDiagID(clang::DiagnosticsEngine::Warning,
+ "Use `-init-only` for testing purposes only");
+ ci.diagnostics().Report(DiagID);
+}
diff --git a/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp b/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
index 93bbf4fc9a06f..ffc0d75edb008 100644
--- a/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
+++ b/flang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
@@ -73,6 +73,9 @@ static std::unique_ptr<FrontendAction> CreateFrontendBaseAction(
case GetSymbolsSources:
return std::make_unique<GetSymbolsSourcesAction>();
break;
+ case InitOnly:
+ return std::make_unique<InitOnlyAction>();
+ break;
default:
break;
// TODO:
diff --git a/flang/test/Driver/driver-help.f90 b/flang/test/Driver/driver-help.f90
index 696c437a574b8..1a11ba1dc78c5 100644
--- a/flang/test/Driver/driver-help.f90
+++ b/flang/test/Driver/driver-help.f90
@@ -104,6 +104,7 @@
! HELP-FC1-NEXT: -fopenmp Parse OpenMP pragmas and generate parallel code.
! HELP-FC1-NEXT: -fxor-operator Enable .XOR. as a synonym of .NEQV.
! HELP-FC1-NEXT: -help Display available options
+! HELP-FC1-NEXT: -init-only Only execute frontend initialization
! HELP-FC1-NEXT: -I <dir> Add directory to the end of the list of include search paths
! HELP-FC1-NEXT: -module-dir <dir> Put MODULE files in <dir>
! HELP-FC1-NEXT: -module-suffix <suffix> Use <suffix> as the suffix for module files (the default value is `.mod`)
diff --git a/flang/test/Driver/init-only.f90 b/flang/test/Driver/init-only.f90
new file mode 100644
index 0000000000000..ecfa7ba13bba6
--- /dev/null
+++ b/flang/test/Driver/init-only.f90
@@ -0,0 +1,7 @@
+! Verify that -init-only flag generates a diagnostic as expected
+
+! REQUIRES: new-flang-driver
+
+! RUN: %flang_fc1 -init-only 2>&1 | FileCheck %s
+
+! CHECK: warning: Use `-init-only` for testing purposes only
More information about the cfe-commits
mailing list