aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Parser/expr-parsers.cpp
AgeCommit message (Collapse)AuthorFilesLines
2024-12-17[flang] Handle substring in data statement constant (#120130)Peter Klausler1-1/+1
The case of a constant substring wasn't handled in the parser for data statement constants. Fixes https://github.com/llvm/llvm-project/issues/119005.
2024-06-13[flang] Improve error recovery in tricky situation (#95168)Peter Klausler1-1/+2
When the very first statement of the executable part has syntax errors, it's not at all obvious whether the error messages that are reported to the user should be those from its failure to be the last statement of the specification part or its failure to be the first executable statement when both failures are at the same character in the cooked character stream. Fortran makes this problem more exciting by allowing statement function definitions look a lot like several executable statements. The current error recovery scheme for declaration constructs depends on a look-ahead test to see whether the failed construct is actually the first executable statement. This works fine when the first executable statement is not in error, but should also allow for some error cases that begin with the tokens of an executable statement. This can obviously still go wrong for declaration constructs that are unparseable and also have ambiguity in their leading tokens with executable statements, but that seems to be a less likely case. Also improves error recovery for parenthesized items.
2024-06-03[flang] Adjust "doubled operator" expression extension (#93353)Peter Klausler1-9/+15
Most Fortran compilers accept "doubled operators" as a language extension. This is the use of a unary '+' or '-' operator that is not the first unparenthesized operator in an expression, as in 'x*-y'. This compiler has implemented this extension, but in a way that's different from other compilers' behavior. I interpreted the unary '+'/'-' as a unary operator in the sense of C/C++, giving it a higher priority than any binary (dyadic) operator. All other compilers with this extension, however, give a unary '+'/'-' a lower precedence than exponentiation ('**'), a binary operator that C/C++ lacks. And this interpretation makes more sense for Fortran, anyway, where the standard conforming '-x**y' must mean '-(x**y)' already. This patch makes 'x*-y**z' parse as 'x*-(y**z)', not 'x*(-y)**z)', and adds a test to ensure that it does.
2023-11-13[flang] Ensure that portability warnings are conditional (#71857)Peter Klausler1-4/+2
Before emitting a warning message, code should check that the usage in question should be diagnosed by calling ShouldWarn(). A fair number of sites in the code do not, and can emit portability warnings unconditionally, which can confuse a user that hasn't asked for them (-pedantic) and isn't terribly concerned about portability *to* other compilers. Add calls to ShouldWarn() or IsEnabled() around messages that need them, and add -pedantic to tests that now require it to test their portability messages, and add more expected message lines to those tests when -pedantic causes other diagnostics to fire.
2022-10-29[flang] Improve error recovery for bad/missing construct END statementsPeter Klausler1-5/+4
When a multi-statement construct should end with a particular END statement like "END SELECT", and that construct's END statement is missing or unrecognizable, the error recovery productions should not misinterpret a program unit END statement that follows and consume it as a misspelled construct END statement. Doing so leads to cascading errors or a failed parse. Differential Revision: https://reviews.llvm.org/D136896
2022-07-22[flang] Fix parsing and semantics for array element substring%KIND/%LENPeter Klausler1-3/+5
A type-param-inquiry of %KIND or %LEN applies to a designator, and so must also be allowed for a substring. F18 presently (mis)parses instances of a type-param-inquiry as structure component references and then fixes them in expression semantics when types are known and we can distinguish them. But when the base of a type-param-inquiry is a substring of an array element, as in "charArray(i)(j:k)%len", parsing fails. Adjust the grammar to parse these cases, and extend expression semantics to process the new production. Differential Revision: https://reviews.llvm.org/D130375
2022-03-18[flang] Add explanatory messages to grammar for language extensionsPeter Klausler1-4/+15
Extend "extension<LanguageFeature>()" to incorporate an explanatory message better than the current generic "nonstandard usage:". Differential Revision: https://reviews.llvm.org/D122035
2020-09-22[flang][msvc] Add explicit function template argument to applyLamda. NFC.Michael Kruse1-2/+2
Like in D87961, msvc has difficulties deducing the template argument. The error message is: ``` expr-parsers.cpp(383): error C2672: 'applyLambda': no matching overloaded function found ``` Explicitly pass the first template argument to help it. This patch is part of the series to make flang compilable with MS Visual Studio <http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html>. Reviewed By: DavidTruby Differential Revision: https://reviews.llvm.org/D88001
2020-08-22[flang][msvc] Split class declaration and constexpr variable definition. NFC.Michael Kruse1-16/+24
Msvc has trouble defining a struct/class and defining a constexpr symbol in the same declarator. It reports the following error: ``` basic-parsers.h(809): error C2131: expression did not evaluate to a constant basic-parsers.h(809): note: failure was caused by call of undefined function or one not declared 'constexpr' basic-parsers.h(809): note: see usage of 'Fortran::parser::OkParser::OkParser' ``` Fix the msvc compilation by splitting the two definitions into two separate declarators. This patch is part of the series to [[ http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html | make flang compilable with MS Visual Studio ]]. Reviewed By: DavidTruby, klausler Differential Revision: https://reviews.llvm.org/D85937
2020-03-28[flang] Reformat with latest clang-format and .clang-formatTim Keith1-4/+4
Original-commit: flang-compiler/f18@9fe84f45d7fd685051004678d6b5775dcc4c6f8f Reviewed-on: https://github.com/flang-compiler/f18/pull/1094
2020-02-25[flang] [LLVMify F18] Compiler module folders should have capitalised names ↵CarolineConcatto1-0/+516
(flang-compiler/f18#980) This patch renames the modules in f18 to use a capital letter in the module name Signed-off-by: Caroline Concatto <caroline.concatto@arm.com> Original-commit: flang-compiler/f18@d2eb7a1c443d1539ef12b6f027074a0eb15b1ea0 Reviewed-on: https://github.com/flang-compiler/f18/pull/980