[llvm-locstats] Avoid the locstats when no scope bytes coverage found
If the total number of PC range bytes in each variable's enclosing scope
('scope bytes total') is 0, we will have division by zero.
Differential Revision: https://reviews.llvm.org/D71415
diff --git a/llvm/test/tools/llvm-locstats/no_scope_bytes.ll b/llvm/test/tools/llvm-locstats/no_scope_bytes.ll
new file mode 100644
index 0000000..9c36b65
--- /dev/null
+++ b/llvm/test/tools/llvm-locstats/no_scope_bytes.ll
@@ -0,0 +1,39 @@
+; UNSUPPORTED: system-windows
+; REQUIRES: x86-registered-target
+; RUN: llc %s -o %t0.o -filetype=obj
+; RUN: %llvm-locstats %t0.o | FileCheck %s --check-prefix=LOCSTATS
+;
+; LOCSTATS: No scope bytes found.
+;
+; This is based on the following reproducer:
+;
+; int fn() {
+; return 0;
+; }
+;
+; ModuleID = 'test.c'
+source_filename = "test.c"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+; Function Attrs: norecurse nounwind readnone uwtable
+define dso_local i32 @fn() local_unnamed_addr !dbg !7 {
+entry:
+ ret i32 0, !dbg !11
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4, !5}
+!llvm.ident = !{!6}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 10.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
+!1 = !DIFile(filename: "test.c", directory: "/")
+!2 = !{}
+!3 = !{i32 7, !"Dwarf Version", i32 4}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = !{i32 1, !"wchar_size", i32 4}
+!6 = !{!"clang version 10.0.0"}
+!7 = distinct !DISubprogram(name: "fn", scope: !1, file: !1, line: 1, type: !8, scopeLine: 1, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
+!8 = !DISubroutineType(types: !9)
+!9 = !{!10}
+!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!11 = !DILocation(line: 2, column: 3, scope: !7)