diff --git a/flang/runtime/edit-input.cpp b/flang/runtime/edit-input.cpp --- a/flang/runtime/edit-input.cpp +++ b/flang/runtime/edit-input.cpp @@ -177,8 +177,8 @@ continue; } } - if (ch == '0' && got == start) { - // omit leading zeroes + if (ch == '0' && got == start && !decimalPoint) { + // omit leading zeroes before the decimal } else if (ch >= '0' && ch <= '9') { if (got < bufferSize) { buffer[got++] = ch; diff --git a/flang/unittests/Runtime/hello.cpp b/flang/unittests/Runtime/hello.cpp --- a/flang/unittests/Runtime/hello.cpp +++ b/flang/unittests/Runtime/hello.cpp @@ -420,11 +420,16 @@ realInTest("(F18.0)", " 0", 0x0); realInTest("(F18.0)", " ", 0x0); realInTest("(F18.0)", " -0", 0x8000000000000000); + realInTest("(F18.0)", " 01", 0x3ff0000000000000); realInTest("(F18.0)", " 1", 0x3ff0000000000000); realInTest("(F18.0)", " 125.", 0x405f400000000000); realInTest("(F18.0)", " 12.5", 0x4029000000000000); realInTest("(F18.0)", " 1.25", 0x3ff4000000000000); + realInTest("(F18.0)", " 01.25", 0x3ff4000000000000); realInTest("(F18.0)", " .125", 0x3fc0000000000000); + realInTest("(F18.0)", " 0.125", 0x3fc0000000000000); + realInTest("(F18.0)", " .0625", 0x3fb0000000000000); + realInTest("(F18.0)", " 0.0625", 0x3fb0000000000000); realInTest("(F18.0)", " 125", 0x405f400000000000); realInTest("(F18.1)", " 125", 0x4029000000000000); realInTest("(F18.2)", " 125", 0x3ff4000000000000);