Index: flang/lib/Lower/PFTBuilder.cpp =================================================================== --- flang/lib/Lower/PFTBuilder.cpp +++ flang/lib/Lower/PFTBuilder.cpp @@ -396,7 +396,7 @@ assert(!evaluationListStack.empty() && "empty evaluation list stack"); if (!constructAndDirectiveStack.empty()) eval.parentConstruct = constructAndDirectiveStack.back(); - auto &entryPointList = eval.getOwningProcedure()->entryPointList; + lower::pft::FunctionLikeUnit *owningProcedure = eval.getOwningProcedure(); evaluationListStack.back()->emplace_back(std::move(eval)); lower::pft::Evaluation *p = &evaluationListStack.back()->back(); if (p->isActionStmt() || p->isConstructStmt() || p->isEndStmt() || @@ -408,11 +408,14 @@ p->printIndex = 1; } lastLexicalEvaluation = p; - for (std::size_t entryIndex = entryPointList.size() - 1; - entryIndex && !entryPointList[entryIndex].second->lexicalSuccessor; - --entryIndex) - // Link to the entry's first executable statement. - entryPointList[entryIndex].second->lexicalSuccessor = p; + if (owningProcedure) { + auto &entryPointList = owningProcedure->entryPointList; + for (std::size_t entryIndex = entryPointList.size() - 1; + entryIndex && !entryPointList[entryIndex].second->lexicalSuccessor; + --entryIndex) + // Link to the entry's first executable statement. + entryPointList[entryIndex].second->lexicalSuccessor = p; + } } else if (const auto *entryStmt = p->getIf()) { const semantics::Symbol *sym = std::get(entryStmt->t).symbol; @@ -420,7 +423,7 @@ sym = details->specific(); assert(sym->has() && "entry must be a subprogram"); - entryPointList.push_back(std::pair{sym, p}); + owningProcedure->entryPointList.push_back(std::pair{sym, p}); } if (p->label.has_value()) labelEvaluationMap->try_emplace(*p->label, p); Index: flang/test/Lower/pre-fir-tree02.f90 =================================================================== --- flang/test/Lower/pre-fir-tree02.f90 +++ flang/test/Lower/pre-fir-tree02.f90 @@ -155,6 +155,13 @@ !![disable]type, extends(a_type) :: b_type !![disable] integer :: y !![disable]end type + interface + subroutine ss(aa) + ! CHECK: CompilerDirective + !DIR$ IGNORE_TKR aa + integer :: aa + end subroutine ss + end interface contains ! CHECK: Function foo function foo(x) @@ -212,7 +219,7 @@ ! CHECK: Subroutine sub subroutine sub(a) real(4):: a - ! CompilerDirective: + ! CHECK: CompilerDirective !DIR$ IGNORE_TKR a end subroutine