[flang] Fix folding of substring
authorpeter klausler <pklausler@nvidia.com>
Tue, 7 May 2019 23:24:50 +0000 (16:24 -0700)
committerpeter klausler <pklausler@nvidia.com>
Wed, 8 May 2019 17:28:57 +0000 (10:28 -0700)
Original-commit: flang-compiler/f18@62dc5e0c93d9f051ef936ee7a281240fe3657b35
Reviewed-on: https://github.com/flang-compiler/f18/pull/449
Tree-same-pre-rewrite: false

flang/lib/evaluate/fold.cc

index 17d7741..c6f8144 100644 (file)
@@ -158,8 +158,13 @@ DataRef FoldOperation(FoldingContext &context, DataRef &&dataRef) {
 }
 
 Substring FoldOperation(FoldingContext &context, Substring &&substring) {
-  std::optional<Expr<SubscriptInteger>> lower{Fold(context, substring.lower())};
-  std::optional<Expr<SubscriptInteger>> upper{Fold(context, substring.upper())};
+  std::optional<Expr<SubscriptInteger>> lower, upper;
+  if (auto *p{substring.lower()}) {
+    lower = Fold(context, std::move(*p));
+  }
+  if (auto *p{substring.upper()}) {
+    upper = Fold(context, std::move(*p));
+  }
   if (const DataRef * dataRef{substring.GetParentIf<DataRef>()}) {
     return Substring{FoldOperation(context, DataRef{*dataRef}),
         std::move(lower), std::move(upper)};