Closed
Description
Example:
program arrays_05
implicit none
integer, dimension(5) :: numbers = [10]
end program
ASR:
(TranslationUnit
(SymbolTable
1
{
arrays_05:
(Program
(SymbolTable
2
{
__1_k:
(Variable
2
__1_k
[]
Local
()
()
Default
(Integer 4 [])
Source
Public
Required
.false.
),
numbers:
(Variable
2
numbers
[]
Local
(ArrayConstant
[(IntegerConstant 10 (Integer 4 []))]
(Integer 4 [((IntegerConstant 1 (Integer 4 []))
(IntegerConstant 1 (Integer 4 [])))])
ColMajor
)
(ArrayConstant
[(IntegerConstant 10 (Integer 4 []))]
(Integer 4 [((IntegerConstant 1 (Integer 4 []))
(IntegerConstant 1 (Integer 4 [])))])
ColMajor
)
Save
(Integer 4 [((IntegerConstant 1 (Integer 4 []))
(IntegerConstant 5 (Integer 4 [])))])
Source
Public
Required
.false.
)
})
arrays_05
[]
[(=
(Var 2 __1_k)
(ArrayBound
(Var 2 numbers)
(IntegerConstant 1 (Integer 4 []))
(Integer 4 [])
LBound
()
)
()
)
(=
(ArrayItem
(Var 2 numbers)
[(()
(Var 2 __1_k)
())]
(Integer 4 [])
ColMajor
()
)
(IntegerConstant 10 (Integer 4 []))
()
)
(=
(Var 2 __1_k)
(IntegerBinOp
(Var 2 __1_k)
Add
(IntegerConstant 1 (Integer 4 []))
(Integer 4 [])
()
)
()
)
(=
(Var 2 __1_k)
(ArrayBound
(Var 2 numbers)
(IntegerConstant 1 (Integer 4 []))
(Integer 4 [])
LBound
()
)
()
)
(=
(ArrayItem
(Var 2 numbers)
[(()
(Var 2 __1_k)
())]
(Integer 4 [])
ColMajor
()
)
(IntegerConstant 10 (Integer 4 []))
()
)
(=
(Var 2 __1_k)
(IntegerBinOp
(Var 2 __1_k)
Add
(IntegerConstant 1 (Integer 4 []))
(Integer 4 [])
()
)
()
)]
)
})
[]
)
Here, the array is initialized twice using the init_expr
pass
I think the initialization is caused because the pass visits both the m_symbolic_value
and m_value
of the Variable
node and creates init two times.