Skip to content

Commit dc55c44

Browse files
authored
[flang] Clip circular dependence between implementation modules (#85309)
flang/module/__fortran_type_info.mod uses __fortran_builtins.mod, but it is also implicitly used when compiling __fortran_builtins.f90 (or anything else). If __fortran_type_info.mod finds an old __fortran_builtins.mod file, compilation can fail while building the new one. Break the dependence by *not* generating runtime derived type information for __fortran_builtins.f90.
1 parent 49b8a99 commit dc55c44

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1239,6 +1239,16 @@ void RuntimeTableBuilder::IncorporateDefinedIoGenericInterfaces(
12391239
RuntimeDerivedTypeTables BuildRuntimeDerivedTypeTables(
12401240
SemanticsContext &context) {
12411241
RuntimeDerivedTypeTables result;
1242+
// Do not attempt to read __fortran_type_info.mod when compiling
1243+
// the module on which it depends.
1244+
const auto &allSources{context.allCookedSources().allSources()};
1245+
if (auto firstProv{allSources.GetFirstFileProvenance()}) {
1246+
if (const auto *srcFile{allSources.GetSourceFile(firstProv->start())}) {
1247+
if (srcFile->path().find("__fortran_builtins.f90") != std::string::npos) {
1248+
return result;
1249+
}
1250+
}
1251+
}
12421252
result.schemata = context.GetBuiltinModule(typeInfoBuiltinModule);
12431253
if (result.schemata) {
12441254
RuntimeTableBuilder builder{context, result};

0 commit comments

Comments
 (0)