Skip to content

Commit

Permalink
[flang] Preserve useResultSymbolShape_ option when folding array cons…
Browse files Browse the repository at this point in the history
…tructor shape

By default evaluate::GetShape(expr) may return a compiler generated expression
using symbols that are part of function interfaces if there are function
references in "expr".
It is not right to replace an inquiry of "expr" with such compiler
generated expression since the call context would be lost, along with
the meaning of the inquiry expression.
Inquiry folding uses GetContextFreeShape(expr) that sets-up
useResultSymbolShape_ in GetShapeHelper to prevent such bad rewrites. But this did not
work properly with array constructor: GetShapeHelper made a call to
GetShape, ignoring and losing the "useResultSymbolShape_" instruction.

Differential Revision: https://reviews.llvm.org/D144512
  • Loading branch information
jeanPerier committed Feb 24, 2023
1 parent 0630bd6 commit 91bd4c6
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 2 deletions.
5 changes: 3 additions & 2 deletions flang/include/flang/Evaluate/shape.h
Expand Up @@ -168,8 +168,9 @@ class GetShapeHelper
return common::visit(
common::visitors{
[&](const Expr<T> &x) -> MaybeExtentExpr {
if (auto xShape{
context_ ? GetShape(*context_, x) : GetShape(x)}) {
if (auto xShape{!useResultSymbolShape_ ? (*this)(x)
: context_ ? GetShape(*context_, x)
: GetShape(x)}) {
// Array values in array constructors get linearized.
return GetSize(std::move(*xShape));
} else {
Expand Down
11 changes: 11 additions & 0 deletions flang/test/Evaluate/rewrite01.f90
Expand Up @@ -195,4 +195,15 @@ subroutine may_change_p_bounds(p)
end associate
end subroutine

!CHECK-LABEL: array_constructor
subroutine array_constructor()
interface
function return_allocatable()
real, allocatable :: return_allocatable(:)
end function
end interface
!CHECK: PRINT *, size([REAL(4)::return_allocatable(),return_allocatable()])
print *, size([return_allocatable(), return_allocatable()])
end subroutine

end module

0 comments on commit 91bd4c6

Please sign in to comment.