[flang-commits] [flang] 0802596 - [Flang] Update the fix of PR 80738 to cover generic interface inside modules (#81087)
via flang-commits
flang-commits at lists.llvm.org
Thu Feb 8 07:38:55 PST 2024
Author: Daniel Chen
Date: 2024-02-08T10:38:50-05:00
New Revision: 0802596df3d1ffd15f6b828a0f5c1e5b687a730f
URL: https://github.com/llvm/llvm-project/commit/0802596df3d1ffd15f6b828a0f5c1e5b687a730f
DIFF: https://github.com/llvm/llvm-project/commit/0802596df3d1ffd15f6b828a0f5c1e5b687a730f.diff
LOG: [Flang] Update the fix of PR 80738 to cover generic interface inside modules (#81087)
The following test cases crashes. The problem is that the fix for PR
https://github.com/llvm/llvm-project/pull/80738 is not quite complete.
It should `GetUltimate()` of the `interface_` before check if it is
generic.
```
MODULE M
CONTAINS
FUNCTION Int(Arg)
INTEGER :: Int, Arg
Int = Arg
END FUNCTION
FUNCTION Int8(Arg)
INTEGER(8) :: Int8, Arg
Int8 = 8_8
END FUNCTION
END MODULE
MODULE M1
USE M
INTERFACE Int8
MODULE PROCEDURE Int
MODULE PROCEDURE Int8
END INTERFACE
END MODULE
PROGRAM PtrAssignGen
USE M
USE M1
IMPLICIT NONE
INTERFACE Int
MODULE PROCEDURE Int
MODULE PROCEDURE Int8
END INTERFACE
PROCEDURE(Int8), POINTER :: PtrInt8
PtrInt8 => Int8
IF ( PtrInt8(100_8) .NE. 8_8 ) ERROR STOP 12
END
```
Added:
Modified:
flang/lib/Semantics/resolve-names.cpp
Removed:
################################################################################
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 36deab969456d..2a42c79161468 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -5648,9 +5648,10 @@ void DeclarationVisitor::Post(const parser::ProcDecl &x) {
const auto &name{std::get<parser::Name>(x.t)};
const Symbol *procInterface{nullptr};
if (interfaceName_) {
- procInterface = interfaceName_->symbol->has<GenericDetails>()
- ? interfaceName_->symbol->get<GenericDetails>().specific()
- : interfaceName_->symbol;
+ Symbol *ultimate{&interfaceName_->symbol->GetUltimate()};
+ procInterface = ultimate->has<GenericDetails>()
+ ? ultimate->get<GenericDetails>().specific()
+ : ultimate;
}
auto attrs{HandleSaveName(name.source, GetAttrs())};
DerivedTypeDetails *dtDetails{nullptr};
More information about the flang-commits
mailing list