Skip to content

Commit

Permalink
[flang] add nested DEC STRUCTURE in DerivedTypeDetails component names
Browse files Browse the repository at this point in the history
Currently, when a (legacy) DEC structure contained other DEC structure
declarations, the related component names were not added to the
containing DerivedTypeDetails component_names. This lead to bugs in
later phase when visiting the components (like in when lowering the
type to FIR/MLIR).

When an EntityDecl is visited and the scope is a DEC structure, add
the entity to the component names of this DEC structure.

Differential Revision: https://reviews.llvm.org/D154216
  • Loading branch information
jeanPerier committed Jun 30, 2023
1 parent 32899e1 commit 2d46264
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 0 deletions.
1 change: 1 addition & 0 deletions flang/lib/Lower/ConvertExprToHLFIR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -719,6 +719,7 @@ class HlfirDesignatorBuilder {
if (recordType.isDependentType())
TODO(getLoc(), "Designate derived type with length parameters in HLFIR");
mlir::Type fieldType = recordType.getType(partInfo.componentName);
assert(fieldType && "component name is not known");
mlir::Type fieldBaseType =
hlfir::getFortranElementOrSequenceType(fieldType);
partInfo.componentShape = genComponentShape(componentSym, fieldBaseType);
Expand Down
4 changes: 4 additions & 0 deletions flang/lib/Semantics/resolve-names.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4354,6 +4354,10 @@ void DeclarationVisitor::Post(const parser::EntityDecl &x) {
} else if (attrs.test(Attr::PARAMETER)) { // C882, C883
Say(name, "Missing initialization for parameter '%s'"_err_en_US);
}
if (auto *scopeSymbol{currScope().symbol()})
if (auto *details{scopeSymbol->detailsIf<DerivedTypeDetails>()})
if (details->isDECStructure())
details->add_component(symbol);
}

void DeclarationVisitor::Post(const parser::PointerDecl &x) {
Expand Down
21 changes: 21 additions & 0 deletions flang/test/Semantics/struct02.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
! Test component name resolution with nested legacy DEC structures.
!RUN: %flang_fc1 -fdebug-dump-symbols %s | FileCheck %s

structure /a/
integer :: a_first_comp
structure /b/ b1, b2(100)
integer :: i
end structure
structure /c/ z
integer :: i
structure /d/ d1, d2(10)
real :: x
end structure
end structure
integer :: a_last_comp
end structure
end
! CHECK: /a/: DerivedType sequence components: a_first_comp,b1,b2,z,a_last_comp
! CHECK: /b/: DerivedType sequence components: i
! CHECK: /c/: DerivedType sequence components: i,d1,d2
! CHECK: /d/: DerivedType sequence components: x

0 comments on commit 2d46264

Please sign in to comment.