Skip to content

Init_expr pass creates the array initialisation twice #1687

Closed
lfortran/lfortran
#1603
@Thirumalai-Shaktivel

Description

@Thirumalai-Shaktivel

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions