Skip to content

Init_expr pass creates the array initialisation twice #1687

@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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions