aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorArnamoy Bhattacharyya <arnamoy.bhattacharyya@huawei.com>2021-03-25 13:02:05 -0400
committerArnamoy Bhattacharyya <arnamoy10@gmail.com>2021-03-25 13:03:16 -0400
commit4c7ebf79e923072e8d298134e6ca04618fe4eba9 (patch)
treecc5b9f328bacf38cd32f56b31b9f0b4ce6d03f84 /flang/lib/Frontend/CompilerInvocation.cpp
parent0b20413ef6717d914a8b8a9ece86d8eae27c221f (diff)
downloadllvm-4c7ebf79e923072e8d298134e6ca04618fe4eba9.zip
llvm-4c7ebf79e923072e8d298134e6ca04618fe4eba9.tar.gz
llvm-4c7ebf79e923072e8d298134e6ca04618fe4eba9.tar.bz2
[flang][driver] Add options for -std=f2018
Reviewed By: awarzynski Differential Revision: https://reviews.llvm.org/D97119
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--flang/lib/Frontend/CompilerInvocation.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 69c78bd..6d0003e 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -389,6 +389,26 @@ static void parseDialectArgs(CompilerInvocation &res, llvm::opt::ArgList &args,
res.frontendOpts().features_.Enable(
Fortran::common::LanguageFeature::OpenMP);
}
+
+ //-fpedantic
+ if (args.hasArg(clang::driver::options::OPT_pedantic)) {
+ res.set_EnableConformanceChecks();
+ }
+ // -std=f2018. Current behaviour is same as -fpedantic
+ // TODO: Set proper options when more fortran standards
+ // are supported.
+ if (args.hasArg(clang::driver::options::OPT_std_EQ)) {
+ auto standard = args.getLastArgValue(clang::driver::options::OPT_std_EQ);
+ // We only allow f2018 as the given standard
+ if (standard.equals("f2018")) {
+ res.set_EnableConformanceChecks();
+ } else {
+ const unsigned diagID =
+ diags.getCustomDiagID(clang::DiagnosticsEngine::Error,
+ "Only -std=f2018 is allowed currently.");
+ diags.Report(diagID);
+ }
+ }
return;
}
@@ -539,6 +559,11 @@ void CompilerInvocation::setFortranOpts() {
if (frontendOptions.instrumentedParse_)
fortranOptions.instrumentedParse = true;
+
+ // Set the standard
+ if (enableConformanceChecks()) {
+ fortranOptions.features.WarnOnAllNonstandard();
+ }
}
void CompilerInvocation::setSemanticsOpts(
@@ -549,5 +574,6 @@ void CompilerInvocation::setSemanticsOpts(
defaultKinds(), fortranOptions.features, allCookedSources);
semanticsContext_->set_moduleDirectory(moduleDir())
- .set_searchDirectories(fortranOptions.searchDirectories);
+ .set_searchDirectories(fortranOptions.searchDirectories)
+ .set_warnOnNonstandardUsage(enableConformanceChecks());
}