[flang-commits] [PATCH] D147391: [flang] Don't allow CALL RANDOM_NUMBER(assumed-size-array)
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Mon Apr 3 09:10:16 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2107fe3821b2: [flang] Don't allow CALL RANDOM_NUMBER(assumed-size-array) (authored by klausler).
Changed prior to commit:
https://reviews.llvm.org/D147391?vs=510269&id=510531#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147391/new/
https://reviews.llvm.org/D147391
Files:
flang/docs/Extensions.md
flang/lib/Evaluate/intrinsics.cpp
flang/test/Semantics/misc-intrinsics.f90
Index: flang/test/Semantics/misc-intrinsics.f90
===================================================================
--- flang/test/Semantics/misc-intrinsics.f90
+++ flang/test/Semantics/misc-intrinsics.f90
@@ -13,6 +13,8 @@
print *, ubound(arg)
!ERROR: The 'source=' argument to the intrinsic function 'shape' may not be assumed-size
print *, shape(arg)
+ !ERROR: The 'harvest=' argument to the intrinsic procedure 'random_number' may not be assumed-size
+ call random_number(arg)
!ERROR: missing mandatory 'dim=' argument
print *, lbound(scalar)
!ERROR: 'array=' argument has unacceptable rank 0
Index: flang/lib/Evaluate/intrinsics.cpp
===================================================================
--- flang/lib/Evaluate/intrinsics.cpp
+++ flang/lib/Evaluate/intrinsics.cpp
@@ -226,7 +226,7 @@
defaultsToSameKind, // for MatchingDefaultKIND
defaultsToSizeKind, // for SizeDefaultKIND
defaultsToDefaultForResult, // for DefaultingKIND
-)
+ notAssumedSize)
struct IntrinsicDummyArgument {
const char *keyword{nullptr};
@@ -813,8 +813,9 @@
Rank::scalar, IntrinsicClass::inquiryFunction},
{"spacing", {{"x", SameReal}}, SameReal},
{"spread",
- {{"source", SameType, Rank::known}, RequiredDIM,
- {"ncopies", AnyInt, Rank::scalar}},
+ {{"source", SameType, Rank::known, Optionality::required,
+ common::Intent::In, {ArgFlag::notAssumedSize}},
+ RequiredDIM, {"ncopies", AnyInt, Rank::scalar}},
SameType, Rank::rankPlus1, IntrinsicClass::transformationalFunction},
{"sqrt", {{"x", SameFloating}}, SameFloating},
{"stopped_images", {OptionalTEAM, SizeDefaultKIND}, KINDInt, Rank::vector,
@@ -1366,7 +1367,7 @@
{}, Rank::elemental, IntrinsicClass::impureSubroutine},
{"random_number",
{{"harvest", AnyReal, Rank::known, Optionality::required,
- common::Intent::Out}},
+ common::Intent::Out, {ArgFlag::notAssumedSize}}},
{}, Rank::elemental, IntrinsicClass::impureSubroutine},
{"random_seed",
{{"size", DefaultInt, Rank::scalar, Optionality::optional,
@@ -1689,6 +1690,16 @@
}
}
}
+ if (d.flags.test(ArgFlag::notAssumedSize)) {
+ if (auto named{ExtractNamedEntity(*arg)}) {
+ if (semantics::IsAssumedSizeArray(named->GetLastSymbol())) {
+ messages.Say(arg->sourceLocation(),
+ "The '%s=' argument to the intrinsic procedure '%s' may not be assumed-size"_err_en_US,
+ d.keyword, name);
+ return std::nullopt;
+ }
+ }
+ }
if (arg->GetAssumedTypeDummy()) {
// TYPE(*) assumed-type dummy argument forwarded to intrinsic
if (d.typePattern.categorySet == AnyType &&
@@ -1973,8 +1984,7 @@
if (semantics::IsAssumedSizeArray(named->GetLastSymbol())) {
if (strcmp(name, "shape") == 0) {
messages.Say(arg->sourceLocation(),
- "The '%s=' argument to the intrinsic function '%s' may not be assumed-size"_err_en_US,
- d.keyword, name);
+ "The 'source=' argument to the intrinsic function 'shape' may not be assumed-size"_err_en_US);
} else {
messages.Say(arg->sourceLocation(),
"A dim= argument is required for '%s' when the array is assumed-size"_err_en_US,
Index: flang/docs/Extensions.md
===================================================================
--- flang/docs/Extensions.md
+++ flang/docs/Extensions.md
@@ -91,6 +91,7 @@
* A module name from a `USE` statement can also be used as a
non-global name in the same scope. This is not conforming,
but it is useful and unambiguous.
+* The argument to `RANDOM_NUMBER` may not be an assumed-size array.
## Extensions, deletions, and legacy features supported by default
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147391.510531.patch
Type: text/x-patch
Size: 3905 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230403/d7c3a590/attachment-0001.bin>
More information about the flang-commits
mailing list