aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorFaris Rehman <faris.rehman@arm.com>2021-02-04 21:11:22 +0000
committerFaris Rehman <faris.rehman@arm.com>2021-02-16 11:27:06 +0000
commit10826ea7b1c12c2afe421448996f98ed66869020 (patch)
tree64aec5d7168a0e5c7e22b022f8d848e8fffdf448 /flang/lib/Frontend/CompilerInvocation.cpp
parent787d771dce71af03bc23527ca95fcb858934ae7a (diff)
downloadllvm-10826ea7b1c12c2afe421448996f98ed66869020.zip
llvm-10826ea7b1c12c2afe421448996f98ed66869020.tar.gz
llvm-10826ea7b1c12c2afe421448996f98ed66869020.tar.bz2
[flang][driver] Add extension options and -finput-charset
Add the following options: * -fimplicit-none and -fno-implicit-none * -fbackslash and -fno-backslash * -flogical-abbreviations and -fno-logical-abbreviations * -fxor-operator and -fno-xor-operator * -falternative-parameter-statement * -finput-charset=<value> Summary of changes: - Enable extensions in CompilerInvocation#ParseFrontendArgs - Add encoding_ to Fortran::frontend::FrontendOptions - Add encoding to Fortran::parser::Options Differential Revision: https://reviews.llvm.org/D96407
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--flang/lib/Frontend/CompilerInvocation.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 8cec2af..cd104d3 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -213,6 +213,49 @@ static InputKind ParseFrontendArgs(FrontendOptions &opts,
if (args.hasArg(clang::driver::options::OPT_fopenmp)) {
opts.features_.Enable(Fortran::common::LanguageFeature::OpenMP);
}
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::driver::options::OPT_fimplicit_none,
+ clang::driver::options::OPT_fno_implicit_none)) {
+ opts.features_.Enable(
+ Fortran::common::LanguageFeature::ImplicitNoneTypeAlways,
+ arg->getOption().matches(clang::driver::options::OPT_fimplicit_none));
+ }
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::driver::options::OPT_fbackslash,
+ clang::driver::options::OPT_fno_backslash)) {
+ opts.features_.Enable(Fortran::common::LanguageFeature::BackslashEscapes,
+ arg->getOption().matches(clang::driver::options::OPT_fbackslash));
+ }
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::driver::options::OPT_flogical_abbreviations,
+ clang::driver::options::OPT_fno_logical_abbreviations)) {
+ opts.features_.Enable(
+ Fortran::common::LanguageFeature::LogicalAbbreviations,
+ arg->getOption().matches(
+ clang::driver::options::OPT_flogical_abbreviations));
+ }
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::driver::options::OPT_fxor_operator,
+ clang::driver::options::OPT_fno_xor_operator)) {
+ opts.features_.Enable(Fortran::common::LanguageFeature::XOROperator,
+ arg->getOption().matches(clang::driver::options::OPT_fxor_operator));
+ }
+ if (args.hasArg(
+ clang::driver::options::OPT_falternative_parameter_statement)) {
+ opts.features_.Enable(Fortran::common::LanguageFeature::OldStyleParameter);
+ }
+ if (const llvm::opt::Arg *arg =
+ args.getLastArg(clang::driver::options::OPT_finput_charset_EQ)) {
+ llvm::StringRef argValue = arg->getValue();
+ if (argValue == "utf-8") {
+ opts.encoding_ = Fortran::parser::Encoding::UTF_8;
+ } else if (argValue == "latin-1") {
+ opts.encoding_ = Fortran::parser::Encoding::LATIN_1;
+ } else {
+ diags.Report(clang::diag::err_drv_invalid_value)
+ << arg->getAsString(args) << argValue;
+ }
+ }
return dashX;
}
@@ -376,6 +419,7 @@ void CompilerInvocation::setFortranOpts() {
fortranOptions.fixedFormColumns = frontendOptions.fixedFormColumns_;
fortranOptions.features = frontendOptions.features_;
+ fortranOptions.encoding = frontendOptions.encoding_;
collectMacroDefinitions(preprocessorOptions, fortranOptions);