blob: 068dc58fb94c507e52c327624c9694f6555a712e [file]
! RUN: split-file %s %t
! RUN: %flang_fc1 -emit-llvm -debug-info-kind=standalone -I %t %t/main.f90 -o - | FileCheck %s
! Anything read through an INCLUDE gets a location that is fused with the
! inclusion information. Check that a module, a derived type, a module
! variable, a procedure, its dummy argument, an internal procedure, a common
! block and its members all still get debug information, and that it points at
! the file and line where each is written rather than at the INCLUDE statement.
!--- body.f90
! Nothing here starts on line 1 on purpose. 1 is also the line that is reported
! when a position cannot be read out of the location, so checking for it would
! pass whether or not the location was understood.
module included_mod
type :: point
integer :: x
end type
integer :: modvar = 7
end module
subroutine included_sub(i)
integer :: i
i = 1
call inner()
contains
subroutine inner()
i = i + 1
end subroutine
end subroutine
subroutine common_sub()
real :: cx
real :: cy
common /blk/ cx, cy
cx = 1.0
cy = 2.0
end subroutine
!--- main.f90
include 'body.f90'
program p
use included_mod
integer :: i
type(point) :: pt
call included_sub(i)
call common_sub()
pt%x = modvar
print *, i, pt%x
end program
! CHECK-DAG: ![[BODY:[0-9]+]] = !DIFile(filename: "body.f90"
! CHECK-DAG: ![[MOD:[0-9]+]] = !DIModule({{.*}}name: "included_mod", file: ![[BODY]], line: 4)
! CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "point", {{.*}}file: ![[BODY]], line: 5
! CHECK-DAG: !DIGlobalVariable(name: "modvar", linkageName: "_QMincluded_modEmodvar", scope: ![[MOD]], file: ![[BODY]], line: 8
! CHECK-DAG: ![[SUB:[0-9]+]] = distinct !DISubprogram(name: "included_sub", linkageName: "included_sub_", {{.*}}file: ![[BODY]], line: 11, {{.*}}scopeLine: 11
! CHECK-DAG: !DILocalVariable(name: "i", arg: 1, scope: ![[SUB]], file: ![[BODY]], line: 12
! CHECK-DAG: !DISubprogram(name: "inner", linkageName: "_QFincluded_subPinner", scope: ![[SUB]], file: ![[BODY]], line: 16, {{.*}}scopeLine: 16
! CHECK-DAG: ![[CB:[0-9]+]] = !DICommonBlock({{.*}}name: "blk", file: ![[BODY]], line: 24)
! CHECK-DAG: !DIGlobalVariable(name: "cx", {{.*}}scope: ![[CB]], file: ![[BODY]], line: 22
! CHECK-DAG: !DIGlobalVariable(name: "cy", {{.*}}scope: ![[CB]], file: ![[BODY]], line: 23
! CHECK-DAG: !DISubprogram(name: "p", linkageName: "_QQmain", {{.*}}file: ![[MAIN:[0-9]+]], line: 2
! CHECK-DAG: ![[MAIN]] = !DIFile(filename: "main.f90"