Index: flang/runtime/edit-input.cpp =================================================================== --- flang/runtime/edit-input.cpp +++ flang/runtime/edit-input.cpp @@ -83,6 +83,9 @@ return EditBOZInput(io, edit, n, 8, kind << 3); case 'Z': return EditBOZInput(io, edit, n, 16, kind << 3); + case 'A': // legacy extension + return EditDefaultCharacterInput( + io, edit, reinterpret_cast(n), kind); default: io.GetIoErrorHandler().SignalError(IostatErrorInFormat, "Data edit descriptor '%c' may not be used with an INTEGER data item", @@ -323,6 +326,9 @@ case 'Z': return EditBOZInput( io, edit, n, 16, common::BitsForBinaryPrecision(binaryPrecision)); + case 'A': // legacy extension + return EditDefaultCharacterInput( + io, edit, reinterpret_cast(n), KIND); default: io.GetIoErrorHandler().SignalError(IostatErrorInFormat, "Data edit descriptor '%c' may not be used for REAL input", Index: flang/runtime/edit-output.cpp =================================================================== --- flang/runtime/edit-output.cpp +++ flang/runtime/edit-output.cpp @@ -52,6 +52,9 @@ *--p = digit >= 10 ? 'A' + (digit - 10) : '0' + digit; } break; + case 'A': // legacy extension + return EditDefaultCharacterOutput( + io, edit, reinterpret_cast(&n), sizeof n); default: io.GetIoErrorHandler().Crash( "Data edit descriptor '%c' may not be used with an INTEGER data item", @@ -402,6 +405,9 @@ decimal::BinaryFloatingPointNumber{x_}.raw())); case 'G': return Edit(EditForGOutput(edit)); + case 'A': // legacy extension + return EditDefaultCharacterOutput( + io_, edit, reinterpret_cast(&x_), sizeof x_); default: if (edit.IsListDirected()) { return EditListDirectedOutput(edit); Index: flang/unittests/Runtime/RuntimeCrashTest.cpp =================================================================== --- flang/unittests/Runtime/RuntimeCrashTest.cpp +++ flang/unittests/Runtime/RuntimeCrashTest.cpp @@ -57,8 +57,8 @@ static const char *format{"(A4)"}; auto *cookie{IONAME(BeginInternalFormattedOutput)( buffer, bufferSize, format, std::strlen(format))}; - ASSERT_DEATH(IONAME(OutputInteger64)(cookie, 0xfeedface), - "Data edit descriptor 'A' may not be used with an INTEGER data item"); + ASSERT_DEATH(IONAME(OutputLogical)(cookie, true), + "Data edit descriptor 'A' may not be used with a LOGICAL data item"); } TEST(TestIOCrash, InvalidFormatCharacterTest) {