diff options
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | flang/lib/Frontend/CompilerInvocation.cpp | 44 |
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); |