(original) (raw)
So, 90% of the time I've seen this, it was memory corruption, usually use after free. I know I fixed one after 5.0 branched.
You should compile with address sanitizer enabled, and I suspect you will find the issue quicky.
If not, we really need ir that reproduces it.
On Sun, Sep 17, 2017, 12:27 PM Andrew Kelley via llvm-dev <llvm-dev@lists.llvm.org> wrote:
I think I forgot to mention, the IR does not reproduce the problem. It has to be using the LLVM API. Some kind of in-memory state that gets fixed when serialized and deserialized with IR.\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_On Sun, Sep 17, 2017 at 2:12 PM, Davide Italiano <davide@freebsd.org> wrote:Can you please open a bug on bugzilla and attach the ir testcase? Your fix doesn't look right (just hiding the assertion failure)On Sep 17, 2017 10:45 AM, "Andrew Kelley via llvm-dev" <llvm-dev@lists.llvm.org> wrote:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_What do you think about this patch?--- a/llvm/lib/Transforms/Scalar/NewGVN.cpp+++ b/llvm/lib/Transforms/Scalar/NewGVN.cpp@@ -732,7 +732,7 @@ private:MemoryPhi *getMemoryAccess(const BasicBlock *) const;template <class T, class Range> T *getMinDFSOfRange(const Range &) const;unsigned InstrToDFSNum(const Value *V) const {- assert(isa(V) && "This should not be used for MemoryAccesses");+ assert(V == nullptr || (isa(V) && "This should not be used for MemoryAccesses"));return InstrDFS.lookup(V);}On Sat, Sep 16, 2017 at 1:48 PM, Andrew Kelley <superjoe30@gmail.com> wrote:When zig updated to llvm 5 we started hitting this assertion:zig: /home/andy/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:106: static bool llvm::isa_impl_cl<To, const From*>::doit(const From*) [with To = llvm::Instruction; From = llvm::Value]: Assertion `Val && "isa<> used on a null pointer"' failed.I wonder if however this was caused by an invalid assertion, because up the stack is#8 0x0000000004b58e68 in (anonymous namespace)::NewGVN::InstrToDFSNum (this=0x7fffffffaf80,V=0x0) at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:735735 assert(isa(V) && "This should not be used for MemoryAccesses");With assertions off the code works fine.Can anyone provide some guidance?Here is a full backtrace:zig: /home/andy/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:106: static bool llvm::isa_impl_cl<To, const From*>::doit(const From*) [with To = llvm::Instruction; From = llvm::Value]: Assertion `Val && "isa<> used on a null pointer"' failed.Program received signal SIGABRT, Aborted.0x00007ffff698f3d4 in raise ()from /nix/store/s7dw1yngwiskqa2ac1bkc6m9g7740agg-glibc-2.25/lib/libc.so.6(gdb) bt#0 0x00007ffff698f3d4 in raise ()from /nix/store/s7dw1yngwiskqa2ac1bkc6m9g7740agg-glibc-2.25/lib/libc.so.6#1 0x00007ffff699083a in abort ()from /nix/store/s7dw1yngwiskqa2ac1bkc6m9g7740agg-glibc-2.25/lib/libc.so.6#2 0x00007ffff69881a7 in __assert_fail_base ()from /nix/store/s7dw1yngwiskqa2ac1bkc6m9g7740agg-glibc-2.25/lib/libc.so.6#3 0x00007ffff6988252 in __assert_fail ()from /nix/store/s7dw1yngwiskqa2ac1bkc6m9g7740agg-glibc-2.25/lib/libc.so.6#4 0x0000000002d70389 in llvm::isa_impl_cl<llvm::Instruction, llvm::Value const*>::doit (Val=0x0) at /home/andy/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:106#5 0x0000000002d4f8af in llvm::isa_impl_wrap<llvm::Instruction, llvm::Value const*, llvm::Value const*>::doit (Val=@0x7fffffffa678: 0x0)at /home/andy/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:133#6 0x0000000002ece9a3 in llvm::isa_impl_wrap<llvm::Instruction, llvm::Value const* const, llvm::Value const*>::doit (Val=@0x7fffffffa6b0: 0x0)at /home/andy/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:125#7 0x0000000002ecd4f4 in llvm::isa<llvm::Instruction, llvm::Value const*> (Val=@0x7fffffffa6b0: 0x0)at /home/andy/downloads/llvm-project/llvm/include/llvm/Support/Casting.h:144#8 0x0000000004b58e68 in (anonymous namespace)::NewGVN::InstrToDFSNum (this=0x7fffffffaf80,V=0x0) at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:735#9 0x0000000004b6870d in (anonymous namespace)::NewGVN::touchAndErase<llvm::DenseMap<llvm::Value const*, llvm::SmallPtrSet<llvm::Value*, 2u> >, llvm::Value*> (this=0x7fffffffaf80, M=...,Key=@0x7fffffffa790: 0x9154cf8)at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:1930#10 0x0000000004b5d9b7 in (anonymous namespace)::NewGVN::markUsersTouched (this=0x7fffffffaf80,V=0x9154cf8) at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:1946#11 0x0000000004b5f141 in (anonymous namespace)::NewGVN::performCongruenceFinding (this=0x7fffffffaf80, I=0x9154cf8, E=0x91d7b70)at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:2269#12 0x0000000004b62174 in (anonymous namespace)::NewGVN::valueNumberInstruction (this=0x7fffffffaf80, I=0x9154cf8)at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:2801#13 0x0000000004b63b4f in (anonymous namespace)::NewGVN::iterateTouchedInstructions (this=0x7fffffffaf80)at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:3094#14 0x0000000004b6431c in (anonymous namespace)::NewGVN::runGVN (this=0x7fffffffaf80)at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:3165#15 0x0000000004b678db in (anonymous namespace)::NewGVNLegacyPass::runOnFunction (this=0x910ea50, F=...)at /home/andy/downloads/llvm-project/llvm/lib/Transforms/Scalar/NewGVN.cpp:3904#16 0x00000000054d10fd in llvm::FPPassManager::runOnFunction (this=0x9102260, F=...)at /home/andy/downloads/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1514#17 0x0000000004f2a375 in (anonymous namespace)::CGPassManager::RunPassOnSCC (this=0x9100f00,P=0x9102260, CurSCC=..., CG=..., CallGraphUpToDate=@0x7fffffffbc2f: true,DevirtualizedCall=@0x7fffffffbccf: false)at /home/andy/downloads/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:149#18 0x0000000004f2b349 in (anonymous namespace)::CGPassManager::RunAllPassesOnSCC (this=0x9100f00, CurSCC=..., CG=..., DevirtualizedCall=@0x7fffffffbccf: false)at /home/andy/downloads/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:419#19 0x0000000004f2b643 in (anonymous namespace)::CGPassManager::runOnModule (this=0x9100f00,M=...) at /home/andy/downloads/llvm-project/llvm/lib/Analysis/CallGraphSCCPass.cpp:474#20 0x00000000054d15c1 in (anonymous namespace)::MPPassManager::runOnModule (this=0x90f9970,---Type to continue, or q to quit---M=...) at /home/andy/downloads/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1591#21 0x00000000054d1c73 in llvm::legacy::PassManagerImpl::run (this=0x90f9480, M=...)at /home/andy/downloads/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1694#22 0x00000000054d1e7f in llvm::legacy::PassManager::run (this=0x7fffffffc010, M=...)at /home/andy/downloads/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1725#23 0x0000000001d4017d in ZigLLVMTargetMachineEmitToFile (targ_machine_ref=0x9080d50,module_ref=0x907e870, filename=0x90cf360 "./zig-cache/test.o", file_type=LLVMObjectFile,error_message=0x7fffffffc2f8, is_debug=false) at /home/andy/dev/zig/src/zig_llvm.cpp:166#24 0x0000000001cd041d in do_code_gen (g=0x907a980) at /home/andy/dev/zig/src/codegen.cpp:4379#25 0x0000000001cd4634 in codegen_build (g=0x907a980) at /home/andy/dev/zig/src/codegen.cpp:5484#26 0x0000000001d1d564 in main (argc=4, argv=0x7fffffffca18)at /home/andy/dev/zig/src/main.cpp:666Here's the smallest zig test case to cause the problem:export fn entry() {var bytes: []const u8 = "format";write(bytes);}pub fn write(bytes: []const u8) {var index: usize = 0;var src_index: usize = 0;while (src_index < bytes.len) {const dest_space_left = 1 - index;const b = bytes.len - src_index;const copy_amt = if (dest_space_left < b) dest_space_left else b;index += copy_amt;src_index += copy_amt;}}pub fn panic(msg: []const u8) -> noreturn { while (true) {} }compile with ./zig build_obj test.zig --release-safeThis does the equivalent of -O3The IR that it produces; ModuleID = 'test'source_filename = "test"target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"target triple = "x86_64-unknown-linux-gnu"%"[]u8" = type { i8*, i64 }@__zig_panic_implementation_provided = internal unnamed_addr constant i1 true, align 1@0 = internal unnamed_addr constant i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0), align 8@1 = internal unnamed_addr constant [6 x i8] c"format", align 1@2 = internal unnamed_addr constant { i8*, i64 } { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @1, i64 0, i64 0), i64 6 }, align 8@3 = internal unnamed_addr constant i8* getelementptr inbounds ([16 x i8], [16 x i8]* @4, i64 0, i64 0), align 8@4 = internal unnamed_addr constant [16 x i8] c"integer overflow", align 1@5 = internal unnamed_addr constant { i8*, i64 } { i8* getelementptr inbounds ([16 x i8], [16 x i8]* @4, i64 0, i64 0), i64 16 }, align 8; Function Attrs: nobuiltin nounwinddefine void @entry() #0 !dbg !16 {Entry:%bytes = alloca %"[]u8", align 8%0 = bitcast %"[]u8"* %bytes to i8*, !dbg !31call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast ({ i8*, i64 }* @2 to i8*), i64 16, i32 8, i1 false), !dbg !31call void @llvm.dbg.declare(metadata %"[]u8"* %bytes, metadata !22, metadata !32), !dbg !31call fastcc void @write(%"[]u8"* byval %bytes), !dbg !33ret void, !dbg !35}; Function Attrs: cold nobuiltin noreturn nounwinddefine linkonce coldcc void @__zig_panic(i8* nonnull readonly, i64) #1 !dbg !36 {Entry:%2 = alloca %"[]u8", align 8%message_ptr = alloca i8*, align 8%message_len = alloca i64, align 8store i8* %0, i8** %message_ptr, align 8call void @llvm.dbg.declare(metadata i8** %message_ptr, metadata !41, metadata !32), !dbg !44store i64 %1, i64* %message_len, align 8call void @llvm.dbg.declare(metadata i64* %message_len, metadata !42, metadata !32), !dbg !45%3 = load i64, i64* %message_len, align 8, !dbg !46%4 = load i8*, i8** %message_ptr, align 8, !dbg !50%5 = getelementptr inbounds %"[]u8", %"[]u8"* %2, i32 0, i32 0, !dbg !50%6 = getelementptr inbounds i8, i8* %4, i64 0, !dbg !50store i8* %6, i8** %5, align 8, !dbg !50%7 = getelementptr inbounds %"[]u8", %"[]u8"* %2, i32 0, i32 1, !dbg !50%8 = sub nsw i64 %3, 0, !dbg !50store i64 %8, i64* %7, align 8, !dbg !50call fastcc void @panic(%"[]u8"* byval %2), !dbg !51unreachable, !dbg !51}; Function Attrs: nobuiltin nounwinddefine internal fastcc void @write(%"[]u8"* byval nonnull readonly) unnamed_addr #0 !dbg !52 {Entry:%index = alloca i64, align 8%src_index = alloca i64, align 8%dest_space_left = alloca i64, align 8%b = alloca i64, align 8%copy_amt = alloca i64, align 8call void @llvm.dbg.declare(metadata %"[]u8"* %0, metadata !57, metadata !32), !dbg !70store i64 0, i64* %index, align 8, !dbg !71call void @llvm.dbg.declare(metadata i64* %index, metadata !58, metadata !32), !dbg !71store i64 0, i64* %src_index, align 8, !dbg !72call void @llvm.dbg.declare(metadata i64* %src_index, metadata !61, metadata !32), !dbg !72br label %WhileCond, !dbg !73WhileCond: ; preds = %OverflowOk6, %Entry%1 = load i64, i64* %src_index, align 8, !dbg !74%2 = getelementptr inbounds %"[]u8", %"[]u8"* %0, i32 0, i32 1, !dbg !75%3 = load i64, i64* %2, align 8, !dbg !75%4 = icmp ult i64 %1, %3, !dbg !76br i1 %4, label %WhileBody, label %WhileEnd, !dbg !76WhileBody: ; preds = %WhileCond%5 = load i64, i64* %index, align 8, !dbg !77%6 = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 1, i64 %5), !dbg !78%7 = extractvalue { i64, i1 } %6, 0, !dbg !78%8 = extractvalue { i64, i1 } %6, 1, !dbg !78br i1 %8, label %OverflowFail, label %OverflowOk, !dbg !78WhileEnd: ; preds = %WhileCondret void, !dbg !79Then: ; preds = %OverflowOk2%9 = load i64, i64* %dest_space_left, align 8, !dbg !80br label %EndIf, !dbg !81Else: ; preds = %OverflowOk2%10 = load i64, i64* %b, align 8, !dbg !82br label %EndIf, !dbg !81EndIf: ; preds = %Else, %Then%11 = phi i64 [ %9, %Then ], [ %10, %Else ], !dbg !81store i64 %11, i64* %copy_amt, align 8, !dbg !83call void @llvm.dbg.declare(metadata i64* %copy_amt, metadata !68, metadata !32), !dbg !83%12 = load i64, i64* %index, align 8, !dbg !84%13 = load i64, i64* %copy_amt, align 8, !dbg !86%14 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %12, i64 %13), !dbg !87%15 = extractvalue { i64, i1 } %14, 0, !dbg !87%16 = extractvalue { i64, i1 } %14, 1, !dbg !87br i1 %16, label %OverflowFail3, label %OverflowOk4, !dbg !87OverflowFail: ; preds = %WhileBody%17 = load i8*, i8** getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 0), align 8, !dbg !78%18 = load i64, i64* getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 1), align 8, !dbg !78call coldcc void @__zig_panic(i8* %17, i64 %18), !dbg !78unreachable, !dbg !78OverflowOk: ; preds = %WhileBodystore i64 %7, i64* %dest_space_left, align 8, !dbg !88call void @llvm.dbg.declare(metadata i64* %dest_space_left, metadata !63, metadata !32), !dbg !88%19 = getelementptr inbounds %"[]u8", %"[]u8"* %0, i32 0, i32 1, !dbg !89%20 = load i64, i64* %19, align 8, !dbg !89%21 = load i64, i64* %src_index, align 8, !dbg !90%22 = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 %20, i64 %21), !dbg !91%23 = extractvalue { i64, i1 } %22, 0, !dbg !91%24 = extractvalue { i64, i1 } %22, 1, !dbg !91br i1 %24, label %OverflowFail1, label %OverflowOk2, !dbg !91OverflowFail1: ; preds = %OverflowOk%25 = load i8*, i8** getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 0), align 8, !dbg !91%26 = load i64, i64* getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 1), align 8, !dbg !91call coldcc void @__zig_panic(i8* %25, i64 %26), !dbg !91unreachable, !dbg !91OverflowOk2: ; preds = %OverflowOkstore i64 %23, i64* %b, align 8, !dbg !92call void @llvm.dbg.declare(metadata i64* %b, metadata !66, metadata !32), !dbg !92%27 = load i64, i64* %dest_space_left, align 8, !dbg !93%28 = load i64, i64* %b, align 8, !dbg !94%29 = icmp ult i64 %27, %28, !dbg !95br i1 %29, label %Then, label %Else, !dbg !95OverflowFail3: ; preds = %EndIf%30 = load i8*, i8** getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 0), align 8, !dbg !87%31 = load i64, i64* getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 1), align 8, !dbg !87call coldcc void @__zig_panic(i8* %30, i64 %31), !dbg !87unreachable, !dbg !87OverflowOk4: ; preds = %EndIfstore i64 %15, i64* %index, align 8, !dbg !87%32 = load i64, i64* %src_index, align 8, !dbg !96%33 = load i64, i64* %copy_amt, align 8, !dbg !97%34 = call { i64, i1 } @llvm.uadd.with.overflow.i64(i64 %32, i64 %33), !dbg !98%35 = extractvalue { i64, i1 } %34, 0, !dbg !98%36 = extractvalue { i64, i1 } %34, 1, !dbg !98br i1 %36, label %OverflowFail5, label %OverflowOk6, !dbg !98OverflowFail5: ; preds = %OverflowOk4%37 = load i8*, i8** getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 0), align 8, !dbg !98%38 = load i64, i64* getelementptr inbounds ({ i8*, i64 }, { i8*, i64 }* @5, i32 0, i32 1), align 8, !dbg !98call coldcc void @__zig_panic(i8* %37, i64 %38), !dbg !98unreachable, !dbg !98OverflowOk6: ; preds = %OverflowOk4store i64 %35, i64* %src_index, align 8, !dbg !98br label %WhileCond, !dbg !73}; Function Attrs: nobuiltin noreturn nounwinddefine internal fastcc void @panic(%"[]u8"* byval nonnull readonly) unnamed_addr #2 !dbg !99 {Entry:call void @llvm.dbg.declare(metadata %"[]u8"* %0, metadata !101, metadata !32), !dbg !102br label %WhileCond, !dbg !103WhileCond: ; preds = %WhileCond, %Entrybr label %WhileCond, !dbg !103}; Function Attrs: argmemonly nounwinddeclare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #3; Function Attrs: nounwind readnone speculatabledeclare void @llvm.dbg.declare(metadata, metadata, metadata) #4; Function Attrs: nounwind readnone speculatabledeclare { i64, i1 } @llvm.usub.with.overflow.i64(i64, i64) #4; Function Attrs: nounwind readnone speculatabledeclare { i64, i1 } @llvm.uadd.with.overflow.i64(i64, i64) #4attributes #0 = { nobuiltin nounwind }attributes #1 = { cold nobuiltin noreturn nounwind }attributes #2 = { nobuiltin noreturn nounwind }attributes #3 = { argmemonly nounwind }attributes #4 = { nounwind readnone speculatable }!llvm.module.flags = !{!0}!llvm.dbg.cu = !{!1}!0 = !{i32 2, !"Debug Info Version", i32 3}!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "zig 0.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !3, globals: !12)!2 = !DIFile(filename: "test", directory: ".")!3 = !{!4}!4 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "GlobalLinkage", scope: !5, file: !5, line: 138, baseType: !6, size: 8, align: 8, elements: !7)!5 = !DIFile(filename: "builtin.zig", directory: "/home/andy/dev/zig/build-llvm5-debug/zig-cache")!6 = !DIBasicType(name: "u3", size: 8, encoding: DW_ATE_unsigned)!7 = !{!8, !9, !10, !11}!8 = !DIEnumerator(name: "Internal", value: 0)!9 = !DIEnumerator(name: "Strong", value: 1)!10 = !DIEnumerator(name: "Weak", value: 2)!11 = !DIEnumerator(name: "LinkOnce", value: 3)!12 = !{!13}!13 = !DIGlobalVariableExpression(var: !14)!14 = distinct !DIGlobalVariable(name: "__zig_panic_implementation_provided", linkageName: "__zig_panic_implementation_provided", scope: !5, file: !5, line: 201, type: !15, isLocal: true, isDefinition: true)!15 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)!16 = distinct !DISubprogram(name: "entry", scope: !17, file: !17, type: !18, isLocal: false, isDefinition: true, isOptimized: true, unit: !1, variables: !21)!17 = !DIFile(filename: "test.zig", directory: "/home/andy/dev/zig/build-llvm5-debug")!18 = !DISubroutineType(types: !19)!19 = !{!20}!20 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)!21 = !{!22}!22 = !DILocalVariable(name: "bytes", scope: !23, file: !17, line: 2, type: !24)!23 = distinct !DILexicalBlock(scope: !16, file: !17, line: 1, column: 19)!24 = !DICompositeType(tag: DW_TAG_structure_type, name: "[]u8", size: 128, align: 64, elements: !25)!25 = !{!26, !29}!26 = !DIDerivedType(tag: DW_TAG_member, name: "ptr", scope: !24, baseType: !27, size: 64, align: 64)!27 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&u8", baseType: !28, size: 64, align: 64)!28 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned_char)!29 = !DIDerivedType(tag: DW_TAG_member, name: "len", scope: !24, baseType: !30, size: 64, align: 64, offset: 64)!30 = !DIBasicType(name: "usize", size: 64, encoding: DW_ATE_unsigned)!31 = !DILocation(line: 2, column: 5, scope: !23)!32 = !DIExpression()!33 = !DILocation(line: 3, column: 10, scope: !34)!34 = distinct !DILexicalBlock(scope: !23, file: !17, line: 2, column: 5)!35 = !DILocation(line: 1, column: 19, scope: !16)!36 = distinct !DISubprogram(name: "__zig_panic", scope: !37, file: !37, line: 7, type: !38, isLocal: false, isDefinition: true, scopeLine: 7, isOptimized: true, unit: !1, variables: !40)!37 = !DIFile(filename: "zigrt.zig", directory: "/home/andy/dev/zig/build-llvm5-debug/lib/zig/std/special")!38 = !DISubroutineType(types: !39)!39 = !{!20, !27, !30}!40 = !{!41, !42}!41 = !DILocalVariable(name: "message_ptr", arg: 1, scope: !36, file: !37, line: 7, type: !27)!42 = !DILocalVariable(name: "message_len", arg: 2, scope: !43, file: !37, line: 7, type: !30)!43 = distinct !DILexicalBlock(scope: !36, file: !37, line: 7, column: 30)!44 = !DILocation(line: 7, column: 30, scope: !36)!45 = !DILocation(line: 7, column: 54, scope: !43)!46 = !DILocation(line: 12, column: 48, scope: !47)!47 = distinct !DILexicalBlock(scope: !48, file: !37, line: 11, column: 54)!48 = distinct !DILexicalBlock(scope: !49, file: !37, line: 7, column: 86)!49 = distinct !DILexicalBlock(scope: !43, file: !37, line: 7, column: 54)!50 = !DILocation(line: 12, column: 43, scope: !47)!51 = !DILocation(line: 12, column: 31, scope: !47)!52 = distinct !DISubprogram(name: "write", scope: !17, file: !17, line: 6, type: !53, isLocal: true, isDefinition: true, scopeLine: 6, isOptimized: true, unit: !1, variables: !56)!53 = !DISubroutineType(types: !54)!54 = !{!20, !55}!55 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&[]const u8", baseType: !24, size: 64, align: 64)!56 = !{!57, !58, !61, !63, !66, !68}!57 = !DILocalVariable(name: "bytes", arg: 1, scope: !52, file: !17, line: 6, type: !24)!58 = !DILocalVariable(name: "index", scope: !59, file: !17, line: 7, type: !30)!59 = distinct !DILexicalBlock(scope: !60, file: !17, line: 6, column: 33)!60 = distinct !DILexicalBlock(scope: !52, file: !17, line: 6, column: 14)!61 = !DILocalVariable(name: "src_index", scope: !62, file: !17, line: 9, type: !30)!62 = distinct !DILexicalBlock(scope: !59, file: !17, line: 7, column: 5)!63 = !DILocalVariable(name: "dest_space_left", scope: !64, file: !17, line: 12, type: !30)!64 = distinct !DILexicalBlock(scope: !65, file: !17, line: 11, column: 35)!65 = distinct !DILexicalBlock(scope: !62, file: !17, line: 9, column: 5)!66 = !DILocalVariable(name: "b", scope: !67, file: !17, line: 13, type: !30)!67 = distinct !DILexicalBlock(scope: !64, file: !17, line: 12, column: 9)!68 = !DILocalVariable(name: "copy_amt", scope: !69, file: !17, line: 14, type: !30)!69 = distinct !DILexicalBlock(scope: !67, file: !17, line: 13, column: 9)!70 = !DILocation(line: 6, column: 14, scope: !52)!71 = !DILocation(line: 7, column: 5, scope: !59)!72 = !DILocation(line: 9, column: 5, scope: !62)!73 = !DILocation(line: 11, column: 5, scope: !65)!74 = !DILocation(line: 11, column: 12, scope: !65)!75 = !DILocation(line: 11, column: 29, scope: !65)!76 = !DILocation(line: 11, column: 22, scope: !65)!77 = !DILocation(line: 12, column: 37, scope: !64)!78 = !DILocation(line: 12, column: 35, scope: !64)!79 = !DILocation(line: 11, column: 5, scope: !60)!80 = !DILocation(line: 14, column: 51, scope: !69)!81 = !DILocation(line: 14, column: 26, scope: !69)!82 = !DILocation(line: 14, column: 72, scope: !69)!83 = !DILocation(line: 14, column: 9, scope: !69)!84 = !DILocation(line: 15, column: 9, scope: !85)!85 = distinct !DILexicalBlock(scope: !69, file: !17, line: 14, column: 9)!86 = !DILocation(line: 15, column: 18, scope: !85)!87 = !DILocation(line: 15, column: 15, scope: !85)!88 = !DILocation(line: 12, column: 9, scope: !64)!89 = !DILocation(line: 13, column: 24, scope: !67)!90 = !DILocation(line: 13, column: 31, scope: !67)!91 = !DILocation(line: 13, column: 29, scope: !67)!92 = !DILocation(line: 13, column: 9, scope: !67)!93 = !DILocation(line: 14, column: 30, scope: !69)!94 = !DILocation(line: 14, column: 48, scope: !69)!95 = !DILocation(line: 14, column: 46, scope: !69)!96 = !DILocation(line: 16, column: 9, scope: !85)!97 = !DILocation(line: 16, column: 22, scope: !85)!98 = !DILocation(line: 16, column: 19, scope: !85)!99 = distinct !DISubprogram(name: "panic", scope: !17, file: !17, line: 20, type: !53, isLocal: true, isDefinition: true, scopeLine: 20, isOptimized: true, unit: !1, variables: !100)!100 = !{!101}!101 = !DILocalVariable(name: "msg", arg: 1, scope: !99, file: !17, line: 20, type: !24)!102 = !DILocation(line: 20, column: 14, scope: !99)!103 = !DILocation(line: 20, column: 45, scope: !104)!104 = distinct !DILexicalBlock(scope: !105, file: !17, line: 20, column: 43)!105 = distinct !DILexicalBlock(scope: !99, file: !17, line: 20, column: 14)is the following, however clang 5 with assertions on does not hit the assertion when run on this IR:Any pointers would be appreciated.
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
LLVM Developers mailing list
llvm-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev