[llvm-branch-commits] [llvm] 21de99d - [[GlobalISel][IRTranslator] Fix a crash when the use of an extractvalue is a non-dominated metadata use.
Amara Emerson via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Dec 12 15:15:09 PST 2020
Author: Amara Emerson
Date: 2020-12-12T14:58:54-08:00
New Revision: 21de99d43c88c00c007a2b3e350d56328f26660e
URL: https://github.com/llvm/llvm-project/commit/21de99d43c88c00c007a2b3e350d56328f26660e
DIFF: https://github.com/llvm/llvm-project/commit/21de99d43c88c00c007a2b3e350d56328f26660e.diff
LOG: [[GlobalISel][IRTranslator] Fix a crash when the use of an extractvalue is a non-dominated metadata use.
We don't expect uses to come before defs in the CFG, so allocateVRegs() asserted.
Fixes PR48211
Added:
llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-extract-used-by-dbg.ll
Modified:
llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
index a912b9c1bd00..202163ff9507 100644
--- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp
@@ -170,7 +170,9 @@ void IRTranslator::getAnalysisUsage(AnalysisUsage &AU) const {
IRTranslator::ValueToVRegInfo::VRegListT &
IRTranslator::allocateVRegs(const Value &Val) {
- assert(!VMap.contains(Val) && "Value already allocated in VMap");
+ auto VRegsIt = VMap.findVRegs(Val);
+ if (VRegsIt != VMap.vregs_end())
+ return *VRegsIt->second;
auto *Regs = VMap.getVRegs(Val);
auto *Offsets = VMap.getOffsets(Val);
SmallVector<LLT, 4> SplitTys;
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-extract-used-by-dbg.ll b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-extract-used-by-dbg.ll
new file mode 100644
index 000000000000..dae85e6404b2
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-extract-used-by-dbg.ll
@@ -0,0 +1,400 @@
+; RUN: llc -O0 -stop-after=irtranslator -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s
+
+target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+target triple = "aarch64-unknown-fuchsia"
+
+declare void @llvm.dbg.value(metadata, metadata, metadata) #0
+; Check that we don't crash when we have a metadata use of %i not being dominated by the def.
+; CHECK-LABEL: @foo
+; CHECK: DBG_VALUE %1:_(p0), $noreg, !370, !DIExpression(DW_OP_LLVM_fragment, 0, 64)
+define hidden void @foo() unnamed_addr #1 !dbg !230 {
+ br i1 undef, label %bb4, label %bb5
+
+bb4: ; preds = %bb3
+ %i = extractvalue { i8*, i64 } undef, 0
+ ret void
+
+bb5: ; preds = %bb3
+ call void @llvm.dbg.value(metadata i8* %i, metadata !370, metadata !DIExpression(DW_OP_LLVM_fragment, 0, 64)), !dbg !372
+ ret void
+}
+
+attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
+attributes #1 = { "target-cpu"="generic" }
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!229}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !1, producer: "rustc", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !228)
+!1 = !DIFile(filename: "library/std/src/lib.rs", directory: "/b/s/w/ir/x/w/rust")
+!2 = !{!3, !11, !16, !25, !31, !36, !45, !68, !75, !83, !90, !97, !106, !115, !121, !131, !153, !159, !163, !168, !179, !184, !189, !192, !194, !210}
+!3 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "c_void", scope: !5, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !8)
+!4 = !DIFile(filename: "<unknown>", directory: "")
+!5 = !DINamespace(name: "ffi", scope: !6)
+!6 = !DINamespace(name: "core", scope: null)
+!7 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned)
+!8 = !{!9, !10}
+!9 = !DIEnumerator(name: "__variant1", value: 0, isUnsigned: true)
+!10 = !DIEnumerator(name: "__variant2", value: 1, isUnsigned: true)
+!11 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Option", scope: !12, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !13)
+!12 = !DINamespace(name: "option", scope: !6)
+!13 = !{!14, !15}
+!14 = !DIEnumerator(name: "None", value: 0)
+!15 = !DIEnumerator(name: "Some", value: 1)
+!16 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "EscapeUnicodeState", scope: !17, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !18)
+!17 = !DINamespace(name: "char", scope: !6)
+!18 = !{!19, !20, !21, !22, !23, !24}
+!19 = !DIEnumerator(name: "Done", value: 0)
+!20 = !DIEnumerator(name: "RightBrace", value: 1)
+!21 = !DIEnumerator(name: "Value", value: 2)
+!22 = !DIEnumerator(name: "LeftBrace", value: 3)
+!23 = !DIEnumerator(name: "Type", value: 4)
+!24 = !DIEnumerator(name: "Backslash", value: 5)
+!25 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Format", scope: !26, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !28)
+!26 = !DINamespace(name: "common", scope: !27)
+!27 = !DINamespace(name: "gimli", scope: null)
+!28 = !{!29, !30}
+!29 = !DIEnumerator(name: "Dwarf64", value: 8)
+!30 = !DIEnumerator(name: "Dwarf32", value: 4)
+!31 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Result", scope: !32, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !33)
+!32 = !DINamespace(name: "result", scope: !6)
+!33 = !{!34, !35}
+!34 = !DIEnumerator(name: "Ok", value: 0)
+!35 = !DIEnumerator(name: "Err", value: 1)
+!36 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Alignment", scope: !37, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !40)
+!37 = !DINamespace(name: "v1", scope: !38)
+!38 = !DINamespace(name: "rt", scope: !39)
+!39 = !DINamespace(name: "fmt", scope: !6)
+!40 = !{!41, !42, !43, !44}
+!41 = !DIEnumerator(name: "Left", value: 0)
+!42 = !DIEnumerator(name: "Right", value: 1)
+!43 = !DIEnumerator(name: "Center", value: 2)
+!44 = !DIEnumerator(name: "Unknown", value: 3)
+!45 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "ErrorKind", scope: !46, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !49)
+!46 = !DINamespace(name: "error", scope: !47)
+!47 = !DINamespace(name: "io", scope: !48)
+!48 = !DINamespace(name: "std", scope: null)
+!49 = !{!50, !51, !52, !53, !54, !55, !56, !57, !58, !59, !60, !61, !62, !63, !64, !65, !66, !67}
+!50 = !DIEnumerator(name: "NotFound", value: 0)
+!51 = !DIEnumerator(name: "PermissionDenied", value: 1)
+!52 = !DIEnumerator(name: "ConnectionRefused", value: 2)
+!53 = !DIEnumerator(name: "ConnectionReset", value: 3)
+!54 = !DIEnumerator(name: "ConnectionAborted", value: 4)
+!55 = !DIEnumerator(name: "NotConnected", value: 5)
+!56 = !DIEnumerator(name: "AddrInUse", value: 6)
+!57 = !DIEnumerator(name: "AddrNotAvailable", value: 7)
+!58 = !DIEnumerator(name: "BrokenPipe", value: 8)
+!59 = !DIEnumerator(name: "AlreadyExists", value: 9)
+!60 = !DIEnumerator(name: "WouldBlock", value: 10)
+!61 = !DIEnumerator(name: "InvalidInput", value: 11)
+!62 = !DIEnumerator(name: "InvalidData", value: 12)
+!63 = !DIEnumerator(name: "TimedOut", value: 13)
+!64 = !DIEnumerator(name: "WriteZero", value: 14)
+!65 = !DIEnumerator(name: "Interrupted", value: 15)
+!66 = !DIEnumerator(name: "Other", value: 16)
+!67 = !DIEnumerator(name: "UnexpectedEof", value: 17)
+!68 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Ordering", scope: !69, file: !4, baseType: !70, size: 8, align: 8, flags: DIFlagEnumClass, elements: !71)
+!69 = !DINamespace(name: "cmp", scope: !6)
+!70 = !DIBasicType(name: "i8", size: 8, encoding: DW_ATE_signed)
+!71 = !{!72, !73, !74}
+!72 = !DIEnumerator(name: "Less", value: -1)
+!73 = !DIEnumerator(name: "Equal", value: 0)
+!74 = !DIEnumerator(name: "Greater", value: 1)
+!75 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "DtorState", scope: !76, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !79)
+!76 = !DINamespace(name: "fast", scope: !77)
+!77 = !DINamespace(name: "local", scope: !78)
+!78 = !DINamespace(name: "thread", scope: !48)
+!79 = !{!80, !81, !82}
+!80 = !DIEnumerator(name: "Unregistered", value: 0)
+!81 = !DIEnumerator(name: "Registered", value: 1)
+!82 = !DIEnumerator(name: "RunningOrHasRun", value: 2)
+!83 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "State", scope: !84, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !85)
+!84 = !DINamespace(name: "path", scope: !48)
+!85 = !{!86, !87, !88, !89}
+!86 = !DIEnumerator(name: "Prefix", value: 0)
+!87 = !DIEnumerator(name: "StartDir", value: 1)
+!88 = !DIEnumerator(name: "Body", value: 2)
+!89 = !DIEnumerator(name: "Done", value: 3)
+!90 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "PrintFmt", scope: !91, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !93)
+!91 = !DINamespace(name: "print", scope: !92)
+!92 = !DINamespace(name: "backtrace_rs", scope: !48)
+!93 = !{!94, !95, !96}
+!94 = !DIEnumerator(name: "Short", value: 0)
+!95 = !DIEnumerator(name: "Full", value: 1)
+!96 = !DIEnumerator(name: "__Nonexhaustive", value: 2)
+!97 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "IntErrorKind", scope: !98, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !100)
+!98 = !DINamespace(name: "error", scope: !99)
+!99 = !DINamespace(name: "num", scope: !6)
+!100 = !{!101, !102, !103, !104, !105}
+!101 = !DIEnumerator(name: "Empty", value: 0)
+!102 = !DIEnumerator(name: "InvalidDigit", value: 1)
+!103 = !DIEnumerator(name: "Overflow", value: 2)
+!104 = !DIEnumerator(name: "Underflow", value: 3)
+!105 = !DIEnumerator(name: "Zero", value: 4)
+!106 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Ordering", scope: !107, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !109)
+!107 = !DINamespace(name: "atomic", scope: !108)
+!108 = !DINamespace(name: "sync", scope: !6)
+!109 = !{!110, !111, !112, !113, !114}
+!110 = !DIEnumerator(name: "Relaxed", value: 0)
+!111 = !DIEnumerator(name: "Release", value: 1)
+!112 = !DIEnumerator(name: "Acquire", value: 2)
+!113 = !DIEnumerator(name: "AcqRel", value: 3)
+!114 = !DIEnumerator(name: "SeqCst", value: 4)
+!115 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "AllocInit", scope: !116, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !118)
+!116 = !DINamespace(name: "raw_vec", scope: !117)
+!117 = !DINamespace(name: "alloc", scope: null)
+!118 = !{!119, !120}
+!119 = !DIEnumerator(name: "Uninitialized", value: 0)
+!120 = !DIEnumerator(name: "Zeroed", value: 1)
+!121 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "TINFLStatus", scope: !122, file: !4, baseType: !70, size: 8, align: 8, flags: DIFlagEnumClass, elements: !124)
+!122 = !DINamespace(name: "inflate", scope: !123)
+!123 = !DINamespace(name: "miniz_oxide", scope: null)
+!124 = !{!125, !126, !127, !128, !19, !129, !130}
+!125 = !DIEnumerator(name: "FailedCannotMakeProgress", value: 252)
+!126 = !DIEnumerator(name: "BadParam", value: 253)
+!127 = !DIEnumerator(name: "Adler32Mismatch", value: 254)
+!128 = !DIEnumerator(name: "Failed", value: 255)
+!129 = !DIEnumerator(name: "NeedsMoreInput", value: 1)
+!130 = !DIEnumerator(name: "HasMoreOutput", value: 2)
+!131 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "SectionId", scope: !26, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !132)
+!132 = !{!133, !134, !135, !136, !137, !138, !139, !140, !141, !142, !143, !144, !145, !146, !147, !148, !149, !150, !151, !152}
+!133 = !DIEnumerator(name: "DebugAbbrev", value: 0)
+!134 = !DIEnumerator(name: "DebugAddr", value: 1)
+!135 = !DIEnumerator(name: "DebugAranges", value: 2)
+!136 = !DIEnumerator(name: "DebugFrame", value: 3)
+!137 = !DIEnumerator(name: "EhFrame", value: 4)
+!138 = !DIEnumerator(name: "EhFrameHdr", value: 5)
+!139 = !DIEnumerator(name: "DebugInfo", value: 6)
+!140 = !DIEnumerator(name: "DebugLine", value: 7)
+!141 = !DIEnumerator(name: "DebugLineStr", value: 8)
+!142 = !DIEnumerator(name: "DebugLoc", value: 9)
+!143 = !DIEnumerator(name: "DebugLocLists", value: 10)
+!144 = !DIEnumerator(name: "DebugMacinfo", value: 11)
+!145 = !DIEnumerator(name: "DebugMacro", value: 12)
+!146 = !DIEnumerator(name: "DebugPubNames", value: 13)
+!147 = !DIEnumerator(name: "DebugPubTypes", value: 14)
+!148 = !DIEnumerator(name: "DebugRanges", value: 15)
+!149 = !DIEnumerator(name: "DebugRngLists", value: 16)
+!150 = !DIEnumerator(name: "DebugStr", value: 17)
+!151 = !DIEnumerator(name: "DebugStrOffsets", value: 18)
+!152 = !DIEnumerator(name: "DebugTypes", value: 19)
+!153 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "BacktraceStatus", scope: !154, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !155)
+!154 = !DINamespace(name: "backtrace", scope: !48)
+!155 = !{!156, !157, !158}
+!156 = !DIEnumerator(name: "Unsupported", value: 0)
+!157 = !DIEnumerator(name: "Disabled", value: 1)
+!158 = !DIEnumerator(name: "Captured", value: 2)
+!159 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "FloatErrorKind", scope: !160, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !161)
+!160 = !DINamespace(name: "dec2flt", scope: !99)
+!161 = !{!101, !162}
+!162 = !DIEnumerator(name: "Invalid", value: 1)
+!163 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "CharErrorKind", scope: !164, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !165)
+!164 = !DINamespace(name: "convert", scope: !17)
+!165 = !{!166, !167}
+!166 = !DIEnumerator(name: "EmptyString", value: 0)
+!167 = !DIEnumerator(name: "TooManyChars", value: 1)
+!168 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Ipv6MulticastScope", scope: !169, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !171)
+!169 = !DINamespace(name: "ip", scope: !170)
+!170 = !DINamespace(name: "net", scope: !48)
+!171 = !{!172, !173, !174, !175, !176, !177, !178}
+!172 = !DIEnumerator(name: "InterfaceLocal", value: 0)
+!173 = !DIEnumerator(name: "LinkLocal", value: 1)
+!174 = !DIEnumerator(name: "RealmLocal", value: 2)
+!175 = !DIEnumerator(name: "AdminLocal", value: 3)
+!176 = !DIEnumerator(name: "SiteLocal", value: 4)
+!177 = !DIEnumerator(name: "OrganizationLocal", value: 5)
+!178 = !DIEnumerator(name: "Global", value: 6)
+!179 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Shutdown", scope: !170, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !180)
+!180 = !{!181, !182, !183}
+!181 = !DIEnumerator(name: "Read", value: 0)
+!182 = !DIEnumerator(name: "Write", value: 1)
+!183 = !DIEnumerator(name: "Both", value: 2)
+!184 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "TryRecvError", scope: !185, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !187)
+!185 = !DINamespace(name: "mpsc", scope: !186)
+!186 = !DINamespace(name: "sync", scope: !48)
+!187 = !{!101, !188}
+!188 = !DIEnumerator(name: "Disconnected", value: 1)
+!189 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "RecvTimeoutError", scope: !185, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !190)
+!190 = !{!191, !188}
+!191 = !DIEnumerator(name: "Timeout", value: 0)
+!192 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Failure", scope: !193, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !187)
+!193 = !DINamespace(name: "sync", scope: !185)
+!194 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "_Unwind_Reason_Code", scope: !195, file: !4, baseType: !198, size: 32, align: 32, flags: DIFlagEnumClass, elements: !199)
+!195 = !DINamespace(name: "uw", scope: !196)
+!196 = !DINamespace(name: "libunwind", scope: !197)
+!197 = !DINamespace(name: "backtrace", scope: !92)
+!198 = !DIBasicType(name: "u32", size: 32, encoding: DW_ATE_unsigned)
+!199 = !{!200, !201, !202, !203, !204, !205, !206, !207, !208, !209}
+!200 = !DIEnumerator(name: "_URC_NO_REASON", value: 0)
+!201 = !DIEnumerator(name: "_URC_FOREIGN_EXCEPTION_CAUGHT", value: 1)
+!202 = !DIEnumerator(name: "_URC_FATAL_PHASE2_ERROR", value: 2)
+!203 = !DIEnumerator(name: "_URC_FATAL_PHASE1_ERROR", value: 3)
+!204 = !DIEnumerator(name: "_URC_NORMAL_STOP", value: 4)
+!205 = !DIEnumerator(name: "_URC_END_OF_STACK", value: 5)
+!206 = !DIEnumerator(name: "_URC_HANDLER_FOUND", value: 6)
+!207 = !DIEnumerator(name: "_URC_INSTALL_CONTEXT", value: 7)
+!208 = !DIEnumerator(name: "_URC_CONTINUE_UNWIND", value: 8)
+!209 = !DIEnumerator(name: "_URC_FAILURE", value: 9)
+!210 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Feature", scope: !211, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagEnumClass, elements: !214)
+!211 = !DINamespace(name: "arch", scope: !212)
+!212 = !DINamespace(name: "detect", scope: !213)
+!213 = !DINamespace(name: "std_detect", scope: !48)
+!214 = !{!215, !216, !217, !218, !219, !220, !221, !222, !223, !224, !225, !226, !227}
+!215 = !DIEnumerator(name: "asimd", value: 0, isUnsigned: true)
+!216 = !DIEnumerator(name: "pmull", value: 1, isUnsigned: true)
+!217 = !DIEnumerator(name: "fp", value: 2, isUnsigned: true)
+!218 = !DIEnumerator(name: "fp16", value: 3, isUnsigned: true)
+!219 = !DIEnumerator(name: "sve", value: 4, isUnsigned: true)
+!220 = !DIEnumerator(name: "crc", value: 5, isUnsigned: true)
+!221 = !DIEnumerator(name: "crypto", value: 6, isUnsigned: true)
+!222 = !DIEnumerator(name: "lse", value: 7, isUnsigned: true)
+!223 = !DIEnumerator(name: "rdm", value: 8, isUnsigned: true)
+!224 = !DIEnumerator(name: "rcpc", value: 9, isUnsigned: true)
+!225 = !DIEnumerator(name: "dotprod", value: 10, isUnsigned: true)
+!226 = !DIEnumerator(name: "tme", value: 11, isUnsigned: true)
+!227 = !DIEnumerator(name: "_last", value: 12, isUnsigned: true)
+!228 = !{}
+!229 = !{i32 2, !"Debug Info Version", i32 3}
+!230 = distinct !DISubprogram(name: "lstat", linkageName: "_ZN3std3sys4unix2fs5lstat17h30bd1f0595542181E", scope: !232, file: !231, line: 1107, type: !235, scopeLine: 1107, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, templateParams: !228, retainedNodes: !345)
+!231 = !DIFile(filename: "library/std/src/sys/unix/fs.rs", directory: "/b/s/w/ir/x/w/rust", checksumkind: CSK_MD5, checksum: "ae77e80deccbf04afd9757023ae02c00")
+!232 = !DINamespace(name: "fs", scope: !233)
+!233 = !DINamespace(name: "unix", scope: !234)
+!234 = !DINamespace(name: "sys", scope: !48)
+!235 = !DISubroutineType(types: !236)
+!236 = !{!237, !328}
+!237 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Result<std::sys::unix::fs::FileAttr, std::io::error::Error>", scope: !32, file: !4, size: 1216, align: 64, elements: !238, identifier: "ee0ca4d5dd60641d2ca6c0def6389cfe")
+!238 = !{!239}
+!239 = distinct !DICompositeType(tag: DW_TAG_variant_part, scope: !32, file: !4, size: 1216, align: 64, elements: !240, templateParams: !278, identifier: "ee0ca4d5dd60641d2ca6c0def6389cfe_variant_part", discriminator: !327)
+!240 = !{!241, !323}
+!241 = !DIDerivedType(tag: DW_TAG_member, name: "Ok", scope: !239, file: !4, baseType: !242, size: 1216, align: 64, extraData: i64 0)
+!242 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Ok", scope: !237, file: !4, size: 1216, align: 64, elements: !243, templateParams: !278, identifier: "ee0ca4d5dd60641d2ca6c0def6389cfe::Ok")
+!243 = !{!244}
+!244 = !DIDerivedType(tag: DW_TAG_member, name: "__0", scope: !242, file: !4, baseType: !245, size: 1152, align: 64, offset: 64)
+!245 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "FileAttr", scope: !232, file: !4, size: 1152, align: 64, elements: !246, templateParams: !228, identifier: "4de2d386e283cbd28de291794ffb960c")
+!246 = !{!247}
+!247 = !DIDerivedType(tag: DW_TAG_member, name: "stat", scope: !245, file: !4, baseType: !248, size: 1152, align: 64)
+!248 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "stat", scope: !249, file: !4, size: 1152, align: 64, elements: !252, templateParams: !228, identifier: "82d95959e3a6a4287e1e3529b4c9fa99")
+!249 = !DINamespace(name: "aarch64", scope: !250)
+!250 = !DINamespace(name: "fuchsia", scope: !251)
+!251 = !DINamespace(name: "libc", scope: null)
+!252 = !{!253, !255, !256, !257, !258, !259, !260, !261, !262, !264, !265, !267, !268, !269, !270, !271, !272, !273, !274}
+!253 = !DIDerivedType(tag: DW_TAG_member, name: "st_dev", scope: !248, file: !4, baseType: !254, size: 64, align: 64)
+!254 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned)
+!255 = !DIDerivedType(tag: DW_TAG_member, name: "st_ino", scope: !248, file: !4, baseType: !254, size: 64, align: 64, offset: 64)
+!256 = !DIDerivedType(tag: DW_TAG_member, name: "st_mode", scope: !248, file: !4, baseType: !198, size: 32, align: 32, offset: 128)
+!257 = !DIDerivedType(tag: DW_TAG_member, name: "st_nlink", scope: !248, file: !4, baseType: !254, size: 64, align: 64, offset: 192)
+!258 = !DIDerivedType(tag: DW_TAG_member, name: "st_uid", scope: !248, file: !4, baseType: !198, size: 32, align: 32, offset: 256)
+!259 = !DIDerivedType(tag: DW_TAG_member, name: "st_gid", scope: !248, file: !4, baseType: !198, size: 32, align: 32, offset: 288)
+!260 = !DIDerivedType(tag: DW_TAG_member, name: "st_rdev", scope: !248, file: !4, baseType: !254, size: 64, align: 64, offset: 320)
+!261 = !DIDerivedType(tag: DW_TAG_member, name: "__pad0", scope: !248, file: !4, baseType: !254, size: 64, align: 64, offset: 384)
+!262 = !DIDerivedType(tag: DW_TAG_member, name: "st_size", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 448)
+!263 = !DIBasicType(name: "i64", size: 64, encoding: DW_ATE_signed)
+!264 = !DIDerivedType(tag: DW_TAG_member, name: "st_blksize", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 512)
+!265 = !DIDerivedType(tag: DW_TAG_member, name: "__pad1", scope: !248, file: !4, baseType: !266, size: 32, align: 32, offset: 576)
+!266 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed)
+!267 = !DIDerivedType(tag: DW_TAG_member, name: "st_blocks", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 640)
+!268 = !DIDerivedType(tag: DW_TAG_member, name: "st_atime", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 704)
+!269 = !DIDerivedType(tag: DW_TAG_member, name: "st_atime_nsec", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 768)
+!270 = !DIDerivedType(tag: DW_TAG_member, name: "st_mtime", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 832)
+!271 = !DIDerivedType(tag: DW_TAG_member, name: "st_mtime_nsec", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 896)
+!272 = !DIDerivedType(tag: DW_TAG_member, name: "st_ctime", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 960)
+!273 = !DIDerivedType(tag: DW_TAG_member, name: "st_ctime_nsec", scope: !248, file: !4, baseType: !263, size: 64, align: 64, offset: 1024)
+!274 = !DIDerivedType(tag: DW_TAG_member, name: "__unused", scope: !248, file: !4, baseType: !275, size: 64, align: 32, offset: 1088)
+!275 = !DICompositeType(tag: DW_TAG_array_type, baseType: !198, size: 64, align: 32, elements: !276)
+!276 = !{!277}
+!277 = !DISubrange(count: 2, lowerBound: 0)
+!278 = !{!279, !280}
+!279 = !DITemplateTypeParameter(name: "T", type: !245)
+!280 = !DITemplateTypeParameter(name: "E", type: !281)
+!281 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Error", scope: !46, file: !4, size: 128, align: 64, elements: !282, templateParams: !228, identifier: "efd560081db7c51c7f6a2954ed44e089")
+!282 = !{!283}
+!283 = !DIDerivedType(tag: DW_TAG_member, name: "repr", scope: !281, file: !4, baseType: !284, size: 128, align: 64)
+!284 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Repr", scope: !46, file: !4, size: 128, align: 64, elements: !285, identifier: "df1a28723e4e04a13efa60934df6c3a6")
+!285 = !{!286}
+!286 = distinct !DICompositeType(tag: DW_TAG_variant_part, scope: !46, file: !4, size: 128, align: 64, elements: !287, templateParams: !228, identifier: "df1a28723e4e04a13efa60934df6c3a6_variant_part", discriminator: !322)
+!287 = !{!288, !292, !296}
+!288 = !DIDerivedType(tag: DW_TAG_member, name: "Os", scope: !286, file: !4, baseType: !289, size: 128, align: 64, extraData: i64 0)
+!289 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Os", scope: !284, file: !4, size: 128, align: 64, elements: !290, templateParams: !228, identifier: "df1a28723e4e04a13efa60934df6c3a6::Os")
+!290 = !{!291}
+!291 = !DIDerivedType(tag: DW_TAG_member, name: "__0", scope: !289, file: !4, baseType: !266, size: 32, align: 32, offset: 32)
+!292 = !DIDerivedType(tag: DW_TAG_member, name: "Simple", scope: !286, file: !4, baseType: !293, size: 128, align: 64, extraData: i64 1)
+!293 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Simple", scope: !284, file: !4, size: 128, align: 64, elements: !294, templateParams: !228, identifier: "df1a28723e4e04a13efa60934df6c3a6::Simple")
+!294 = !{!295}
+!295 = !DIDerivedType(tag: DW_TAG_member, name: "__0", scope: !293, file: !4, baseType: !45, size: 8, align: 8, offset: 8)
+!296 = !DIDerivedType(tag: DW_TAG_member, name: "Custom", scope: !286, file: !4, baseType: !297, size: 128, align: 64, extraData: i64 2)
+!297 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Custom", scope: !284, file: !4, size: 128, align: 64, elements: !298, templateParams: !228, identifier: "df1a28723e4e04a13efa60934df6c3a6::Custom")
+!298 = !{!299}
+!299 = !DIDerivedType(tag: DW_TAG_member, name: "__0", scope: !297, file: !4, baseType: !300, size: 64, align: 64, offset: 64)
+!300 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "Box<std::io::error::Custom>", baseType: !301, size: 64, align: 64, dwarfAddressSpace: 0)
+!301 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Custom", scope: !46, file: !4, size: 192, align: 64, elements: !302, templateParams: !228, identifier: "91f6b80e351df08f3582a1dba78d37a4")
+!302 = !{!303, !304}
+!303 = !DIDerivedType(tag: DW_TAG_member, name: "kind", scope: !301, file: !4, baseType: !45, size: 8, align: 8, offset: 128)
+!304 = !DIDerivedType(tag: DW_TAG_member, name: "error", scope: !301, file: !4, baseType: !305, size: 128, align: 64)
+!305 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Box<Error>", scope: !306, file: !4, size: 128, align: 64, elements: !307, templateParams: !316, identifier: "3cf62a354bd4fcd733d53a37dcca1555")
+!306 = !DINamespace(name: "error", scope: !48)
+!307 = !{!308, !310}
+!308 = !DIDerivedType(tag: DW_TAG_member, name: "pointer", scope: !305, file: !4, baseType: !309, size: 64, align: 64, flags: DIFlagArtificial)
+!309 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*mut u8", baseType: !7, size: 64, align: 64, dwarfAddressSpace: 0)
+!310 = !DIDerivedType(tag: DW_TAG_member, name: "vtable", scope: !305, file: !4, baseType: !311, size: 64, align: 64, offset: 64, flags: DIFlagArtificial)
+!311 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&[usize; 3]", baseType: !312, size: 64, align: 64, dwarfAddressSpace: 0)
+!312 = !DICompositeType(tag: DW_TAG_array_type, baseType: !313, size: 192, align: 64, elements: !314)
+!313 = !DIBasicType(name: "usize", size: 64, encoding: DW_ATE_unsigned)
+!314 = !{!315}
+!315 = !DISubrange(count: 3, lowerBound: 0)
+!316 = !{!317}
+!317 = !DITemplateTypeParameter(name: "T", type: !318)
+!318 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Error", scope: !306, file: !4, align: 8, elements: !319, templateParams: !228, identifier: "9aa013add12fd0abf318c4ce65feabb9")
+!319 = !{!320, !321}
+!320 = !DIDerivedType(tag: DW_TAG_member, name: "pointer", scope: !318, file: !4, baseType: !309, size: 64, align: 64, flags: DIFlagArtificial)
+!321 = !DIDerivedType(tag: DW_TAG_member, name: "vtable", scope: !318, file: !4, baseType: !311, size: 64, align: 64, offset: 64, flags: DIFlagArtificial)
+!322 = !DIDerivedType(tag: DW_TAG_member, scope: !46, file: !4, baseType: !7, size: 8, align: 8, flags: DIFlagArtificial)
+!323 = !DIDerivedType(tag: DW_TAG_member, name: "Err", scope: !239, file: !4, baseType: !324, size: 1216, align: 64, extraData: i64 1)
+!324 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Err", scope: !237, file: !4, size: 1216, align: 64, elements: !325, templateParams: !278, identifier: "ee0ca4d5dd60641d2ca6c0def6389cfe::Err")
+!325 = !{!326}
+!326 = !DIDerivedType(tag: DW_TAG_member, name: "__0", scope: !324, file: !4, baseType: !281, size: 128, align: 64, offset: 64)
+!327 = !DIDerivedType(tag: DW_TAG_member, scope: !32, file: !4, baseType: !254, size: 64, align: 64, flags: DIFlagArtificial)
+!328 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&std::path::Path", baseType: !329, size: 128, align: 64, dwarfAddressSpace: 0)
+!329 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Path", scope: !84, file: !4, align: 8, elements: !330, templateParams: !228, identifier: "59d4ec63209a24516bd1bdae88116f75")
+!330 = !{!331}
+!331 = !DIDerivedType(tag: DW_TAG_member, name: "inner", scope: !329, file: !4, baseType: !332, align: 8)
+!332 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "OsStr", scope: !333, file: !4, align: 8, elements: !335, templateParams: !228, identifier: "12ab83c4579a80c51b2aa297e78da371")
+!333 = !DINamespace(name: "os_str", scope: !334)
+!334 = !DINamespace(name: "ffi", scope: !48)
+!335 = !{!336}
+!336 = !DIDerivedType(tag: DW_TAG_member, name: "inner", scope: !332, file: !4, baseType: !337, align: 8)
+!337 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Slice", scope: !338, file: !4, align: 8, elements: !340, templateParams: !228, identifier: "5d97cefa8950795c2bd36fa94d0059f")
+!338 = !DINamespace(name: "os_str_bytes", scope: !339)
+!339 = !DINamespace(name: "sys_common", scope: !48)
+!340 = !{!341}
+!341 = !DIDerivedType(tag: DW_TAG_member, name: "inner", scope: !337, file: !4, baseType: !342, align: 8)
+!342 = !DICompositeType(tag: DW_TAG_array_type, baseType: !7, align: 8, elements: !343)
+!343 = !{!344}
+!344 = !DISubrange(count: -1, lowerBound: 0)
+!345 = !{!346, !347, !360, !362, !364, !366, !368}
+!346 = !DILocalVariable(name: "p", arg: 1, scope: !230, file: !231, line: 1107, type: !328)
+!347 = !DILocalVariable(name: "p", scope: !348, file: !231, line: 1108, type: !349, align: 8)
+!348 = distinct !DILexicalBlock(scope: !230, file: !231, line: 1108, column: 5)
+!349 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "CString", scope: !350, file: !4, size: 128, align: 64, elements: !351, templateParams: !228, identifier: "217f90bcda5db70412428eb4d0eb8771")
+!350 = !DINamespace(name: "c_str", scope: !334)
+!351 = !{!352}
+!352 = !DIDerivedType(tag: DW_TAG_member, name: "inner", scope: !349, file: !4, baseType: !353, size: 128, align: 64)
+!353 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "alloc::boxed::Box<[u8]>", file: !4, size: 128, align: 64, elements: !354, templateParams: !358, identifier: "402fa17fda502b3dfe8af04b4513434e")
+!354 = !{!355, !357}
+!355 = !DIDerivedType(tag: DW_TAG_member, name: "data_ptr", scope: !353, file: !4, baseType: !356, size: 64, align: 64)
+!356 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*const u8", baseType: !7, size: 64, align: 64, dwarfAddressSpace: 0)
+!357 = !DIDerivedType(tag: DW_TAG_member, name: "length", scope: !353, file: !4, baseType: !313, size: 64, align: 64, offset: 64)
+!358 = !{!359}
+!359 = !DITemplateTypeParameter(name: "T", type: !342)
+!360 = !DILocalVariable(name: "err", scope: !361, file: !231, line: 1108, type: !281, align: 8)
+!361 = distinct !DILexicalBlock(scope: !230, file: !231, line: 1108, column: 20)
+!362 = !DILocalVariable(name: "val", scope: !363, file: !231, line: 1108, type: !349, align: 8)
+!363 = distinct !DILexicalBlock(scope: !230, file: !231, line: 1108, column: 13)
+!364 = !DILocalVariable(name: "stat", scope: !365, file: !231, line: 1121, type: !248, align: 8)
+!365 = distinct !DILexicalBlock(scope: !348, file: !231, line: 1121, column: 5)
+!366 = !DILocalVariable(name: "err", scope: !367, file: !231, line: 1122, type: !281, align: 8)
+!367 = distinct !DILexicalBlock(scope: !365, file: !231, line: 1122, column: 51)
+!368 = !DILocalVariable(name: "val", scope: !369, file: !231, line: 1122, type: !266, align: 4)
+!369 = distinct !DILexicalBlock(scope: !365, file: !231, line: 1122, column: 5)
+!370 = !DILocalVariable(name: "err", scope: !371, file: !231, line: 1108, type: !281, align: 8)
+!371 = distinct !DILexicalBlock(scope: !230, file: !231, line: 1108, column: 20)
+!372 = !DILocation(line: 0, scope: !371)
More information about the llvm-branch-commits
mailing list