diff --git a/flang/lib/Evaluate/tools.cpp b/flang/lib/Evaluate/tools.cpp index 117b2249a9179..a0035ae330e35 100644 --- a/flang/lib/Evaluate/tools.cpp +++ b/flang/lib/Evaluate/tools.cpp @@ -63,7 +63,11 @@ Expr Parenthesize(Expr &&expr) { std::optional ExtractDataRef( const ActualArgument &arg, bool intoSubstring, bool intoComplexPart) { - return ExtractDataRef(arg.UnwrapExpr(), intoSubstring, intoComplexPart); + if (const Symbol *assumedType{arg.GetAssumedTypeDummy()}) { + return DataRef{*assumedType}; + } else { + return ExtractDataRef(arg.UnwrapExpr(), intoSubstring, intoComplexPart); + } } std::optional ExtractSubstringBase(const Substring &substring) { diff --git a/flang/test/Evaluate/bug168978.f90 b/flang/test/Evaluate/bug168978.f90 new file mode 100644 index 0000000000000..ffe77500aeba5 --- /dev/null +++ b/flang/test/Evaluate/bug168978.f90 @@ -0,0 +1,6 @@ +!RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s +subroutine sub(dd) + type(*)::dd(..) + !CHECK: PRINT *, size(lbound(dd)) + print *, size(lbound(dd)) ! do not fold +end