@@ -591,35 +591,48 @@ llvm.func @fn_with_composite() {
591591
592592// -----
593593
594- // Test that Subrange works with expression and variables.
594+ // Test that Subrange/generic_subrange works with expression and variables.
595595
596596#bt = #llvm.di_basic_type <tag = DW_TAG_base_type , name = " int" >
597597#file = #llvm.di_file <" debug-info.ll" in " /" >
598598#cu = #llvm.di_compile_unit <id = distinct [1 ]<>,
599599 sourceLanguage = DW_LANG_Fortran95 , file = #file , isOptimized = false ,
600600 emissionKind = Full >
601+ #exp1 = #llvm.di_expression <[DW_OP_push_object_address , DW_OP_plus_uconst (16 ),
602+ DW_OP_deref ]>
601603#comp_ty1 = #llvm.di_composite_type <tag = DW_TAG_array_type ,
602604 name = " expr_elements" , baseType = #bt , flags = Vector ,
603- elements = #llvm.di_subrange <count = #llvm.di_expression <
604- [DW_OP_push_object_address , DW_OP_plus_uconst (16 ), DW_OP_deref ]>>>
605- #srty = #llvm.di_subroutine_type <types = #bt , #comp_ty1 >
605+ elements = #llvm.di_subrange <count = #exp1 >>
606+ #exp2 = #llvm.di_expression <[DW_OP_push_object_address , DW_OP_plus_uconst (24 ),
607+ DW_OP_deref ]>
608+ #exp3 = #llvm.di_expression <[DW_OP_push_object_address , DW_OP_plus_uconst (32 ),
609+ DW_OP_deref ]>
610+ #comp_ty2 = #llvm.di_composite_type <tag = DW_TAG_array_type ,
611+ name = " expr_elements2" , baseType = #bt , elements =
612+ #llvm.di_generic_subrange <count = #exp1 , lowerBound = #exp2 , stride = #exp3 >>
613+ #srty = #llvm.di_subroutine_type <types = #bt , #comp_ty1 , #comp_ty2 >
606614#sp = #llvm.di_subprogram <compileUnit = #cu , scope = #file , name = " subranges" ,
607615 file = #file , subprogramFlags = Definition , type = #srty >
608616#lvar = #llvm.di_local_variable <scope = #sp , name = " size" >
609617#gv = #llvm.di_global_variable <scope = #cu , name = " gv" , file = #file ,
610618 line = 3 , type = #bt >
611619#gve = #llvm.di_global_variable_expression <var = #gv , expr = <>>
612- #comp_ty2 = #llvm.di_composite_type <tag = DW_TAG_array_type ,
620+ #comp_ty3 = #llvm.di_composite_type <tag = DW_TAG_array_type ,
613621 name = " var_elements" , baseType = #bt , flags = Vector ,
614622 elements = #llvm.di_subrange <count = #lvar , stride = #gv >>
615- #lvar2 = #llvm.di_local_variable <scope = #sp , name = " var" , type = #comp_ty2 >
623+ #comp_ty4 = #llvm.di_composite_type <tag = DW_TAG_array_type ,
624+ name = " var_elements2" , baseType = #bt , elements =
625+ #llvm.di_generic_subrange <count = #lvar , lowerBound = #gv , stride = #gv >>
626+ #lvar2 = #llvm.di_local_variable <scope = #sp , name = " var" , type = #comp_ty3 >
627+ #lvar3 = #llvm.di_local_variable <scope = #sp , name = " var1" , type = #comp_ty4 >
616628#loc1 = loc (" test.f90" : 1 :1 )
617629#loc2 = loc (fused <#sp >[#loc1 ])
618630
619631llvm.mlir.global external @gv () {dbg_exprs = [#gve ]} : i64
620632
621633llvm.func @subranges (%arg: !llvm.ptr ) {
622634 llvm.intr.dbg.declare #lvar2 = %arg : !llvm.ptr
635+ llvm.intr.dbg.declare #lvar3 = %arg : !llvm.ptr
623636 llvm.return
624637} loc (#loc2 )
625638
@@ -628,11 +641,19 @@ llvm.func @subranges(%arg: !llvm.ptr) {
628641// CHECK: !DICompositeType(tag: DW_TAG_array_type, name: "expr_elements"{{.*}}elements: ![[ELEMENTS1:[0-9]+]])
629642// CHECK: ![[ELEMENTS1]] = !{![[ELEMENT1:[0-9]+]]}
630643// CHECK: ![[ELEMENT1]] = !DISubrange(count: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 16, DW_OP_deref))
644+ // CHECK: !DICompositeType(tag: DW_TAG_array_type, name: "expr_elements2"{{.*}}elements: ![[GSR_ELEMS:[0-9]+]])
645+ // CHECK: ![[GSR_ELEMS]] = !{![[GSR_ELEM:[0-9]+]]}
646+ // CHECK: ![[GSR_ELEM]] = !DIGenericSubrange(count: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 16, DW_OP_deref)
647+ // CHECK-SAME: lowerBound: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 24, DW_OP_deref)
648+ // CHECK-SAME: stride: !DIExpression(DW_OP_push_object_address, DW_OP_plus_uconst, 32, DW_OP_deref)
631649
632650// CHECK: !DICompositeType(tag: DW_TAG_array_type, name: "var_elements"{{.*}}elements: ![[ELEMENTS2:[0-9]+]])
633651// CHECK: ![[ELEMENTS2]] = !{![[ELEMENT2:[0-9]+]]}
634- // CHECK: ![[ELEMENT2]] = !DISubrange(count: ![[LV:[0-9]+]], stride: ![[GV:[0-9]+ ]])
652+ // CHECK: ![[ELEMENT2]] = !DISubrange(count: ![[LV:[0-9]+]], stride: ![[GV]])
635653// CHECK: ![[LV]] = !DILocalVariable(name: "size"{{.*}})
654+ // CHECK: !DICompositeType(tag: DW_TAG_array_type, name: "var_elements2", baseType: !{{.*}}, elements: ![[GSR_ELEMS2:[0-9]+]])
655+ // CHECK: ![[GSR_ELEMS2]] = !{![[GSR_ELEM2:[0-9]+]]}
656+ // CHECK: ![[GSR_ELEM2]] = !DIGenericSubrange(count: ![[LV]], lowerBound: ![[GV]], stride: ![[GV]])
636657
637658// -----
638659
0 commit comments