Skip to content

Commit 0802596

Browse files
authored
[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 #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 ```
1 parent 5452cbc commit 0802596

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

flang/lib/Semantics/resolve-names.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5648,9 +5648,10 @@ void DeclarationVisitor::Post(const parser::ProcDecl &x) {
56485648
const auto &name{std::get<parser::Name>(x.t)};
56495649
const Symbol *procInterface{nullptr};
56505650
if (interfaceName_) {
5651-
procInterface = interfaceName_->symbol->has<GenericDetails>()
5652-
? interfaceName_->symbol->get<GenericDetails>().specific()
5653-
: interfaceName_->symbol;
5651+
Symbol *ultimate{&interfaceName_->symbol->GetUltimate()};
5652+
procInterface = ultimate->has<GenericDetails>()
5653+
? ultimate->get<GenericDetails>().specific()
5654+
: ultimate;
56545655
}
56555656
auto attrs{HandleSaveName(name.source, GetAttrs())};
56565657
DerivedTypeDetails *dtDetails{nullptr};

0 commit comments

Comments
 (0)