[codeview] Fix assertion failure introduced in r295354 refactoring
authorReid Kleckner <rnk@google.com>
Fri, 12 May 2017 17:02:40 +0000 (17:02 +0000)
committerReid Kleckner <rnk@google.com>
Fri, 12 May 2017 17:02:40 +0000 (17:02 +0000)
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.

llvm-svn: 302923

llvm/lib/CodeGen/AsmPrinter/DebugHandlerBase.cpp
llvm/test/DebugInfo/COFF/no-cus.ll [new file with mode: 0644]

index 1d63e33..826162a 100644 (file)
@@ -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/llvm/test/DebugInfo/COFF/no-cus.ll b/llvm/test/DebugInfo/COFF/no-cus.ll
new file mode 100644 (file)
index 0000000..349fe68
--- /dev/null
@@ -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 "}