From: peter klausler Date: Tue, 4 Jun 2019 17:50:34 +0000 (-0700) Subject: [flang] Fix arg specs for CMPLX intrinsic X-Git-Tag: llvmorg-12-init~9537^2~1173 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5774f0ab301109584956405a3cbaf666f1483bcb;p=platform%2Fupstream%2Fllvm.git [flang] Fix arg specs for CMPLX intrinsic Original-commit: flang-compiler/f18@3586b8a6469c91092f68beb76b77501c3920bb4b Reviewed-on: https://github.com/flang-compiler/f18/pull/477 Tree-same-pre-rewrite: false --- diff --git a/flang/lib/evaluate/intrinsics.cc b/flang/lib/evaluate/intrinsics.cc index 06ac427..af76032 100644 --- a/flang/lib/evaluate/intrinsics.cc +++ b/flang/lib/evaluate/intrinsics.cc @@ -289,8 +289,8 @@ static const IntrinsicInterface genericIntrinsicFunction[]{ {"char", {{"i", AnyInt}, DefaultingKIND}, KINDChar}, {"cmplx", {{"x", AnyComplex}, DefaultingKIND}, KINDComplex}, {"cmplx", - {{"x", SameIntOrReal, Rank::elementalOrBOZ}, - {"y", SameIntOrReal, Rank::elementalOrBOZ, Optionality::optional}, + {{"x", AnyIntOrReal, Rank::elementalOrBOZ}, + {"y", AnyIntOrReal, Rank::elementalOrBOZ, Optionality::optional}, DefaultingKIND}, KINDComplex}, {"command_argument_count", {}, DefaultInt, Rank::scalar}, @@ -411,7 +411,7 @@ static const IntrinsicInterface genericIntrinsicFunction[]{ KINDInt, Rank::vector}, {"leadz", {{"i", AnyInt}}, DefaultInt}, {"len", {{"string", AnyChar, Rank::anyOrAssumedRank}, SubscriptDefaultKIND}, - KINDInt}, + KINDInt, Rank::scalar}, {"len_trim", {{"string", AnyChar}, SubscriptDefaultKIND}, KINDInt}, {"lge", {{"string_a", SameChar}, {"string_b", SameChar}}, DefaultLogical}, {"lgt", {{"string_a", SameChar}, {"string_b", SameChar}}, DefaultLogical}, @@ -734,7 +734,8 @@ static const SpecificIntrinsicInterface specificIntrinsicFunction[]{ {{"index", {{"string", DefaultChar}, {"substring", DefaultChar}}, DefaultInt}}, {{"isign", {{"a", DefaultInt}, {"b", DefaultInt}}, DefaultInt}, "sign"}, - {{"len", {{"string", DefaultChar, Rank::anyOrAssumedRank}}, DefaultInt}}, + {{"len", {{"string", DefaultChar, Rank::anyOrAssumedRank}}, DefaultInt, + Rank::scalar}}, {{"log", {{"x", DefaultReal}}, DefaultReal}}, {{"log10", {{"x", DefaultReal}}, DefaultReal}}, {{"max0", @@ -966,7 +967,7 @@ std::optional IntrinsicInterface::Match( } if (!argOk) { messages.Say( - "actual argument for '%s=' has bad type or kind '%s'"_err_en_US, + "Actual argument for '%s=' has bad type or kind '%s'"_err_en_US, d.keyword, type->AsFortran()); return std::nullopt; } @@ -981,7 +982,7 @@ std::optional IntrinsicInterface::Match( const IntrinsicDummyArgument &d{dummy[std::min(j, dummyArgPatterns - 1)]}; if (const ActualArgument * arg{actualForDummy[j]}) { if (IsAssumedRank(*arg) && d.rank != Rank::anyOrAssumedRank) { - messages.Say("assumed-rank array cannot be forwarded to " + messages.Say("Assumed-rank array cannot be forwarded to " "'%s=' argument"_err_en_US, d.keyword); return std::nullopt; @@ -1403,6 +1404,7 @@ std::optional IntrinsicProcTable::Implementation::Probe( std::string name{call.name.ToString()}; auto specificRange{specificFuncs_.equal_range(name)}; for (auto iter{specificRange.first}; iter != specificRange.second; ++iter) { + CHECK(localBuffer.empty()); if (auto specificCall{ iter->second->Match(call, defaults_, arguments, localContext)}) { if (const char *genericName{iter->second->generic}) { @@ -1422,6 +1424,7 @@ std::optional IntrinsicProcTable::Implementation::Probe( parser::Messages genericBuffer; auto genericRange{genericFuncs_.equal_range(name)}; for (auto iter{genericRange.first}; iter != genericRange.second; ++iter) { + CHECK(localBuffer.empty()); if (auto specificCall{ iter->second->Match(call, defaults_, arguments, localContext)}) { // Apply any semantic checks peculiar to the intrinsic