[flang-commits] [flang] 36caa8f - [flang] Fix crash on SMP with dummy procedure (#124663)
via flang-commits
flang-commits at lists.llvm.org
Fri Jan 31 10:52:37 PST 2025
Author: Peter Klausler
Date: 2025-01-31T10:52:34-08:00
New Revision: 36caa8f9e26e839daa75ad9f0d1d1934a8a8cd6c
URL: https://github.com/llvm/llvm-project/commit/36caa8f9e26e839daa75ad9f0d1d1934a8a8cd6c
DIFF: https://github.com/llvm/llvm-project/commit/36caa8f9e26e839daa75ad9f0d1d1934a8a8cd6c.diff
LOG: [flang] Fix crash on SMP with dummy procedure (#124663)
When a separate module procedure is defined with MODULE PROCEDURE, the
compiler crashes if there is a dummy procedure in the interface defined
with only a result type. This is due to the type already having been
defined on the ProcEntityDetails symbol as part of earlier wholesale
symbol duplication. Adjust the code to not define the result type of the
ProcEntityDetails if it is already present, but to verify that it is the
same type instead.
Fixes https://github.com/llvm/llvm-project/issues/124487.
Added:
flang/test/Semantics/bug124487.f90
Modified:
flang/lib/Semantics/resolve-names-utils.cpp
Removed:
################################################################################
diff --git a/flang/lib/Semantics/resolve-names-utils.cpp b/flang/lib/Semantics/resolve-names-utils.cpp
index a838d49c06104d4..347f54e0640705d 100644
--- a/flang/lib/Semantics/resolve-names-utils.cpp
+++ b/flang/lib/Semantics/resolve-names-utils.cpp
@@ -762,7 +762,11 @@ void SymbolMapper::MapSymbolExprs(Symbol &symbol) {
proc.set_procInterfaces(
*mappedSymbol, BypassGeneric(mappedSymbol->GetUltimate()));
} else if (const DeclTypeSpec * mappedType{MapType(proc.type())}) {
- proc.set_type(*mappedType);
+ if (proc.type()) {
+ CHECK(*proc.type() == *mappedType);
+ } else {
+ proc.set_type(*mappedType);
+ }
}
if (proc.init()) {
if (const Symbol * mapped{MapSymbol(*proc.init())}) {
diff --git a/flang/test/Semantics/bug124487.f90 b/flang/test/Semantics/bug124487.f90
new file mode 100644
index 000000000000000..b91757c36236702
--- /dev/null
+++ b/flang/test/Semantics/bug124487.f90
@@ -0,0 +1,14 @@
+!RUN: %flang_fc1 -fsyntax-only %s 2>&1 | FileCheck --allow-empty %s
+!CHECK-NOT: error:
+module m
+ interface
+ module subroutine smp(x)
+ character, external :: x
+ end
+ end interface
+end
+submodule (m) sm
+ contains
+ module procedure smp ! crashes here
+ end
+end
More information about the flang-commits
mailing list