DebugLocEntry: Actually merge the loc entry when returning true.
authorDavid Blaikie <dblaikie@gmail.com>
Tue, 1 Apr 2014 23:19:23 +0000 (23:19 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Tue, 1 Apr 2014 23:19:23 +0000 (23:19 +0000)
Seems we didn't have any test coverage for merging... awesome. So I
added some - but hit an llvm-objdump bug while I was there. I'm choosing
not to shave that yak right now.

Code review feedback/bug catch by Adrian Prantl in r205360.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205373 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DebugLocEntry.h
test/DebugInfo/X86/DW_AT_location-reference.ll

index 976edf0a2ab7db7aa180dc884becf6964585d896..0834b36013d903eed35085e04f282f2a30e7dcc9 100644 (file)
@@ -95,7 +95,11 @@ public:
   }
 
   bool Merge(const DebugLocEntry &Next) {
-    return End == Next.Begin && hasSameValueOrLocation(Next);
+    if (End == Next.Begin && hasSameValueOrLocation(Next)) {
+      End = Next.End;
+      return true;
+    }
+    return false;
   }
   bool isLocation() const { return EntryKind == E_Location; }
   bool isInt() const { return EntryKind == E_Integer; }
index bdd0e044bf1302991539fd5109f98f044958fb02..4bdfd6fdfc89c254feea90813b4e9fb2e69b33c2 100644 (file)
@@ -1,5 +1,12 @@
-; RUN: llc -O1 -mtriple=x86_64-apple-darwin < %s | FileCheck -check-prefix=DARWIN %s
-; RUN: llc -O1 -mtriple=x86_64-pc-linux-gnu < %s | FileCheck -check-prefix=LINUX %s
+; RUN: llc -O1 -filetype=obj -mtriple=x86_64-apple-darwin < %s > %t
+; RUN: llvm-dwarfdump %t  | FileCheck %s
+; FIXME: llvm-objdump is failing with an error when parsing some relocations
+; here, though it doesn't seem to adversely affect the test
+; RUN: not llvm-objdump -r %t | FileCheck -check-prefix=DARWIN %s
+; RUN: llc -O1 -filetype=obj -mtriple=x86_64-pc-linux-gnu < %s > %t
+; RUN: llvm-dwarfdump %t  | FileCheck %s
+; RUN: llvm-objdump -r %t | FileCheck -check-prefix=LINUX %s
+
 ; PR9493
 ; Adapted from the original test case in r127757.
 ; We use 'llc -O1' to induce variable 'x' to live in different locations.
 ; }
 
 ; // The 'x' variable and its symbol reference location
-; DARWIN:      DW_TAG_variable
-; DARWIN-NEXT: ## DW_AT_name
-; DARWIN-NEXT: .long Lset{{[0-9]+}}
-; DARWIN-NEXT: ## DW_AT_decl_file
-; DARWIN-NEXT: ## DW_AT_decl_line
-; DARWIN-NEXT: ## DW_AT_type
-; DARWIN-NEXT: Lset{{[0-9]+}} = Ldebug_loc{{[0-9]+}}-Lsection_debug_loc ## DW_AT_location
-; DARWIN-NEXT: .long Lset{{[0-9]+}}
-
-; LINUX:      DW_TAG_variable
-; LINUX-NEXT: # DW_AT_name
-; LINUX-NEXT: # DW_AT_decl_file
-; LINUX-NEXT: # DW_AT_decl_line
-; LINUX-NEXT: # DW_AT_type
-; LINUX-NEXT: .long .Ldebug_loc{{[0-9]+}} # DW_AT_location
+; CHECK: .debug_info contents:
+; CHECK:      DW_TAG_variable
+; CHECK-NEXT:   DW_AT_name {{.*}} "x"
+; CHECK-NEXT:   DW_AT_decl_file
+; CHECK-NEXT:   DW_AT_decl_line
+; CHECK-NEXT:   DW_AT_type
+; CHECK-NEXT:   DW_AT_location [DW_FORM_sec_offset] (0x00000000)
+
+; Check that the location contains only 4 ranges - this verifies that the 4th
+; and 5th ranges were successfully merged into a single range.
+; CHECK: .debug_loc contents:
+; CHECK: 0x00000000:
+; CHECK: Beginning address offset:
+; CHECK: Beginning address offset:
+; CHECK: Beginning address offset:
+; CHECK: Beginning address offset:
+; CHECK-NOT: Beginning address offset:
+
+; Check that we have no relocations in Darwin's output.
+; DARWIN-NOT: X86_64_RELOC{{.*}} __debug_loc
 
+; Check we have a relocation for the debug_loc entry in Linux output.
+; LINUX: RELOCATION RECORDS FOR [.rela.debug_info]
+; LINUX-NOT: RELOCATION RECORDS
+; LINUX: R_X86_64{{.*}} .debug_loc+0
 
 ; ModuleID = 'simple.c'
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32"