diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md index 67a087d5daaeb..02276fbe45e52 100644 --- a/flang/docs/Extensions.md +++ b/flang/docs/Extensions.md @@ -122,6 +122,7 @@ end files are easier to write and use. * $ and \ edit descriptors are supported in FORMAT to suppress newline output on user prompts. +* Tabs in format strings (not `FORMAT` statements) are allowed on output. * REAL and DOUBLE PRECISION variable and bounds in DO loops * Integer literals without explicit kind specifiers that are out of range for the default kind of INTEGER are assumed to have the least larger kind diff --git a/flang/runtime/format-implementation.h b/flang/runtime/format-implementation.h index b0ebcbc607fab..a32bb8e928fd7 100644 --- a/flang/runtime/format-implementation.h +++ b/flang/runtime/format-implementation.h @@ -359,6 +359,10 @@ int FormatControl::CueUpNextDataEdit(Context &context, bool stop) { context.AdvanceRecord(repeat && *repeat > 0 ? *repeat : 1); } else if (ch == '$' || ch == '\\') { context.mutableModes().nonAdvancing = true; + } else if (ch == '\t' || ch == '\v') { + // Tabs (extension) + // TODO: any other raw characters? + context.Emit(format_ + offset_ - 1, 1); } else { context.SignalError(IostatErrorInFormat, "Invalid character '%c' in FORMAT", static_cast(ch));