(TranslationUnit
    [(Module
        DOT
        (TriviaNode
            [(EndOfLine)
            (Comment
                "! Module for dot product of two real arrays of rank 1."
            )
            (Comment
                "! The caller needs to ensure that exceptions do not cause halting."
            )
            (Comment
                "! Source https://j3-fortran.org/doc/year/18/18-007r1.pdf"
            )]
            []
        )
        [(Use
            [(SimpleAttribute
                AttrIntrinsic
            )]
            IEEE_EXCEPTIONS
            []
            .false.
            ()
        )]
        []
        [(Declaration
            (AttrType
                TypeLogical
                []
                ()
                ()
                None
            )
            []
            [(MATRIX_ERROR
            []
            []
            ()
            (Logical .false.)
            Equal
            ())]
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
        )
        (Interface
            (InterfaceHeaderDefinedOperator
                "dot"
            )
            (TriviaNode
                []
                [(EndOfLine)
                (EndOfLine)]
            )
            [(InterfaceModuleProcedure
                [MULT]
                [(SimpleAttribute
                    AttrModule
                )]
                ()
            )]
        )]
        []
        [(Function
            MULT
            [(A)
            (B)]
            [(AttrType
                TypeReal
                []
                ()
                ()
                None
            )]
            ()
            ()
            ()
            []
            []
            []
            [(Declaration
                (AttrType
                    TypeReal
                    []
                    ()
                    ()
                    None
                )
                [(AttrIntent
                    In
                )]
                [(A
                [(()
                ()
                DimensionExpr)]
                []
                ()
                ()
                None
                ())
                (B
                [(()
                ()
                DimensionExpr)]
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeInteger
                    []
                    ()
                    ()
                    None
                )
                []
                [(I
                []
                []
                ()
                ()
                None
                ())]
                ()
            )
            (Declaration
                (AttrType
                    TypeLogical
                    []
                    ()
                    ()
                    None
                )
                []
                [(OVERFLOW
                []
                []
                ()
                ()
                None
                ())]
                (TriviaNode
                    []
                    [(EndOfLine)
                    (EndOfLine)]
                )
            )]
            [(If
                0
                ()
                (/= (FuncCallOrArray
                    SIZE
                    []
                    [(()
                    A
                    ()
                    0)]
                    []
                    []
                    []
                ) (FuncCallOrArray
                    SIZE
                    []
                    [(()
                    B
                    ()
                    0)]
                    []
                    []
                    []
                ))
                [(Assignment
                    0
                    MATRIX_ERROR
                    (Logical .true.)
                    ()
                )
                (Return
                    0
                    ()
                    ()
                )]
                []
                ()
                ()
                (TriviaNode
                    []
                    [(EndOfLine)
                    (Comment
                        "! The processor ensures that IEEE_OVERFLOW is quiet."
                    )
                    (EndOfLine)]
                )
            )
            (Assignment
                0
                MULT
                (Real "0.0")
                ()
            )
            (DoLoop
                0
                ()
                0
                I
                1
                (FuncCallOrArray
                    SIZE
                    []
                    [(()
                    A
                    ()
                    0)]
                    []
                    []
                    []
                )
                ()
                [(Assignment
                    0
                    MULT
                    (+ MULT (* (FuncCallOrArray
                        A
                        []
                        [(()
                        I
                        ()
                        0)]
                        []
                        []
                        []
                    ) (FuncCallOrArray
                        B
                        []
                        [(()
                        I
                        ()
                        0)]
                        []
                        []
                        []
                    )))
                    ()
                )]
                ()
                ()
            )
            (SubroutineCall
                0
                IEEE_GET_FLAG
                []
                [(()
                IEEE_OVERFLOW
                ()
                0)
                (()
                OVERFLOW
                ()
                0)]
                []
                []
                ()
            )
            (If
                0
                ()
                OVERFLOW
                [(Assignment
                    0
                    MATRIX_ERROR
                    (Logical .true.)
                    ()
                )]
                []
                ()
                ()
                ()
            )]
            []
            []
        )]
    )]
)
