[flang] Two more fixes made while waiting for code review
authorpeter klausler <pklausler@nvidia.com>
Thu, 30 May 2019 23:14:24 +0000 (16:14 -0700)
committerpeter klausler <pklausler@nvidia.com>
Thu, 30 May 2019 23:14:24 +0000 (16:14 -0700)
Original-commit: flang-compiler/f18@6dc58004abb025c653896957bdc774ed6e954965
Reviewed-on: https://github.com/flang-compiler/f18/pull/472
Tree-same-pre-rewrite: false

flang/lib/evaluate/intrinsics.cc
flang/lib/semantics/expression.cc
flang/lib/semantics/type.cc

index fc4dce7..81dc5a5 100644 (file)
@@ -1036,7 +1036,7 @@ std::optional<SpecificCall> IntrinsicInterface::Match(
       case Rank::dimRemoved:
         CHECK(arrayArg != nullptr);
         if (hasDimArg) {
-          argOk = rank + 1 == arrayArg->Rank();
+          argOk = rank == 0 || rank + 1 == arrayArg->Rank();
         } else {
           argOk = rank == 0;
         }
index cebbb06..08ffcac 100644 (file)
@@ -884,10 +884,10 @@ MaybeExpr ExpressionAnalyzer::Analyze(const parser::StructureComponent &sc) {
                     IgnoreAnySubscripts(std::move(*designator)), *sym}));
           }
         }
-        Say(name, "type parameter is not INTEGER"_err_en_US);
+        Say(name, "Type parameter is not INTEGER"_err_en_US);
       } else {
         Say(name,
-            "type parameter inquiry must be applied to "
+            "type parameter inquiry must be applied to "
             "a designator"_err_en_US);
       }
     } else if (dtSpec == nullptr || dtSpec->scope() == nullptr) {
@@ -899,12 +899,12 @@ MaybeExpr ExpressionAnalyzer::Analyze(const parser::StructureComponent &sc) {
               CreateComponent(std::move(*dataRef), *sym, *dtSpec->scope())}) {
         return Designate(DataRef{std::move(*component)});
       } else {
-        Say(name, "component is not in scope of derived TYPE(%s)"_err_en_US,
+        Say(name, "Component is not in scope of derived TYPE(%s)"_err_en_US,
             dtSpec->typeSymbol().name());
       }
     } else {
       Say(name,
-          "base of component reference must be a data reference"_err_en_US);
+          "Base of component reference must be a data reference"_err_en_US);
     }
   } else if (auto *details{sym->detailsIf<semantics::MiscDetails>()}) {
     // special part-ref: %re, %im, %kind, %len
index 09da44c..55c585f 100644 (file)
@@ -155,6 +155,9 @@ Scope &DerivedTypeSpec::Instantiate(
             }
           }
           TypeParamDetails instanceDetails{details.attr()};
+          if (const DeclTypeSpec *type{details.type()}) {
+            instanceDetails.set_type(*type);
+          }
           instanceDetails.set_init(std::move(*expr));
           Symbol *parameter{
               newScope.try_emplace(name, std::move(instanceDetails))