mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-22 15:31:00 +00:00
[flang][driver] Add -fdebug-module-writer option
This commit is contained in:
parent
cec62ae28a
commit
1fd4beecc8
@ -4367,6 +4367,8 @@ def fdebug_measure_parse_tree : Flag<["-"], "fdebug-measure-parse-tree">, Group<
|
||||
HelpText<"Measure the parse tree">;
|
||||
def fdebug_pre_fir_tree : Flag<["-"], "fdebug-pre-fir-tree">, Group<Action_Group>,
|
||||
HelpText<"Dump the pre-FIR tree">;
|
||||
def fdebug_module_writer : Flag<["-"],"fdebug-module-writer">,
|
||||
HelpText<"Enable debug messages while writing module files">;
|
||||
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,8 @@ void Flang::AddPreprocessingOptions(const ArgList &Args,
|
||||
}
|
||||
|
||||
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,
|
||||
|
@ -69,6 +69,8 @@ class CompilerInvocation : public CompilerInvocationBase {
|
||||
// of options.
|
||||
std::string moduleDir_ = ".";
|
||||
|
||||
bool debugModuleDir_ = false;
|
||||
|
||||
// Fortran Dialect options
|
||||
Fortran::common::IntrinsicTypeDefaultKinds defaultKinds_;
|
||||
|
||||
@ -91,6 +93,9 @@ public:
|
||||
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,11 @@ public:
|
||||
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
|
||||
|
@ -306,9 +306,10 @@ static void parsePreprocessorArgs(
|
||||
|
||||
/// 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
|
||||
@ -320,7 +321,12 @@ static void parseSemaArgs(std::string &moduleDir, llvm::opt::ArgList &args,
|
||||
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
|
||||
@ -395,7 +401,7 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &res,
|
||||
// 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);
|
||||
|
||||
@ -511,7 +517,6 @@ void CompilerInvocation::setSemanticsOpts(
|
||||
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);
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ bool PrescanAndSemaAction::BeginSourceFileAction(CompilerInstance &c1) {
|
||||
// Prepare semantics
|
||||
setSemantics(std::make_unique<Fortran::semantics::Semantics>(
|
||||
ci.invocation().semanticsContext(), parseTree,
|
||||
ci.parsing().cooked().AsCharBlock()));
|
||||
ci.parsing().cooked().AsCharBlock(), ci.invocation().debugModuleDir()));
|
||||
auto &semantics = this->semantics();
|
||||
|
||||
// Run semantic checks
|
||||
|
@ -68,6 +68,7 @@
|
||||
! HELP-FC1-NEXT: -fdebug-dump-symbols Dump symbols after the semantic analysis
|
||||
! HELP-FC1-NEXT: -fdebug-measure-parse-tree
|
||||
! HELP-FC1-NEXT: Measure the parse tree
|
||||
! HELP-FC1-NEXT: -fdebug-module-writer Enable debug messages while writing module files
|
||||
! HELP-FC1-NEXT: -fdebug-pre-fir-tree Dump the pre-FIR tree
|
||||
! HELP-FC1-NEXT: -fdebug-unparse-with-symbols
|
||||
! HELP-FC1-NEXT: Unparse and stop.
|
||||
|
@ -1,8 +1,8 @@
|
||||
! RUN: rm -fr %t && mkdir %t && cd %t
|
||||
! RUN: %f18 -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
|
||||
! 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_fc1 -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_CHANGED
|
||||
! RUN: %flang_fc1 -fsyntax-only -fdebug-module-writer %s 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
|
||||
! RUN: %flang_fc1 -fsyntax-only -fdebug-module-writer %p/Inputs/mod-file-unchanged.f90 2>&1 | FileCheck %s --check-prefix CHECK_UNCHANGED
|
||||
! RUN: %flang_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)
|
||||
|
Loading…
Reference in New Issue
Block a user