; RUN: llc -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck %s
;
; CHECK: [[SYM:[a-z0-9]+]]:  DW_TAG_formal_parameter
; CHECK:                     DW_AT_name	("esym")
; CHECK:                     DW_AT_type	([[TYPE:[a-z0-9]+]] "CHARACTER_1")
;
; CHECK:                     DW_TAG_formal_parameter
; CHECK:                       DW_AT_const_value	(7523094288207667809)
; CHECK:                       DW_AT_abstract_origin	([[SYM]] "esym")
;
; CHECK: [[TYPE]]:           DW_TAG_string_type
; CHECK:                       DW_AT_name	("CHARACTER_1")
; CHECK:                       DW_AT_byte_size	(0x08)
;
; The following IR is obtained by compiling the following Fortran
; program with -O2 -g (with irrelevant instructions and metadata
; trimmed):
;
; module semiempirical_corrections
;
;    implicit none
;
; contains
; subroutine gcpcor(n,iz)
;    implicit none
;    integer :: n, i
;    integer :: iz(n)
;    iz(i)=1
;    print*, esym(iz(i))
; end subroutine
;
;
; character*8 function esym(i)
;    integer :: i
;    character*8 elemnt(1)
;    data elemnt/'abcdefgh'/
;    esym=elemnt(i)
;    return
; end function
; end module
;
; The optimizations encode the constant string as an i64 constant in
; the debug info for esym, the return variable of the function esym.

@"semiempirical_corrections_mp_esym_$ELEMNT" = internal unnamed_addr constant [1 x [8 x i8]] [[8 x i8] c"abcdefgh"], align 8, !dbg !0

; Function Attrs: nofree nounwind uwtable
define void @semiempirical_corrections_mp_gcpcor_() local_unnamed_addr #1 !dbg !22 {
alloca_1:
  %"var$47" = alloca i64, align 8, !dbg !34
  call void @llvm.dbg.value(metadata i64 7523094288207667809, metadata !12, metadata !DIExpression()), !dbg !40
  store i64 7523094288207667809, i64* %"var$47", align 8, !dbg !41, !alias.scope !42, !noalias !45
  ret void, !dbg !48
}

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.declare(metadata, metadata, metadata) #3

; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
declare void @llvm.dbg.value(metadata, metadata, metadata) #3

attributes #1 = { nofree nounwind uwtable }
attributes #3 = { nofree nosync nounwind readnone speculatable willreturn }

!llvm.module.flags = !{!20, !21}
!llvm.dbg.cu = !{!8}
!omp_offload.info = !{}

!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "elemnt", linkageName: "semiempirical_corrections_mp_esym_$ELEMNT", scope: !2, file: !3, line: 17, type: !16, isLocal: true, isDefinition: true)
!2 = distinct !DISubprogram(name: "esym", linkageName: "semiempirical_corrections_mp_esym_", scope: !4, file: !3, line: 15, type: !5, scopeLine: 15, spFlags: DISPFlagDefinition, unit: !8, retainedNodes: !11)
!3 = !DIFile(filename: "se6.f90", directory: "/iusers/cchen15/examples/tests/jr30349/gamess-dga-main/object")
!4 = !DIModule(scope: null, name: "semiempirical_corrections", file: !3, line: 1)
!5 = !DISubroutineType(types: !6)
!6 = !{!7}
!7 = !DIStringType(name: "CHARACTER_0", size: 64)
!8 = distinct !DICompileUnit(language: DW_LANG_Fortran95, file: !3, producer: "Intel(R) Fortran 21.0-2745", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !9, globals: !10, splitDebugInlining: false, nameTableKind: None)
!9 = !{}
!10 = !{!0}
!11 = !{!12, !14}
!12 = !DILocalVariable(name: "esym", arg: 1, scope: !2, file: !3, line: 15, type: !13, flags: DIFlagArtificial)
!13 = !DIStringType(name: "CHARACTER_1", size: 64)
!14 = !DILocalVariable(name: "i", arg: 2, scope: !2, file: !3, line: 15, type: !15)
!15 = !DIBasicType(name: "INTEGER*4", size: 32, encoding: DW_ATE_signed)
!16 = !DICompositeType(tag: DW_TAG_array_type, baseType: !17, elements: !18)
!17 = !DIStringType(name: "CHARACTER_2", size: 64)
!18 = !{!19}
!19 = !DISubrange(count: 1, lowerBound: 1)
!20 = !{i32 2, !"Debug Info Version", i32 3}
!21 = !{i32 2, !"Dwarf Version", i32 4}
!22 = distinct !DISubprogram(name: "gcpcor", linkageName: "semiempirical_corrections_mp_gcpcor_", scope: !4, file: !3, line: 6, type: !23, scopeLine: 6, spFlags: DISPFlagDefinition, unit: !8)
!23 = !DISubroutineType(types: !24)
!24 = !{null}
!34 = !DILocation(line: 6, column: 19, scope: !22)
!38 = !DILocation(line: 15, column: 27, scope: !2, inlinedAt: !39)
!39 = distinct !DILocation(line: 11, column: 13, scope: !22)
!40 = !DILocation(line: 0, scope: !2, inlinedAt: !39)
!41 = !DILocation(line: 19, column: 5, scope: !2, inlinedAt: !39)
!42 = !{!43}
!43 = distinct !{!43, !44, !"semiempirical_corrections_mp_esym_: %semiempirical_corrections_mp_esym_$ESYM"}
!44 = distinct !{!44, !"semiempirical_corrections_mp_esym_"}
!45 = !{!46}
!46 = distinct !{!46, !44, !"semiempirical_corrections_mp_esym_: %I"}
!48 = !DILocation(line: 12, column: 1, scope: !22)
