arnamoy10 updated this revision to Diff 324606.
arnamoy10 added a comment.
Added some setters to work with.
Modified the test case to include `flang-new -fc1` as well.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D96875/new/
https://reviews.llvm.org/D96875
Files:
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Flang.cpp
flang/include/flang/Frontend/CompilerInvocation.h
flang/lib/Frontend/CompilerInvocation.cpp
flang/lib/Frontend/FrontendActions.cpp
flang/test/Semantics/mod-file-rewriter.f90
Index: flang/test/Semantics/mod-file-rewriter.f90
===================================================================
--- flang/test/Semantics/mod-file-rewriter.f90
+++ flang/test/Semantics/mod-file-rewriter.f90
@@ -3,6 +3,14 @@
! RUN: %f18 -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
! RUN: %f18 -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-unchanged.f90 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
! RUN: %f18 -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-changed.f90 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
+! RUN: %flang-new -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
+! RUN: %flang-new -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
+! RUN: %flang-new -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-unchanged.f90 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
+! RUN: %flang-new -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-changed.f90 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
+! RUN: %flang-new -fc1 -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
+! RUN: %flang-new -fc1 -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
+! RUN: %flang-new -fc1 -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-unchanged.f90 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
+! RUN: %flang-new -fc1 -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-changed.f90 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
module m
real :: x(10)
Index: flang/lib/Frontend/FrontendActions.cpp
===================================================================
--- flang/lib/Frontend/FrontendActions.cpp
+++ flang/lib/Frontend/FrontendActions.cpp
@@ -134,7 +134,7 @@
// Prepare semantics
Fortran::semantics::Semantics semantics{ci.invocation().semanticsContext(),
- parseTree, ci.parsing().cooked().AsCharBlock()};
+ parseTree, ci.parsing().cooked().AsCharBlock(),ci.invocation().debugModuleDir()};
// Run semantic checks
semantics.Perform();
Index: flang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- flang/lib/Frontend/CompilerInvocation.cpp
+++ flang/lib/Frontend/CompilerInvocation.cpp
@@ -227,9 +227,10 @@
/// Parses all semantic related arguments and populates the variables
/// options accordingly.
-static void parseSemaArgs(std::string &moduleDir, llvm::opt::ArgList &args,
+static void parseSemaArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
clang::DiagnosticsEngine &diags) {
+ // -J/module-dir option
auto moduleDirList =
args.getAllArgValues(clang::driver::options::OPT_module_dir);
// User can only specify -J/-module-dir once
@@ -241,7 +242,12 @@
diags.Report(diagID);
}
if (moduleDirList.size() == 1)
- moduleDir = moduleDirList[0];
+ res.SetModuleDir(moduleDirList[0]);
+
+ // -fdebug-module-writer option
+ if (args.hasArg(clang::driver::options::OPT_fdebug_module_writer)) {
+ res.SetDebugModuleDir(true);
+ }
}
/// Parses all Dialect related arguments and populates the variables
@@ -316,7 +322,7 @@
// Parse the preprocessor args
parsePreprocessorArgs(res.preprocessorOpts(), args);
// Parse semantic args
- parseSemaArgs(res.moduleDir(), args, diags);
+ parseSemaArgs(res, args, diags);
// Parse dialect arguments
parseDialectArgs(res, args, diags);
@@ -429,7 +435,6 @@
semanticsContext_ = std::make_unique<semantics::SemanticsContext>(
defaultKinds(), fortranOptions.features, allCookedSources);
- auto &moduleDirJ = moduleDir();
- semanticsContext_->set_moduleDirectory(moduleDirJ)
+ semanticsContext_->set_moduleDirectory(moduleDir())
.set_searchDirectories(fortranOptions.searchDirectories);
}
Index: flang/include/flang/Frontend/CompilerInvocation.h
===================================================================
--- flang/include/flang/Frontend/CompilerInvocation.h
+++ flang/include/flang/Frontend/CompilerInvocation.h
@@ -69,6 +69,8 @@
// of options.
std::string moduleDir_ = ".";
+ bool debugModuleDir_ = false;
+
// Fortran Dialect options
Fortran::common::IntrinsicTypeDefaultKinds defaultKinds_;
@@ -91,6 +93,9 @@
std::string &moduleDir() { return moduleDir_; }
const std::string &moduleDir() const { return moduleDir_; }
+ bool &debugModuleDir() { return debugModuleDir_; }
+ const bool &debugModuleDir() const { return debugModuleDir_; }
+
Fortran::common::IntrinsicTypeDefaultKinds &defaultKinds() {
return defaultKinds_;
}
@@ -106,6 +111,15 @@
llvm::ArrayRef<const char *> commandLineArgs,
clang::DiagnosticsEngine &diags);
+ /// Useful setters
+ void SetModuleDir(std::string &moduleDir) {
+ moduleDir_ = moduleDir;
+ }
+
+ void SetDebugModuleDir(bool flag) {
+ debugModuleDir_ = flag;
+ }
+
/// Set the Fortran options to predifined defaults. These defaults are
/// consistend with f18/f18.cpp.
// TODO: We should map frontendOpts_ to parserOpts_ instead. For that, we
Index: clang/lib/Driver/ToolChains/Flang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Flang.cpp
+++ clang/lib/Driver/ToolChains/Flang.cpp
@@ -35,7 +35,7 @@
}
void Flang::AddOtherOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
- Args.AddAllArgs(CmdArgs, options::OPT_module_dir);
+ Args.AddAllArgs(CmdArgs, {options::OPT_module_dir,options::OPT_fdebug_module_writer});
}
void Flang::ConstructJob(Compilation &C, const JobAction &JA,
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -4229,6 +4229,8 @@
HelpText<"Set the default real type to an 8 byte wide type.">;
def flarge_sizes : Flag<["-"],"flarge-sizes">, Group<f_Group>,
HelpText<"Use INTEGER(KIND=8) for the result type in size-related intrinsics.">;
+def fdebug_module_writer : Flag<["-"],"fdebug-module-writer">, Group<f_Group>,
+ HelpText<"Enables showing debug messages while writing module files.">;
}
//===----------------------------------------------------------------------===//
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits