forked from OSchip/llvm-project
[flang] Runtime: Reset list-directed input state for each NAMELIST item
NAMELIST I/O formatting uses the runtime infrastructure for list-directed I/O. List-directed input processing has same state that requires reinitialization for each successive NAMELIST input item. This patch fixes bugs with "null" items and repetition counts on NAMELIST input items after the first in the group. Differential Revision: https://reviews.llvm.org/D106694
This commit is contained in:
parent
80ac12b70b
commit
e093cbb7ae
|
@ -217,6 +217,16 @@ public:
|
|||
std::optional<DataEdit> GetNextDataEdit(
|
||||
IoStatementState &, int maxRepeat = 1);
|
||||
|
||||
// Each NAMELIST input item is a distinct "list-directed"
|
||||
// input statement. This member function resets this state
|
||||
// so that repetition and null values work correctly for each
|
||||
// successive NAMELIST input item.
|
||||
void ResetForNextNamelistItem() {
|
||||
remaining_ = 0;
|
||||
isFirstItem_ = true;
|
||||
realPart_ = imaginaryPart_ = false;
|
||||
}
|
||||
|
||||
private:
|
||||
int remaining_{0}; // for "r*" repetition
|
||||
std::int64_t initialRecordNumber_;
|
||||
|
|
|
@ -260,6 +260,8 @@ bool IONAME(InputNamelist)(Cookie cookie, const NamelistGroup &group) {
|
|||
ConnectionState &connection{io.GetConnectionState()};
|
||||
connection.modes.inNamelist = true;
|
||||
IoErrorHandler &handler{io.GetIoErrorHandler()};
|
||||
auto *listInput{io.get_if<ListDirectedStatementState<Direction::Input>>()};
|
||||
RUNTIME_CHECK(handler, listInput != nullptr);
|
||||
// Check the group header
|
||||
std::optional<char32_t> next{io.GetNextNonBlank()};
|
||||
if (!next || *next != '&') {
|
||||
|
@ -331,6 +333,7 @@ bool IONAME(InputNamelist)(Cookie cookie, const NamelistGroup &group) {
|
|||
}
|
||||
io.HandleRelativePosition(1);
|
||||
// Read the values into the descriptor
|
||||
listInput->ResetForNextNamelistItem();
|
||||
if (!descr::DescriptorIO<Direction::Input>(io, *useDescriptor)) {
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue