From: Reid Kleckner Date: Fri, 12 May 2017 17:02:40 +0000 (+0000) Subject: [codeview] Fix assertion failure introduced in r295354 refactoring X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=43ed711041909a9eae0adc9a899afb9e3251f283;p=llvm [codeview] Fix assertion failure introduced in r295354 refactoring CodeViewDebug sets Asm to nullptr to disable debug info generation. You can get a .ll file like no-cus.ll from 'clang -gcodeview -g0', which happens in the ubsan test suite. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@302923 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp b/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp index 1d63e33a4d3..826162ad47c 100644 --- a/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp +++ b/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp @@ -129,10 +129,9 @@ bool hasDebugInfo(const MachineModuleInfo *MMI, const MachineFunction *MF) { } void DebugHandlerBase::beginFunction(const MachineFunction *MF) { - assert(Asm); PrevInstBB = nullptr; - if (!hasDebugInfo(MMI, MF)) { + if (!Asm || !hasDebugInfo(MMI, MF)) { skippedNonDebugFunction(); return; } diff --git a/test/DebugInfo/COFF/no-cus.ll b/test/DebugInfo/COFF/no-cus.ll new file mode 100644 index 00000000000..349fe680de6 --- /dev/null +++ b/test/DebugInfo/COFF/no-cus.ll @@ -0,0 +1,25 @@ +; RUN: llc < %s -filetype=obj -o %t.o +; RUN: llvm-objdump -section-headers %t.o | FileCheck %s + +; Don't emit debug info in this scenario and don't crash. + +; CHECK-NOT: .debug$S +; CHECK: .text +; CHECK-NOT: .debug$S + +; ModuleID = 't.cpp' +source_filename = "t.cpp" +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-pc-windows-msvc19.10.24728" + +define void @f() { +entry: + ret void +} + +!llvm.module.flags = !{!0, !1} +!llvm.ident = !{!2} + +!0 = !{i32 2, !"CodeView", i32 1} +!1 = !{i32 1, !"PIC Level", i32 2} +!2 = !{!"clang version 5.0.0 "}