Skip to content

Flang Fortran Debug Metadata Plan

Gary Klimowicz edited this page May 22, 2019 · 6 revisions

Flang Fortran Debug Metadata Plan

The table below summarizes the status of Fortran debug metadata support in Flang and the Flang-specific version of LLVM.

Area Feature Status LLVM IR Metadata DWARF Information DWARF Generated by LLVM?
CHARACTER type CHARACTER type with deferred length Not Complete Need to emit !DIStringType(..., stringLength:, stringLengthExpression:) Need to emit DW_TAG_variable, DW_TAG_string_type, DW_AT_string_length No
Arrays Explicit array dimensions Completed Emit !DIFortranArrayType, !DIFortranSubrange Emit DW_TAG_variable, DW_TAG_array_type, DW_TAG_subrange_type Emitted by Flang LLVM
Arrays Adjustable arrays Completed Emit !DIFortranArrayType, !DIFortranSubrange Emit DW_TAG_variable, DW_TAG_array_type, DW_TAG_subrange_type Emitted by Flang LLVM
Arrays Assumed size arrays Completed Emit !DIFortranArrayType, !DIFortranSubrange Emit DW_TAG_variable, DW_TAG_array_type, DW_TAG_subrange_type Emitted by Flang LLVM
Arrays Assumed shape arrays Completed Emit !DIFortranArrayType, !DIFortranSubrange Emit DW_TAG_variable, DW_TAG_array_type, DW_TAG_subrange_type Emitted by Flang LLVM
Modules Module variables Completed Emit !DIModule, !DIGlobalVariable Emit DW_TAG_module, DW_TAG_variable Emitted by Flang LLVM
Modules Module imports Completed Emit !DIModule, !DIImportedEntity, !DIGlobalVariable Emit DW_TAG_module, DW_TAG_imported_module, DW_TAG_variable Emitted by Flang LLVM
COMMON Blocks Named common variables Completed Emit !DICommonBlock, !DIGlobalVariable Emit DW_TAG_common_block, DW_TAG_variable Emitted by Flang LLVM
COMMON Blocks Unnamed common variables Completed Emit !DICommonBlock, !DIGlobalVariable Emit DW_TAG_common_block, DW_TAG_variable Emitted by Flang LLVM
Procedures Pure procedures Next Need to emit !DISubprogram(…, flags: DIFlagPure) Need to emit DW_AT_pure
Procedures Elemental procedures Next Need to emit !DISubprogram(…, flags: DIFlagElemental) Need to emit DW_AT_elemental
Procedures Recursive procedures Next Need to emit !DISubprogram(…, flags: DIFlagRecursive Need to emit DW_AT_recursive
Procedures Alternate entries To Do Need to emit !DIEntryPoint Need to emit DW_AT_entry_point
Allocatables, Pointers Variable metadata Completed
C Interop To Do
Finalization To Do
Associate Associate names To Do