[flang] Resolve LHS in pointer assignment
authorTim Keith <tkeith@nvidia.com>
Tue, 19 Mar 2019 22:30:25 +0000 (15:30 -0700)
committerTim Keith <tkeith@nvidia.com>
Fri, 29 Mar 2019 16:08:49 +0000 (09:08 -0700)
Original-commit: flang-compiler/f18@9a3525275cb8b25c6be80635a40d182b73042ea4
Reviewed-on: https://github.com/flang-compiler/f18/pull/368
Tree-same-pre-rewrite: false

flang/lib/semantics/resolve-names.cc

index 8073bbd..f6e50fd 100644 (file)
@@ -986,7 +986,6 @@ public:
   void Post(const parser::PointerObject &);
   void Post(const parser::AllocateObject &);
   bool Pre(const parser::PointerAssignmentStmt &);
-  void Post(const parser::PointerAssignmentStmt &);
   void Post(const parser::Designator &);
   template<typename T> void Post(const parser::LoopBounds<T> &);
   void Post(const parser::ProcComponentRef &);
@@ -4609,8 +4608,10 @@ void ResolveNamesVisitor::Post(const parser::AllocateObject &x) {
       x.u);
 }
 bool ResolveNamesVisitor::Pre(const parser::PointerAssignmentStmt &x) {
-  // Resolve unrestricted specific intrinsic procedures as in "p => cos".
+  const auto &dataRef{std::get<parser::DataRef>(x.t)};
   const auto &expr{std::get<parser::Expr>(x.t)};
+  ResolveDataRef(dataRef);;
+  // Resolve unrestricted specific intrinsic procedures as in "p => cos".
   if (const auto *designator{
           std::get_if<common::Indirection<parser::Designator>>(&expr.u)}) {
     if (const parser::Name *
@@ -4628,9 +4629,6 @@ bool ResolveNamesVisitor::Pre(const parser::PointerAssignmentStmt &x) {
   }
   return true;
 }
-void ResolveNamesVisitor::Post(const parser::PointerAssignmentStmt &x) {
-  ResolveDataRef(std::get<parser::DataRef>(x.t));
-}
 void ResolveNamesVisitor::Post(const parser::Designator &x) {
   std::visit(
       common::visitors{