Skip to content

Commit 15106c2

Browse files
authored
[flang][runtime] Fix odd "invalid descriptor" runtime crash (#107785)
A defined assignment generic interface for a given LHS/RHS type & rank combination may have a specific procedure with LHS dummy argument that is neither allocatable nor pointer, or specific procedure(s) whose LHS dummy arguments are allocatable or pointer. It is possible to have two specific procedures if one's LHS dummy argument is allocatable and the other's is pointer. However, the runtime doesn't work with LHS dummy arguments that are allocatable, and will crash with a mysterious "invalid descriptor" error message. Extend the list of special bindings to include ScalarAllocatableAssignment and ScalarPointerAssignment, use them when appropriate in the runtime type information tables, and handle them in Assign() in the runtime support library.
1 parent ea858e3 commit 15106c2

File tree

12 files changed

+126
-40
lines changed

12 files changed

+126
-40
lines changed

flang/lib/Semantics/expression.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4605,7 +4605,8 @@ std::optional<ProcedureRef> ArgumentAnalyzer::GetDefinedAssignmentProc() {
46054605
}
46064606
for (std::size_t i{0}; !proc && i < actuals_.size(); ++i) {
46074607
const Symbol *generic{nullptr};
4608-
if (const Symbol *binding{FindBoundOp(oprName, i, generic, true)}) {
4608+
if (const Symbol *
4609+
binding{FindBoundOp(oprName, i, generic, /*isSubroutine=*/true)}) {
46094610
if (CheckAccessibleSymbol(scope, DEREF(generic))) {
46104611
// ignore inaccessible type-bound ASSIGNMENT(=) generic
46114612
} else if (const Symbol *

flang/lib/Semantics/runtime-type-info.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ class RuntimeTableBuilder {
149149
SomeExpr explicitEnum_; // Value::Genre::Explicit
150150
SomeExpr lenParameterEnum_; // Value::Genre::LenParameter
151151
SomeExpr scalarAssignmentEnum_; // SpecialBinding::Which::ScalarAssignment
152+
SomeExpr
153+
scalarAllocatableAssignmentEnum_; // SpecialBinding::Which::ScalarAllocatableAssignment
154+
SomeExpr
155+
scalarPointerAssignmentEnum_; // SpecialBinding::Which::ScalarPointerAssignment
152156
SomeExpr
153157
elementalAssignmentEnum_; // SpecialBinding::Which::ElementalAssignment
154158
SomeExpr readFormattedEnum_; // SpecialBinding::Which::ReadFormatted
@@ -174,6 +178,9 @@ RuntimeTableBuilder::RuntimeTableBuilder(
174178
explicitEnum_{GetEnumValue("explicit")},
175179
lenParameterEnum_{GetEnumValue("lenparameter")},
176180
scalarAssignmentEnum_{GetEnumValue("scalarassignment")},
181+
scalarAllocatableAssignmentEnum_{
182+
GetEnumValue("scalarallocatableassignment")},
183+
scalarPointerAssignmentEnum_{GetEnumValue("scalarpointerassignment")},
177184
elementalAssignmentEnum_{GetEnumValue("elementalassignment")},
178185
readFormattedEnum_{GetEnumValue("readformatted")},
179186
readUnformattedEnum_{GetEnumValue("readunformatted")},
@@ -1122,10 +1129,10 @@ void RuntimeTableBuilder::DescribeSpecialProc(
11221129
// Non-type-bound generic INTERFACEs and assignments from distinct
11231130
// types must not be used for component intrinsic assignment.
11241131
CHECK(proc->dummyArguments.size() == 2);
1125-
const auto t1{
1132+
const auto &ddo1{
11261133
DEREF(std::get_if<evaluate::characteristics::DummyDataObject>(
1127-
&proc->dummyArguments[0].u))
1128-
.type.type()};
1134+
&proc->dummyArguments[0].u))};
1135+
const auto t1{ddo1.type.type()};
11291136
const auto t2{
11301137
DEREF(std::get_if<evaluate::characteristics::DummyDataObject>(
11311138
&proc->dummyArguments[1].u))
@@ -1137,7 +1144,13 @@ void RuntimeTableBuilder::DescribeSpecialProc(
11371144
return;
11381145
}
11391146
which = proc->IsElemental() ? elementalAssignmentEnum_
1140-
: scalarAssignmentEnum_;
1147+
: ddo1.attrs.test(
1148+
evaluate::characteristics::DummyDataObject::Attr::Allocatable)
1149+
? scalarAllocatableAssignmentEnum_
1150+
: ddo1.attrs.test(
1151+
evaluate::characteristics::DummyDataObject::Attr::Pointer)
1152+
? scalarPointerAssignmentEnum_
1153+
: scalarAssignmentEnum_;
11411154
if (binding && binding->passName() &&
11421155
*binding->passName() == proc->dummyArguments[1].name) {
11431156
argThatMightBeDescriptor = 1;

flang/module/__fortran_type_info.f90

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,14 @@
106106
end type
107107

108108
enum, bind(c) ! SpecialBinding::Which
109-
enumerator :: ScalarAssignment = 1, ElementalAssignment = 2
110-
enumerator :: ReadFormatted = 3, ReadUnformatted = 4
111-
enumerator :: WriteFormatted = 5, WriteUnformatted = 6
112-
enumerator :: ElementalFinal = 7, AssumedRankFinal = 8
113-
enumerator :: ScalarFinal = 9 ! higher-rank final procedures follow
109+
enumerator :: ScalarAssignment = 1
110+
enumerator :: ScalarAllocatableAssignment = 2
111+
enumerator :: ScalarPointerAssignment = 3
112+
enumerator :: ElementalAssignment = 4
113+
enumerator :: ReadFormatted = 5, ReadUnformatted = 6
114+
enumerator :: WriteFormatted = 7, WriteUnformatted = 8
115+
enumerator :: ElementalFinal = 9, AssumedRankFinal = 10
116+
enumerator :: ScalarFinal = 11 ! higher-rank final procedures follow
114117
end enum
115118

116119
type, bind(c) :: SpecialBinding

flang/runtime/assign.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,17 @@ RT_API_ATTRS static void Assign(
352352
// the Assign() is invoked recursively for component-per-component
353353
// assignments.
354354
if (to.rank() == 0) {
355+
if (to.IsAllocatable()) {
356+
if (const auto *special{toDerived->FindSpecialBinding(typeInfo::
357+
SpecialBinding::Which::ScalarAllocatableAssignment)}) {
358+
return DoScalarDefinedAssignment(to, from, *special);
359+
}
360+
} else if (to.IsPointer()) {
361+
if (const auto *special{toDerived->FindSpecialBinding(
362+
typeInfo::SpecialBinding::Which::ScalarPointerAssignment)}) {
363+
return DoScalarDefinedAssignment(to, from, *special);
364+
}
365+
}
355366
if (const auto *special{toDerived->FindSpecialBinding(
356367
typeInfo::SpecialBinding::Which::ScalarAssignment)}) {
357368
return DoScalarDefinedAssignment(to, from, *special);
@@ -417,9 +428,8 @@ RT_API_ATTRS static void Assign(
417428
StaticDescriptor<maxRank, true, 10 /*?*/> statDesc[2];
418429
Descriptor &toCompDesc{statDesc[0].descriptor()};
419430
Descriptor &fromCompDesc{statDesc[1].descriptor()};
420-
comp.CreatePointerDescriptor(toCompDesc, to, terminator, toAt);
421-
comp.CreatePointerDescriptor(
422-
fromCompDesc, from, terminator, fromAt);
431+
comp.CreateTargetDescriptor(toCompDesc, to, terminator, toAt);
432+
comp.CreateTargetDescriptor(fromCompDesc, from, terminator, fromAt);
423433
Assign(toCompDesc, fromCompDesc, terminator, nestedFlags);
424434
} else { // Component has intrinsic type; simply copy raw bytes
425435
std::size_t componentByteSize{comp.SizeInBytes(to)};

flang/runtime/descriptor-io.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ static RT_API_ATTRS bool DefaultComponentIO(IoStatementState &io,
255255
// Create a descriptor for the component
256256
StaticDescriptor<maxRank, true, 16 /*?*/> statDesc;
257257
Descriptor &desc{statDesc.descriptor()};
258-
component.CreatePointerDescriptor(
258+
component.CreateTargetDescriptor(
259259
desc, origDescriptor, terminator, origSubscripts);
260260
return DescriptorIO<DIR>(io, desc, table);
261261
} else {

flang/runtime/namelist.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,15 @@ static RT_API_ATTRS bool HandleComponent(IoStatementState &io, Descriptor &desc,
362362
io.HandleRelativePosition(byteCount); // skip over '('
363363
StaticDescriptor<maxRank, true, 16> staticDesc;
364364
Descriptor &tmpDesc{staticDesc.descriptor()};
365-
comp->CreatePointerDescriptor(tmpDesc, source, handler);
365+
comp->CreateTargetDescriptor(tmpDesc, source, handler);
366366
if (!HandleSubscripts(io, desc, tmpDesc, compName)) {
367367
return false;
368368
}
369369
createdDesc = true;
370370
}
371371
}
372372
if (!createdDesc) {
373-
comp->CreatePointerDescriptor(desc, source, handler);
373+
comp->CreateTargetDescriptor(desc, source, handler);
374374
}
375375
if (source.rank() > 0) {
376376
if (desc.rank() > 0) {

flang/runtime/type-info.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ RT_API_ATTRS void Component::EstablishDescriptor(Descriptor &descriptor,
134134
}
135135
}
136136

137-
RT_API_ATTRS void Component::CreatePointerDescriptor(Descriptor &descriptor,
137+
RT_API_ATTRS void Component::CreateTargetDescriptor(Descriptor &descriptor,
138138
const Descriptor &container, Terminator &terminator,
139139
const SubscriptValue *subscripts) const {
140140
RUNTIME_CHECK(terminator, genre_ == Genre::Data);
@@ -144,7 +144,6 @@ RT_API_ATTRS void Component::CreatePointerDescriptor(Descriptor &descriptor,
144144
} else {
145145
descriptor.set_base_addr(container.OffsetElement<char>() + offset_);
146146
}
147-
descriptor.raw().attribute = CFI_attribute_pointer;
148147
}
149148

150149
RT_API_ATTRS const DerivedType *DerivedType::GetParentType() const {
@@ -297,6 +296,12 @@ FILE *SpecialBinding::Dump(FILE *f) const {
297296
case Which::ScalarAssignment:
298297
std::fputs(" ScalarAssignment", f);
299298
break;
299+
case Which::ScalarAllocatableAssignment:
300+
std::fputs(" ScalarAllocatableAssignment", f);
301+
break;
302+
case Which::ScalarPointerAssignment:
303+
std::fputs(" ScalarPointerAssignment", f);
304+
break;
300305
case Which::ElementalAssignment:
301306
std::fputs(" ElementalAssignment", f);
302307
break;

flang/runtime/type-info.h

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ class Component {
8989
RT_API_ATTRS void EstablishDescriptor(
9090
Descriptor &, const Descriptor &container, Terminator &) const;
9191

92-
// Creates a pointer descriptor from this component description, possibly
92+
// Creates a descriptor from this component description, possibly
9393
// with subscripts
94-
RT_API_ATTRS void CreatePointerDescriptor(Descriptor &,
94+
RT_API_ATTRS void CreateTargetDescriptor(Descriptor &,
9595
const Descriptor &container, Terminator &,
9696
const SubscriptValue * = nullptr) const;
9797

@@ -126,14 +126,16 @@ class SpecialBinding {
126126
enum class Which : std::uint8_t {
127127
None = 0,
128128
ScalarAssignment = 1,
129-
ElementalAssignment = 2,
130-
ReadFormatted = 3,
131-
ReadUnformatted = 4,
132-
WriteFormatted = 5,
133-
WriteUnformatted = 6,
134-
ElementalFinal = 7,
135-
AssumedRankFinal = 8,
136-
ScalarFinal = 9,
129+
ScalarAllocatableAssignment = 2,
130+
ScalarPointerAssignment = 3,
131+
ElementalAssignment = 4,
132+
ReadFormatted = 5,
133+
ReadUnformatted = 6,
134+
WriteFormatted = 7,
135+
WriteUnformatted = 8,
136+
ElementalFinal = 9,
137+
AssumedRankFinal = 10,
138+
ScalarFinal = 11,
137139
// higher-ranked final procedures follow
138140
};
139141

flang/test/Semantics/typeinfo01.f90

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ impure elemental subroutine s1(x, y)
102102
class(t), intent(out) :: x
103103
class(t), intent(in) :: y
104104
end subroutine
105-
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=.v.t,name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=4_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)
106-
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=2_1,isargdescriptorset=3_1,istypebound=1_1,isargcontiguousset=0_1,proc=s1)]
105+
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=.v.t,name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=16_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)
106+
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=4_1,isargdescriptorset=3_1,istypebound=1_1,isargcontiguousset=0_1,proc=s1)]
107107
!CHECK: .v.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:0_8 init:[binding::binding(proc=s1,name=.n.s1)]
108108
end module
109109

@@ -125,8 +125,8 @@ impure elemental subroutine s3(x)
125125
subroutine s4(x)
126126
type(t), contiguous :: x(:,:,:)
127127
end subroutine
128-
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=NULL(),name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=7296_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=0_1,nofinalizationneeded=0_1)
129-
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:3_8 init:[specialbinding::specialbinding(which=7_1,isargdescriptorset=0_1,istypebound=1_1,isargcontiguousset=0_1,proc=s3),specialbinding(which=10_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=s1),specialbinding(which=11_1,isargdescriptorset=0_1,istypebound=1_1,isargcontiguousset=1_1,proc=s2),specialbinding(which=12_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=1_1,proc=s4)]
128+
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=NULL(),name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=29184_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=0_1,nofinalizationneeded=0_1)
129+
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:3_8 init:[specialbinding::specialbinding(which=9_1,isargdescriptorset=0_1,istypebound=1_1,isargcontiguousset=0_1,proc=s3),specialbinding(which=12_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=s1),specialbinding(which=13_1,isargdescriptorset=0_1,istypebound=1_1,isargcontiguousset=1_1,proc=s2),specialbinding(which=14_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=1_1,proc=s4)]
130130
end module
131131

132132
module m09
@@ -167,8 +167,8 @@ subroutine wu(x,u,iostat,iomsg)
167167
integer, intent(out) :: iostat
168168
character(len=*), intent(inout) :: iomsg
169169
end subroutine
170-
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=.v.t,name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=120_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)
171-
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:3_8 init:[specialbinding::specialbinding(which=3_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=rf),specialbinding(which=4_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=ru),specialbinding(which=5_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wf),specialbinding(which=6_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wu)]
170+
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=.v.t,name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=480_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)
171+
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:3_8 init:[specialbinding::specialbinding(which=5_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=rf),specialbinding(which=6_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=ru),specialbinding(which=7_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wf),specialbinding(which=8_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wu)]
172172
!CHECK: .v.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:3_8 init:[binding::binding(proc=rf,name=.n.rf),binding(proc=ru,name=.n.ru),binding(proc=wf,name=.n.wf),binding(proc=wu,name=.n.wu)]
173173
end module
174174

@@ -216,8 +216,8 @@ subroutine wu(x,u,iostat,iomsg)
216216
integer, intent(out) :: iostat
217217
character(len=*), intent(inout) :: iomsg
218218
end subroutine
219-
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=NULL(),name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=120_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)
220-
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:3_8 init:[specialbinding::specialbinding(which=3_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=rf),specialbinding(which=4_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=ru),specialbinding(which=5_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=wf),specialbinding(which=6_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=wu)]
219+
!CHECK: .dt.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=NULL(),name=.n.t,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.t,specialbitset=480_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)
220+
!CHECK: .s.t, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:3_8 init:[specialbinding::specialbinding(which=5_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=rf),specialbinding(which=6_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=ru),specialbinding(which=7_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=wf),specialbinding(which=8_1,isargdescriptorset=0_1,istypebound=0_1,isargcontiguousset=0_1,proc=wu)]
221221
end module
222222

223223
module m11
@@ -260,7 +260,7 @@ module m13
260260
contains
261261
procedure :: assign1, assign2
262262
generic :: assignment(=) => assign1, assign2
263-
! CHECK: .s.t1, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=2_1,isargdescriptorset=3_1,istypebound=1_1,isargcontiguousset=0_1,proc=assign1)]
263+
! CHECK: .s.t1, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=4_1,isargdescriptorset=3_1,istypebound=1_1,isargcontiguousset=0_1,proc=assign1)]
264264
end type
265265
contains
266266
impure elemental subroutine assign1(to, from)

flang/test/Semantics/typeinfo02.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ subroutine wf2(x,u,iot,v,iostat,iomsg)
2929
character(len=*), intent(inout) :: iomsg
3030
end subroutine
3131
end module
32-
!CHECK: .s.base, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=5_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wf1)]
33-
!CHECK: .s.extended, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=5_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wf2)]
32+
!CHECK: .s.base, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=7_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wf1)]
33+
!CHECK: .s.extended, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(specialbinding) shape: 0_8:0_8 init:[specialbinding::specialbinding(which=7_1,isargdescriptorset=1_1,istypebound=1_1,isargcontiguousset=0_1,proc=wf2)]

flang/test/Semantics/typeinfo04.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module m
77
contains
88
final :: final
99
end type
10-
!CHECK: .dt.finalizable, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=NULL(),name=.n.finalizable,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.finalizable,specialbitset=128_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=0_1,nofinalizationneeded=0_1)
10+
!CHECK: .dt.finalizable, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(binding=NULL(),name=.n.finalizable,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),special=.s.finalizable,specialbitset=512_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=0_1,nofinalizationneeded=0_1)
1111
type, abstract :: t1
1212
end type
1313
!CHECK: .dt.t1, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(derivedtype) init:derivedtype(name=.n.t1,sizeinbytes=0_8,uninstantiated=NULL(),kindparameter=NULL(),lenparameterkind=NULL(),component=NULL(),procptr=NULL(),specialbitset=0_4,hasparent=0_1,noinitializationneeded=1_1,nodestructionneeded=1_1,nofinalizationneeded=1_1)

0 commit comments

Comments
 (0)