From: Peter Klausler Date: Thu, 30 Mar 2023 19:43:47 +0000 (-0700) Subject: [flang] NORM2(DIM=) argument can't be dynamically optional X-Git-Tag: upstream/17.0.6~12843 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e28fe62c75658561569603136dff3c271d95a6e;p=platform%2Fupstream%2Fllvm.git [flang] NORM2(DIM=) argument can't be dynamically optional The intrinsic function table entry for NORM2 treats its DIM= argument as if it can be dynamically optional; this is wrong, and it should be treated in the same way as DIM= is for other transformational intrinsic functions like SUM. Differential Revision: https://reviews.llvm.org/D147390 --- diff --git a/flang/lib/Evaluate/intrinsics.cpp b/flang/lib/Evaluate/intrinsics.cpp index e82b62e..41e1e5c 100644 --- a/flang/lib/Evaluate/intrinsics.cpp +++ b/flang/lib/Evaluate/intrinsics.cpp @@ -685,8 +685,10 @@ static const IntrinsicInterface genericIntrinsicFunction[]{ common::Intent::In, {ArgFlag::canBeNull}}}, SameCharNoLen, Rank::scalar, IntrinsicClass::inquiryFunction}, {"nint", {{"a", AnyReal}, DefaultingKIND}, KINDInt}, - {"norm2", {{"x", SameReal, Rank::array}, OptionalDIM}, SameReal, + {"norm2", {{"x", SameReal, Rank::array}, RequiredDIM}, SameReal, Rank::dimReduced, IntrinsicClass::transformationalFunction}, + {"norm2", {{"x", SameReal, Rank::array}, MissingDIM}, SameReal, + Rank::scalar, IntrinsicClass::transformationalFunction}, {"not", {{"i", SameInt}}, SameInt}, // NULL() is a special case handled in Probe() below {"num_images", {}, DefaultInt, Rank::scalar, diff --git a/flang/test/Semantics/dim01.f90 b/flang/test/Semantics/dim01.f90 index 48c0291..2d56eb5 100644 --- a/flang/test/Semantics/dim01.f90 +++ b/flang/test/Semantics/dim01.f90 @@ -18,6 +18,8 @@ module m integer, optional, intent(in) :: d !PORTABILITY: The actual argument for DIM= is optional, pointer, or allocatable, and it is assumed to be present and equal to 1 at execution time f1 = sum(a,dim=d) + !PORTABILITY: The actual argument for DIM= is optional, pointer, or allocatable, and it is assumed to be present and equal to 1 at execution time + f1 = norm2(a,dim=d) end function function f2(a,d) real, intent(in) :: a(:) @@ -49,6 +51,8 @@ module m real, allocatable :: f11(:) !WARNING: The actual argument for DIM= is optional, pointer, or allocatable, and may not be absent during execution; parenthesize to silence this warning f11 = sum(a,dim=d) + !WARNING: The actual argument for DIM= is optional, pointer, or allocatable, and may not be absent during execution; parenthesize to silence this warning + f11 = norm2(a,dim=d) end function function f12(a,d) real, intent(in) :: a(:,:) @@ -65,4 +69,3 @@ module m f13 = sum(a,dim=d) end function end module -