[flang] Set proper source location for the main function.

Take the source position for the anonymous program from its scope.
If the first evaluation is a construct or directive, then it has
null source position.

Author: vdonaldson
Differential Revision: https://reviews.llvm.org/D146445
This commit is contained in:
Slava Zakharin 2023-03-17 16:52:19 -07:00
parent ae484c21c0
commit ee7b6fd4c1
2 changed files with 27 additions and 3 deletions

View File

@ -1671,9 +1671,7 @@ parser::CharBlock
Fortran::lower::pft::FunctionLikeUnit::getStartingSourceLoc() const {
if (beginStmt)
return stmtSourceLoc(*beginStmt);
if (!evaluationList.empty())
return evaluationList.front().position;
return stmtSourceLoc(endStmt);
return scope->sourceRange();
}
//===----------------------------------------------------------------------===//

View File

@ -0,0 +1,26 @@
! RUN: split-file %s %t
! RUN: bbc %t/test1.f90 -o - --emit-fir --mlir-print-debuginfo | FileCheck %s --check-prefix=TEST1
! RUN: bbc %t/test2.f90 -o - --emit-fir --mlir-print-debuginfo | FileCheck %s --check-prefix=TEST2
! Check that the missing optional program-stmt (R1401)
! does not result in unknown source location of the corresponding
! function.
!--- test1.f90
if (.false.) then
endif
end
! TEST1: func.func @_QQmain() {
! TEST1-NEXT: return loc("{{.*}}test1.f90":3:1)
! TEST1-NEXT: } loc("{{.*}}test1.f90":1:1)
!--- test2.f90
!!! keep me here
if (.true.) then
endif
end program
! TEST2: func.func @_QQmain() {
! TEST2-NEXT: return loc("{{.*}}test2.f90":4:1)
! TEST2-NEXT: } loc("{{.*}}test2.f90":2:1)