If a symbol (that is not a dummy argument) is implicitly declared inside a statement function, don't create it in the statement function's scope. Instead, treat statement functions like blocks when finding the inclusive scope and create the symbol there. Add a new flag, StmtFunction, to symbols that represent statement functions. Differential Revision: https://reviews.llvm.org/D84588
28 lines
598 B
Fortran
28 lines
598 B
Fortran
! RUN: %S/test_symbols.sh %s %t %f18
|
|
! Statement functions
|
|
|
|
!DEF: /p1 MainProgram
|
|
program p1
|
|
!DEF: /p1/f (Function, StmtFunction) Subprogram INTEGER(4)
|
|
!DEF: /p1/i ObjectEntity INTEGER(4)
|
|
!DEF: /p1/j ObjectEntity INTEGER(4)
|
|
integer f, i, j
|
|
!REF: /p1/f
|
|
!REF: /p1/i
|
|
!DEF: /p1/f/i ObjectEntity INTEGER(4)
|
|
f(i) = i + 1
|
|
!REF: /p1/j
|
|
!REF: /p1/f
|
|
j = f(2)
|
|
end program
|
|
|
|
!DEF: /p2 MainProgram
|
|
program p2
|
|
!DEF: /p2/f (Function, StmtFunction) Subprogram REAL(4)
|
|
!DEF: /p2/f/x (Implicit) ObjectEntity REAL(4)
|
|
!DEF: /p2/y (Implicit) ObjectEntity REAL(4)
|
|
f(x) = y
|
|
!REF: /p2/y
|
|
y = 1.0
|
|
end program
|