[flang] Remove a needless Indirection
authorpeter klausler <pklausler@nvidia.com>
Fri, 5 Apr 2019 18:38:10 +0000 (11:38 -0700)
committerpeter klausler <pklausler@nvidia.com>
Fri, 5 Apr 2019 19:56:13 +0000 (12:56 -0700)
Original-commit: flang-compiler/f18@eb637232b19059563d5540a454d3392002de1ed8
Reviewed-on: https://github.com/flang-compiler/f18/pull/386
Tree-same-pre-rewrite: false

flang/lib/evaluate/expression.h
flang/lib/evaluate/formatting.cc
flang/lib/evaluate/shape.cc
flang/lib/evaluate/shape.h

index 0833d0c..da92e05 100644 (file)
@@ -443,7 +443,7 @@ private:
 template<typename RESULT> struct ArrayConstructorValue {
   using Result = RESULT;
   EVALUATE_UNION_CLASS_BOILERPLATE(ArrayConstructorValue)
-  std::variant<common::CopyableIndirection<Expr<Result>>, ImpliedDo<Result>> u;
+  std::variant<Expr<Result>, ImpliedDo<Result>> u;
 };
 
 template<typename RESULT> class ArrayConstructorValues {
index 2ee4651..6db94b6 100644 (file)
@@ -298,9 +298,8 @@ template<int KIND> const char *LogicalOperation<KIND>::Infix() const {
 }
 
 template<typename T>
-std::ostream &EmitArray(
-    std::ostream &o, const common::CopyableIndirection<Expr<T>> &expr) {
-  return expr.value().AsFortran(o);
+std::ostream &EmitArray(std::ostream &o, const Expr<T> &expr) {
+  return expr.AsFortran(o);
 }
 
 template<typename T>
index 62c8972..eaa251c 100644 (file)
@@ -40,10 +40,9 @@ std::optional<Shape> AsShape(ExtentExpr &&arrayExpr) {
   if (auto *constructor{UnwrapExpr<ArrayConstructor<ExtentType>>(arrayExpr)}) {
     Shape result;
     for (const auto &value : constructor->values()) {
-      if (const auto *expr{
-              std::get_if<common::CopyableIndirection<ExtentExpr>>(&value.u)}) {
-        if (expr->value().Rank() == 0) {
-          result.emplace_back(std::move(expr->value()));
+      if (const auto *expr{std::get_if<ExtentExpr>(&value.u)}) {
+        if (expr->Rank() == 0) {
+          result.emplace_back(std::move(*expr));
           continue;
         }
       }
index df28c32..21df38d 100644 (file)
@@ -117,7 +117,7 @@ template<typename T>
 MaybeExtent GetExtent(const ArrayConstructorValue<T> &value) {
   return std::visit(
       common::visitors{
-          [](const common::CopyableIndirection<Expr<T>> &x) -> MaybeExtent {
+          [](const Expr<T> &x) -> MaybeExtent {
             if (std::optional<Shape> xShape{GetShape(x)}) {
               // Array values in array constructors get linearized.
               return GetSize(std::move(*xShape));