diff --git a/flang/runtime/edit-output.cpp b/flang/runtime/edit-output.cpp --- a/flang/runtime/edit-output.cpp +++ b/flang/runtime/edit-output.cpp @@ -330,17 +330,17 @@ template DataEdit RealOutputEditing::EditForGOutput(DataEdit edit) { edit.descriptor = 'E'; - if (!edit.width.has_value() || - (*edit.width > 0 && edit.digits.value_or(-1) == 0)) { + int significantDigits{ + edit.digits.value_or(BinaryFloatingPoint::decimalPrecision)}; // 'd' + if (!edit.width.has_value() || (*edit.width > 0 && significantDigits == 0)) { return edit; // Gw.0 -> Ew.0 for w > 0 } - decimal::ConversionToDecimalResult converted{Convert(1, edit)}; + decimal::ConversionToDecimalResult converted{ + Convert(significantDigits, edit)}; if (IsInfOrNaN(converted)) { return edit; } int expo{IsZero() ? 1 : converted.decimalExponent}; // 's' - int significantDigits{ - edit.digits.value_or(BinaryFloatingPoint::decimalPrecision)}; // 'd' if (expo < 0 || expo > significantDigits) { return edit; // Ew.d } diff --git a/flang/runtime/format-implementation.h b/flang/runtime/format-implementation.h --- a/flang/runtime/format-implementation.h +++ b/flang/runtime/format-implementation.h @@ -97,7 +97,7 @@ } int result{0}; bool negate{ch == '-'}; - if (negate) { + if (negate || ch == '+') { firstCh = '\0'; ch = PeekNext(); }