Skip to content

Commit 229dca6

Browse files
authored
[flang] Handle assumed-type dummy arguments in ExtractDataRef (#169080)
Assumed-type dummy argument symbols s are never packaged in DataRefs since the only way they can be used in Fortran is by forwarded as actual arguments to other calls. When an ActualArgument comprising a forwarded assumed-type dummy argument is presented to ExtractDataRef, it fails, because ExtractDataRef for ActualArgument only handles actual argument expressions (including variable references). Add support for actual arguments that are assumed-type dummy arguments. Fixes #168978.
1 parent 76c5b6a commit 229dca6

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

flang/lib/Evaluate/tools.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,11 @@ Expr<SomeType> Parenthesize(Expr<SomeType> &&expr) {
6363

6464
std::optional<DataRef> ExtractDataRef(
6565
const ActualArgument &arg, bool intoSubstring, bool intoComplexPart) {
66-
return ExtractDataRef(arg.UnwrapExpr(), intoSubstring, intoComplexPart);
66+
if (const Symbol *assumedType{arg.GetAssumedTypeDummy()}) {
67+
return DataRef{*assumedType};
68+
} else {
69+
return ExtractDataRef(arg.UnwrapExpr(), intoSubstring, intoComplexPart);
70+
}
6771
}
6872

6973
std::optional<DataRef> ExtractSubstringBase(const Substring &substring) {

flang/test/Evaluate/bug168978.f90

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
!RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s
2+
subroutine sub(dd)
3+
type(*)::dd(..)
4+
!CHECK: PRINT *, size(lbound(dd))
5+
print *, size(lbound(dd)) ! do not fold
6+
end

0 commit comments

Comments
 (0)