xref: /llvm-project/llvm/test/DebugInfo/X86/dbg-rust-valid-enum-as-scope.ll (revision ca715de4bcf31085ee7a35aaf60843e994801f10)
19ec5acc8SDavid Blaikie; RUN: %llc_dwarf -filetype=obj -o - %s | llvm-dwarfdump -| FileCheck --implicit-check-not=DW_TAG --implicit-check-not=NULL %s
29ec5acc8SDavid Blaikie; CHECK: DW_TAG_compile_unit
39ec5acc8SDavid Blaikie; CHECK:   DW_AT_language	(DW_LANG_Rust)
49ec5acc8SDavid Blaikie; CHECK:   DW_TAG_namespace
59ec5acc8SDavid Blaikie; CHECK:     DW_TAG_enumeration_type
6*ca715de4SDavid Spickett; CHECK:     DW_AT_type (0x{{[0-9A-Fa-f]+}} "u8")
79ec5acc8SDavid Blaikie; CHECK:     DW_AT_name	("E")
89ec5acc8SDavid Blaikie; CHECK:       DW_TAG_enumerator
99ec5acc8SDavid Blaikie; CHECK:       DW_TAG_enumerator
109ec5acc8SDavid Blaikie; CHECK:       DW_TAG_subprogram
119ec5acc8SDavid Blaikie; CHECK:         DW_AT_name	("f")
129ec5acc8SDavid Blaikie; CHECK:         DW_TAG_formal_parameter
139ec5acc8SDavid Blaikie; CHECK:         NULL
149ec5acc8SDavid Blaikie; CHECK:       NULL
159ec5acc8SDavid Blaikie; CHECK:     NULL
16*ca715de4SDavid Spickett; CHECK:   DW_TAG_base_type
17*ca715de4SDavid Spickett; CHECK:     DW_AT_name ("u8")
189ec5acc8SDavid Blaikie; CHECK:   DW_TAG_pointer_type
199ec5acc8SDavid Blaikie; CHECK:   NULL
209ec5acc8SDavid Blaikie
219ec5acc8SDavid Blaikie; This file comes from rustc output, with the input program
229ec5acc8SDavid Blaikie;         pub enum E { A, B }
239ec5acc8SDavid Blaikie;         impl E {
249ec5acc8SDavid Blaikie;             pub fn f(&self) {}
259ec5acc8SDavid Blaikie;         }
269ec5acc8SDavid Blaikie; compiled with `rustc --crate-type=lib a.rs --emit llvm-ir -g` and
279ec5acc8SDavid Blaikie; copying the resulting `a.ll` file to here. This was done with rustc
289ec5acc8SDavid Blaikie; at nightly from 2021-09-28 (git 8f8092cc3), but rustc 1.57 should
299ec5acc8SDavid Blaikie; produce similar or identical output.
309ec5acc8SDavid Blaikie
319ec5acc8SDavid Blaikie; ModuleID = 'a.a146b597-cgu.0'
329ec5acc8SDavid Blaikiesource_filename = "a.a146b597-cgu.0"
339ec5acc8SDavid Blaikietarget datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
349ec5acc8SDavid Blaikietarget triple = "x86_64-apple-macosx10.7.0"
359ec5acc8SDavid Blaikie
369ec5acc8SDavid Blaikie; a::E::f
379ec5acc8SDavid Blaikie; Function Attrs: uwtable
385a288fa3SNikita Popovdefine void @_ZN1a1E1f17h4fcb50ce732fb2a7E(ptr align 1 dereferenceable(1) %self) unnamed_addr #0 !dbg !13 {
399ec5acc8SDavid Blaikiestart:
405a288fa3SNikita Popov  %self.dbg.spill = alloca ptr, align 8
415a288fa3SNikita Popov  store ptr %self, ptr %self.dbg.spill, align 8
425a288fa3SNikita Popov  call void @llvm.dbg.declare(metadata ptr %self.dbg.spill, metadata !19, metadata !DIExpression()), !dbg !21
439ec5acc8SDavid Blaikie  ret void, !dbg !22
449ec5acc8SDavid Blaikie}
459ec5acc8SDavid Blaikie
469ec5acc8SDavid Blaikie; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
479ec5acc8SDavid Blaikiedeclare void @llvm.dbg.declare(metadata, metadata, metadata) #1
489ec5acc8SDavid Blaikie
499ec5acc8SDavid Blaikieattributes #0 = { uwtable "frame-pointer"="all" "probe-stack"="__rust_probestack" "target-cpu"="core2" }
509ec5acc8SDavid Blaikieattributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
519ec5acc8SDavid Blaikie
529ec5acc8SDavid Blaikie!llvm.module.flags = !{!0, !1, !2}
539ec5acc8SDavid Blaikie!llvm.dbg.cu = !{!3}
549ec5acc8SDavid Blaikie
559ec5acc8SDavid Blaikie!0 = !{i32 7, !"PIC Level", i32 2}
569ec5acc8SDavid Blaikie!1 = !{i32 2, !"Dwarf Version", i32 2}
579ec5acc8SDavid Blaikie!2 = !{i32 2, !"Debug Info Version", i32 3}
589ec5acc8SDavid Blaikie!3 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !4, producer: "clang LLVM (rustc version 1.57.0-nightly (8f8092cc3 2021-09-28))", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !5)
599ec5acc8SDavid Blaikie!4 = !DIFile(filename: "a.rs/@/a.a146b597-cgu.0", directory: "/Users/augie")
609ec5acc8SDavid Blaikie!5 = !{!6}
619ec5acc8SDavid Blaikie!6 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "E", scope: !8, file: !7, baseType: !9, size: 8, align: 8, flags: DIFlagEnumClass, elements: !10)
629ec5acc8SDavid Blaikie!7 = !DIFile(filename: "<unknown>", directory: "")
639ec5acc8SDavid Blaikie!8 = !DINamespace(name: "a", scope: null)
649ec5acc8SDavid Blaikie!9 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned)
659ec5acc8SDavid Blaikie!10 = !{!11, !12}
669ec5acc8SDavid Blaikie!11 = !DIEnumerator(name: "A", value: 0)
679ec5acc8SDavid Blaikie!12 = !DIEnumerator(name: "B", value: 1)
689ec5acc8SDavid Blaikie!13 = distinct !DISubprogram(name: "f", linkageName: "_ZN1a1E1f17h4fcb50ce732fb2a7E", scope: !6, file: !14, line: 3, type: !15, scopeLine: 3, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !3, templateParams: !20, retainedNodes: !18)
699ec5acc8SDavid Blaikie!14 = !DIFile(filename: "a.rs", directory: "/Users/augie", checksumkind: CSK_MD5, checksum: "ab4ce84c27ef6fd0be1ef78e8131faa8")
709ec5acc8SDavid Blaikie!15 = !DISubroutineType(types: !16)
719ec5acc8SDavid Blaikie!16 = !{null, !17}
729ec5acc8SDavid Blaikie!17 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&E", baseType: !6, size: 64, align: 64, dwarfAddressSpace: 0)
739ec5acc8SDavid Blaikie!18 = !{!19}
749ec5acc8SDavid Blaikie!19 = !DILocalVariable(name: "self", arg: 1, scope: !13, file: !14, line: 3, type: !17)
759ec5acc8SDavid Blaikie!20 = !{}
769ec5acc8SDavid Blaikie!21 = !DILocation(line: 3, column: 14, scope: !13)
779ec5acc8SDavid Blaikie!22 = !DILocation(line: 3, column: 23, scope: !13)
78