[llvm-branch-commits] [flang] release/21.x: [Flang] Fix crash with parametrized derived types usage (#150289) (PR #151937)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Aug 4 03:07:42 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 89e4d9f
Requested by: @<!-- -->tblah
---
Full diff: https://github.com/llvm/llvm-project/pull/151937.diff
2 Files Affected:
- (modified) flang/lib/Lower/Mangler.cpp (+12-2)
- (added) flang/test/Lower/parametrized-derived-types.f90 (+19)
``````````diff
diff --git a/flang/lib/Lower/Mangler.cpp b/flang/lib/Lower/Mangler.cpp
index 1333e3fe349d1..e1ae86a1b5bb2 100644
--- a/flang/lib/Lower/Mangler.cpp
+++ b/flang/lib/Lower/Mangler.cpp
@@ -224,8 +224,18 @@ std::string Fortran::lower::mangle::mangleName(
assert(paramExpr && "derived type kind param not explicit");
std::optional<int64_t> init =
Fortran::evaluate::ToInt64(paramValue->GetExplicit());
- assert(init && "derived type kind param is not constant");
- kinds.emplace_back(*init);
+ // TODO: put the assertion check back when parametrized derived types
+ // are supported:
+ // assert(init && "derived type kind param is not constant");
+ //
+ // The init parameter above will require a FoldingContext for proper
+ // expression evaluation to an integer constant, otherwise the
+ // compiler may crash here (see example in issue #127424).
+ if (!init) {
+ TODO_NOLOC("parameterized derived types");
+ } else {
+ kinds.emplace_back(*init);
+ }
}
}
return fir::NameUniquer::doType(modules, procs, blockId, symbolName, kinds);
diff --git a/flang/test/Lower/parametrized-derived-types.f90 b/flang/test/Lower/parametrized-derived-types.f90
new file mode 100644
index 0000000000000..97a40c9169d2b
--- /dev/null
+++ b/flang/test/Lower/parametrized-derived-types.f90
@@ -0,0 +1,19 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+! XFAIL: *
+program main
+ TYPE ty(k1,k2)
+ INTEGER ,KIND::k1,k2=5
+ INTEGER::arr(k1:k2)=10
+ CHARACTER(LEN=k2)::CHARACTER
+ END TYPE ty
+ TYPE,EXTENDS(ty)::ty1(k3)
+ INTEGER,KIND ::k3=4
+ TYPE(ty(2,k3+1))::cmp_ty = ty(2,k3+1)(55,'HI')
+ END TYPE ty1
+ TYPE ty2(l1, l2)
+ !ERROR: not yet implemented: parameterized derived types
+ INTEGER,LEN ::l1,l2
+ TYPE(ty1(2,5)), ALLOCATABLE::ty1_cmp(:)
+ END TYPE ty2
+ TYPE(ty2(4,8)) ::ty2_obj
+end program main
``````````
</details>
https://github.com/llvm/llvm-project/pull/151937
More information about the llvm-branch-commits
mailing list