| ; RUN: llvm-as < %s | llvm-dis | llc -mtriple=x86_64 -O0 -filetype=obj -o - | llvm-dwarfdump -v -debug-info - | FileCheck %s |
| |
| ; A test to verify the use of a DIDerivedType as a bound of a |
| ; DISubrangeType. |
| |
| ; CHECK: DW_TAG_array_type |
| ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] {{.*}} |
| ; CHECK: DW_TAG_subrange_type {{.*}} |
| ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] {{.*}} |
| ; CHECK-NEXT: DW_AT_upper_bound [DW_FORM_ref4] {{.*}} |
| |
| ; ModuleID = 'vla.ads' |
| source_filename = "vla.ads" |
| target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" |
| target triple = "x86_64-unknown-linux-gnu" |
| |
| %vla__array_type_FP = type { ptr, ptr } |
| %vla__record_type_I = type <{ i32 }> |
| |
| @vla_E = dso_local global i16 0, align 2, !dbg !0 |
| |
| ; Function Attrs: inlinehint |
| define dso_local void @vla__array_typeIP(%vla__array_type_FP %_init) #0 !dbg !10 { |
| entry: |
| %0 = extractvalue %vla__array_type_FP %_init, 1, !dbg !15 |
| %1 = call ptr @llvm.invariant.start.p0(i64 8, ptr %0), !dbg !15 |
| ret void, !dbg !15 |
| } |
| |
| ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) |
| declare ptr @llvm.invariant.start.p0(i64 immarg, ptr nocapture) #1 |
| |
| ; Function Attrs: inlinehint |
| define dso_local void @vla__record_typeIP(ptr noalias nocapture nonnull %_init, i32 %l1) #0 !dbg !16 { |
| entry: |
| #dbg_declare(ptr %_init, !31, !DIExpression(), !32) |
| #dbg_value(i32 %l1, !33, !DIExpression(), !34) |
| %0 = getelementptr inbounds %vla__record_type_I, ptr %_init, i32 0, i32 0, !dbg !32 |
| store i32 %l1, ptr %0, align 4, !dbg !32, !tbaa !35 |
| ret void, !dbg !32 |
| } |
| |
| attributes #0 = { inlinehint } |
| attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } |
| |
| !llvm.module.flags = !{!6, !7, !8, !9} |
| !llvm.dbg.cu = !{!2} |
| |
| !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) |
| !1 = distinct !DIGlobalVariable(name: "vla_E", scope: !2, file: !3, line: 16, type: !5, isLocal: false, isDefinition: true, align: 16) |
| !2 = distinct !DICompileUnit(language: DW_LANG_Ada95, file: !3, producer: "GNAT/LLVM", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false) |
| !3 = !DIFile(filename: "vla.ads", directory: "") |
| !4 = !{!0} |
| !5 = !DIBasicType(name: "short_integer", size: 16, encoding: DW_ATE_signed) |
| !6 = !{i32 8, !"PIC Level", i32 2} |
| !7 = !{i32 7, !"PIE Level", i32 2} |
| !8 = !{i32 2, !"Debug Info Version", i32 3} |
| !9 = !{i32 2, !"Dwarf Version", i32 4} |
| !10 = distinct !DISubprogram(name: "vla__array_typeIP", scope: !3, file: !3, line: 17, type: !11, scopeLine: 17, spFlags: DISPFlagDefinition, unit: !2) |
| !11 = !DISubroutineType(types: !12) |
| !12 = !{null, !13} |
| !13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !14, size: 64, align: 64, dwarfAddressSpace: 0) |
| !14 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "vla__array_type") |
| !15 = !DILocation(line: 17, column: 9, scope: !10) |
| !16 = distinct !DISubprogram(name: "vla__record_typeIP", scope: !3, file: !3, line: 18, type: !17, scopeLine: 18, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !30) |
| !17 = !DISubroutineType(types: !18) |
| !18 = !{null, !19, !23} |
| !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64, align: 64, dwarfAddressSpace: 0) |
| !20 = !DICompositeType(tag: DW_TAG_structure_type, name: "vla__record_type", file: !3, line: 18, size: !DIExpression(DW_OP_push_object_address, DW_OP_deref_size, 4, DW_OP_constu, 32, DW_OP_mul, DW_OP_constu, 32, DW_OP_plus), align: 32, elements: !21, identifier: "vla__record_type") |
| !21 = !{!22, !26} |
| !22 = !DIDerivedType(tag: DW_TAG_member, name: "l1", file: !3, line: 18, baseType: !23) |
| !23 = !DISubrangeType(name: "natural", file: !24, line: 1, size: 32, align: 32, baseType: !25, lowerBound: i64 0, upperBound: i64 2147483647) |
| !24 = !DIFile(filename: "system.ads", directory: "/home/tromey/AdaCore/gnat-llvm/llvm-interface//lib/gnat-llvm/x86_64-unknown-linux-gnu/rts-native/adainclude/") |
| !25 = !DIBasicType(name: "integer", size: 32, encoding: DW_ATE_signed) |
| !26 = !DIDerivedType(tag: DW_TAG_member, name: "a1", file: !3, line: 19, baseType: !27, offset: 32) |
| !27 = !DICompositeType(tag: DW_TAG_array_type, scope: !20, file: !3, line: 19, baseType: !25, align: 32, elements: !28) |
| !28 = !{!29} |
| !29 = !DISubrangeType(baseType: !25, lowerBound: i64 1, upperBound: !22) |
| !30 = !{} |
| !31 = !DILocalVariable(name: "_init", arg: 1, scope: !16, file: !3, line: 18, type: !20, flags: DIFlagArtificial) |
| !32 = !DILocation(line: 18, column: 9, scope: !16) |
| !33 = !DILocalVariable(name: "l1", arg: 2, scope: !16, file: !3, line: 18, type: !23, flags: DIFlagArtificial) |
| !34 = !DILocation(line: 18, column: 22, scope: !16) |
| !35 = !{!36, !36, i64 0, i64 4} |
| !36 = !{!37, i64 4, !"natural#T5"} |
| !37 = !{!38, i64 4, !"natural#TN"} |
| !38 = !{!39, i64 4, !"integerB#TN"} |
| !39 = !{!"Ada Root"} |