From c3ce68c1eeda414762f24e94d993e0275250b0ff Mon Sep 17 00:00:00 2001 From: peter klausler Date: Thu, 30 May 2019 16:14:24 -0700 Subject: [PATCH] [flang] Two more fixes made while waiting for code review 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 | 2 +- flang/lib/semantics/expression.cc | 8 ++++---- flang/lib/semantics/type.cc | 3 +++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/flang/lib/evaluate/intrinsics.cc b/flang/lib/evaluate/intrinsics.cc index fc4dce7..81dc5a5 100644 --- a/flang/lib/evaluate/intrinsics.cc +++ b/flang/lib/evaluate/intrinsics.cc @@ -1036,7 +1036,7 @@ std::optional 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; } diff --git a/flang/lib/semantics/expression.cc b/flang/lib/semantics/expression.cc index cebbb06..08ffcac 100644 --- a/flang/lib/semantics/expression.cc +++ b/flang/lib/semantics/expression.cc @@ -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 " + "A 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()}) { // special part-ref: %re, %im, %kind, %len diff --git a/flang/lib/semantics/type.cc b/flang/lib/semantics/type.cc index 09da44c..55c585f 100644 --- a/flang/lib/semantics/type.cc +++ b/flang/lib/semantics/type.cc @@ -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)) -- 2.7.4