diff options
author | Faris Rehman <faris.rehman@arm.com> | 2021-02-04 21:11:22 +0000 |
---|---|---|
committer | Faris Rehman <faris.rehman@arm.com> | 2021-02-16 11:27:06 +0000 |
commit | 10826ea7b1c12c2afe421448996f98ed66869020 (patch) | |
tree | 64aec5d7168a0e5c7e22b022f8d848e8fffdf448 /flang/lib/Frontend/CompilerInvocation.cpp | |
parent | 787d771dce71af03bc23527ca95fcb858934ae7a (diff) | |
download | llvm-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.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); |