From ad4adc2d28b5e4a604b493aa5d576e1e1f5dd8ec Mon Sep 17 00:00:00 2001 From: peter klausler Date: Thu, 15 Mar 2018 17:09:27 -0700 Subject: [PATCH] [flang] More f90_correct work. Original-commit: flang-compiler/f18@442771db3c24ed3b5482a0bfb016ea2ac0bb9556 Reviewed-on: https://github.com/flang-compiler/f18/pull/26 Tree-same-pre-rewrite: false --- flang/lib/parser/unparse.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/flang/lib/parser/unparse.cc b/flang/lib/parser/unparse.cc index e5fb49ca653c..9ad19c9249c7 100644 --- a/flang/lib/parser/unparse.cc +++ b/flang/lib/parser/unparse.cc @@ -1494,6 +1494,14 @@ public: Word("REWIND ("), Walk(x.v, ", "), Put(')'); return false; } + bool Pre(const PositionOrFlushSpec &x) { // R1227 & R1229 + std::visit(visitors{[&](const FileUnitNumber &) { Word("UNIT="); }, + [&](const MsgVariable &) { Word("IOMSG="); }, + [&](const StatVariable &) { Word("IOSTAT="); }, + [&](const ErrLabel &) { Word("ERR="); }}, + x.u); + return true; + } bool Pre(const FlushStmt &x) { // R1228 Word("FLUSH ("), Walk(x.v, ", "), Put(')'); return false; @@ -1782,8 +1790,16 @@ public: return false; } bool Pre(const CallStmt &x) { // R1521 - Word("CALL "), Walk(std::get(x.v.t)); - Walk("(", std::get>(x.v.t), ", ", ")"); + const auto &pd = std::get(x.v.t); + const auto &args = std::get>(x.v.t); + Word("CALL "), Walk(pd); + if (args.empty()) { + if (std::holds_alternative(pd.u)) { + Put("()"); // pgf90 crashes on CALL to tbp without parentheses + } + } else { + Walk("(", args, ", ", ")"); + } return false; } bool Pre(const ActualArgSpec &x) { // R1523