mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 16:56:35 +00:00
[flang] Accept L0 (#121998)
Accept a zero field width for formatted logical output (L0), interpreting it as if it had been L1.
This commit is contained in:
parent
9462ce885b
commit
eb77f442b3
@ -410,6 +410,7 @@ end
|
||||
* A character length specifier in a component or entity declaration
|
||||
is accepted before an array specification (`ch*3(2)`) as well
|
||||
as afterwards.
|
||||
* A zero field width is allowed for logical formatted output (`L0`).
|
||||
|
||||
### Extensions supported when enabled by options
|
||||
|
||||
|
@ -463,10 +463,13 @@ template <typename CHAR> void FormatValidator<CHAR>::check_r(bool allowed) {
|
||||
template <typename CHAR> bool FormatValidator<CHAR>::check_w() {
|
||||
if (token_.kind() == TokenKind::UnsignedInteger) {
|
||||
wValue_ = integerValue_;
|
||||
if (wValue_ == 0 &&
|
||||
(*argString_ == 'A' || *argString_ == 'L' ||
|
||||
stmt_ == IoStmtKind::Read)) { // C1306, 13.7.2.1p6
|
||||
ReportError("'%s' edit descriptor 'w' value must be positive");
|
||||
if (wValue_ == 0) {
|
||||
if (*argString_ == 'A' || stmt_ == IoStmtKind::Read) {
|
||||
// C1306, 13.7.2.1p6
|
||||
ReportError("'%s' edit descriptor 'w' value must be positive");
|
||||
} else if (*argString_ == 'L') {
|
||||
ReportWarning("'%s' edit descriptor 'w' value should be positive");
|
||||
}
|
||||
}
|
||||
NextToken();
|
||||
return true;
|
||||
|
@ -68,10 +68,10 @@
|
||||
6001 format(((I0, B0)))
|
||||
|
||||
!ERROR: 'A' edit descriptor 'w' value must be positive
|
||||
!ERROR: 'L' edit descriptor 'w' value must be positive
|
||||
!WARNING: 'L' edit descriptor 'w' value should be positive
|
||||
6101 format((A0), ((L0)))
|
||||
|
||||
!ERROR: 'L' edit descriptor 'w' value must be positive
|
||||
!WARNING: 'L' edit descriptor 'w' value should be positive
|
||||
6102 format((3(((L 0 0 0)))))
|
||||
|
||||
7001 format(17G8.1, 17G8.1e3)
|
||||
|
@ -192,8 +192,7 @@
|
||||
!ERROR: 'A' edit descriptor 'w' value must be positive
|
||||
write(*,'(A0)')
|
||||
|
||||
!ERROR: 'L' edit descriptor 'w' value must be positive
|
||||
write(*,'(L0)')
|
||||
write(*,'(L0)') ! warning, not error
|
||||
|
||||
!ERROR: Expected 'G' edit descriptor '.d' value
|
||||
write(*,'(G4)')
|
||||
|
@ -23,7 +23,7 @@ TEST(IOApiTests, LogicalFormatTest) {
|
||||
char buffer[bufferSize];
|
||||
|
||||
// Create format for all types and values to be written
|
||||
const char *format{"(L,L3,I3,L2,L2,I3,L2,A3,L2,L,F4.1,L2)"};
|
||||
const char *format{"(L0,L3,I3,L2,L2,I3,L2,A3,L2,L,F4.1,L2)"};
|
||||
auto cookie{IONAME(BeginInternalFormattedOutput)(
|
||||
buffer, bufferSize, format, std::strlen(format))};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user