Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 34 additions & 27 deletions llvm/lib/CodeGen/MachineOutliner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
#include "llvm/Support/SHA256.h"
#include "llvm/Support/SuffixTree.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include <functional>
#include <tuple>
#include <vector>
Expand Down Expand Up @@ -609,10 +610,6 @@ MachineFunction *MachineOutliner::createOutlinedFunction(
LLVMContext &C = M.getContext();
Function *F = Function::Create(FunctionType::get(Type::getVoidTy(C), false),
Function::ExternalLinkage, FunctionName, M);

// NOTE: If this is linkonceodr, then we can take advantage of linker deduping
// which gives us better results when we outline from linkonceodr functions.
F->setLinkage(GlobalValue::LinkOnceODRLinkage);
F->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);

// Set optsize/minsize, so we don't insert padding between outlined
Expand Down Expand Up @@ -697,6 +694,39 @@ MachineFunction *MachineOutliner::createOutlinedFunction(

TII.buildOutlinedFrame(MBB, MF, OF);

if (!MF.getTarget().getTargetTriple().isNanoMips()) {
FunctionName += std::to_string(Name);
F->setName(FunctionName);
// NOTE: If this is linkonceodr, then we can take advantage of linker
// deduping which gives us better results when we outline from linkonceodr
// functions.
F->setLinkage(GlobalValue::InternalLinkage);
} else {
F->setLinkage(GlobalValue::LinkOnceODRLinkage);
// Dump all instructions into a string.
std::string InstrDump;
raw_string_ostream InstrDumpStream(InstrDump);
for (MachineBasicBlock &MBB : MF)
for (MachineInstr &MI : MBB)
if (!MI.isCFIInstruction() && !MI.isDebugInstr())
MI.print(InstrDumpStream, true, false, true, false, nullptr);

// Generate has from instruction dump.
SHA256 Hasher;
Hasher.init();
Hasher.update(InstrDump);
auto Hash = Hasher.result();

// Convert hash from decimal array to hexadecimal string.
std::ostringstream HashHex;
for (unsigned char C : Hash)
HashHex << std::hex << std::setw(2) << std::setfill('0') << unsigned(C);

auto *NewComdat = M.getOrInsertComdat(HashHex.str());
F->setName("OUTLINED_FUNCTION_" + HashHex.str());
F->setComdat(NewComdat);
}

// If there's a DISubprogram associated with this outlined function, then
// emit debug info for the outlined function.
if (DISubprogram *SP = getSubprogramOrNull(OF)) {
Expand Down Expand Up @@ -729,29 +759,6 @@ MachineFunction *MachineOutliner::createOutlinedFunction(
DB.finalize();
}

// Dump all instructions into a string.
std::string InstrDump;
raw_string_ostream InstrDumpStream(InstrDump);
for (MachineBasicBlock &MBB : MF)
for (MachineInstr &MI : MBB)
if (!MI.isCFIInstruction() && !MI.isDebugInstr())
MI.print(InstrDumpStream, true, false, true, false, nullptr);

// Generate has from instruction dump.
SHA256 Hasher;
Hasher.init();
Hasher.update(InstrDump);
auto Hash = Hasher.result();

// Convert hash from decimal array to hexadecimal string.
std::ostringstream HashHex;
for (unsigned char C : Hash)
HashHex << std::hex << std::setw(2) << std::setfill('0') << unsigned(C);

auto *NewComdat = M.getOrInsertComdat(HashHex.str());
F->setName("OUTLINED_FUNCTION_" + HashHex.str());
F->setComdat(NewComdat);

return &MF;
}

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/Mips/nanomips/outliner_test.ll
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ if.else13: ; preds = %if.else
br i1 %cmp14.not, label %if.then24, label %if.then15

if.then15: ; preds = %if.else13
; CHECK: balc OUTLINED_FUNCTION_0
; CHECK: balc OUTLINED_FUNCTION_{{.*}}
%mul16 = mul nsw i32 %a, 10
%add17 = add nsw i32 %mul16, %y
%reass.add9294 = add i32 %add17, %a
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/Mips/nanomips/outliner_test_noRAsave.ll
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ entry:
br i1 %cmp, label %if.then, label %if.else

if.then: ; preds = %entry
; CHECK: balc OUTLINED_FUNCTION_0
; CHECK: balc OUTLINED_FUNCTION_{{.*}}
%mul = mul nsw i32 %a, 10
%add = add nsw i32 %mul, %y
%reass.add85 = shl i32 %a, 1
Expand All @@ -109,7 +109,7 @@ if.else10: ; preds = %if.else
br i1 %cmp11, label %if.then12, label %if.else21

if.then12: ; preds = %if.else10
; CHECK: balc OUTLINED_FUNCTION_1
; CHECK: balc OUTLINED_FUNCTION_{{.*}}
%mul13 = mul nsw i32 %a, 10
%add14 = add nsw i32 %mul13, %y
%reass.add83 = shl i32 %a, 1
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/CodeGen/Mips/nanomips/outliner_test_regsave.mir
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
# outlined function.
# CHECK: name: foo
# CHECK: $s0_nm = MOVE_NM $ra_nm
# CHECK: BALC_NM @OUTLINED_FUNCTION_0, implicit-def $ra_nm, implicit-def $a0_nm, implicit-def $ra_nm, implicit $zero_nm, implicit $s0_nm
# CHECK: BALC_NM @OUTLINED_FUNCTION_{{.*}}, implicit-def $ra_nm, implicit-def $a0_nm, implicit-def $ra_nm, implicit $zero_nm, implicit $s0_nm
# CHECK: $ra_nm = MOVE_NM $s0_nm


Expand Down Expand Up @@ -78,7 +78,7 @@ body: |
# to that.
# CHECK-LABEL: name: bar
# CHECK: SAVE_NM 16, $ra_nm, implicit-def $sp_nm, implicit $sp_nm
# CHECK: BALC_NM @OUTLINED_FUNCTION_1, implicit-def $ra_nm, implicit-def $ra_nm, implicit-def $sp_nm, implicit-def $t2_nm, implicit-def $t3_nm, implicit $zero_nm, implicit $sp_nm
# CHECK: BALC_NM @OUTLINED_FUNCTION_{{.*}}, implicit-def $ra_nm, implicit-def $ra_nm, implicit-def $sp_nm, implicit-def $t2_nm, implicit-def $t3_nm, implicit $zero_nm, implicit $sp_nm
# CHECK: RESTORE_NM 16, def $ra_nm, implicit-def $sp_nm, implicit $sp_nm


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ if.else: ; preds = %entry
br i1 %cmp4, label %if.then5, label %if.else11

if.then5: ; preds = %if.else
; CHECK: bc OUTLINED_FUNCTION_1
; CHECK: bc OUTLINED_FUNCTION_[[FN1:.*]]
%mul6 = mul nsw i32 %a, 10
%add7 = add nsw i32 %mul6, %y
%reass.add8587 = add i32 %add7, %a
Expand Down Expand Up @@ -67,7 +67,7 @@ if.end37: ; preds = %if.then5, %if.then2
define dso_local i32 @testing_default1(i32 signext %x, i32 signext %y, i32 signext %a) local_unnamed_addr #0 {
entry:
; CHECK: save 16, $ra
; CHECK: balc OUTLINED_FUNCTION_0
; CHECK: balc OUTLINED_FUNCTION_[[FN0:.*]]
; CHECK: restore 16, $ra
%mul = mul nsw i32 %a, 50
%add = add nsw i32 %mul, %y
Expand All @@ -88,7 +88,7 @@ entry:
define dso_local i32 @testing_default2(i32 signext %x, i32 signext %y, i32 signext %a) local_unnamed_addr #0 {
entry:
; CHECK: save 16, $ra
; CHECK: balc OUTLINED_FUNCTION_0
; CHECK: balc OUTLINED_FUNCTION_[[FN0:.*]]
; CHECK: restore 16, $ra
%mul = mul nsw i32 %a, 50
%add = add nsw i32 %mul, %y
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/CodeGen/Mips/nanomips/outliner_test_thunk.ll
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ entry:
br i1 %cmp, label %if.then, label %if.else

if.then: ; preds = %entry
; CHECK: balc OUTLINED_FUNCTION_0
; CHECK: balc OUTLINED_FUNCTION_{{.*}}
%mul = mul nsw i32 %a, 10
%add = add nsw i32 %mul, %y
%reass.add85 = shl i32 %a, 1
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/2010-04-06-NestedFnDbgInfo.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj -o - < %s | llvm-dwarfdump -v -debug-info - | FileCheck %s
; Radar 7833483
; Do not emit a separate out-of-line definition DIE for the function-local 'foo'
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/2010-05-10-MultipleCU.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck %s

; Check that two compile units are generated
Expand Down
5 changes: 3 additions & 2 deletions llvm/test/DebugInfo/Generic/DICommonBlock.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips

; RUN: %llc_dwarf -O0 -filetype=obj < %s > %t
; RUN: llvm-dwarfdump -debug-info %t | FileCheck %s
; CHECK: DW_TAG_common_block
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/PR20038.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; For some reason, the output when targetting sparc is not quite as expected.
; XFAIL: sparc

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/accel-table-hash-collisions.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Apple -filetype=obj -o - < %s \
; RUN: | llvm-dwarfdump -apple-names - | FileCheck %s

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/address_space_rvalue.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -debug-info - | FileCheck %s

; This nonsensical example tests that address spaces for rvalue
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/constant-pointers.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj %s -o - | llvm-dwarfdump -v -debug-info - | FileCheck %s

; Ensure that pointer constants are emitted as unsigned data. Alternatively,
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/containing-type-extension.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj < %s > %t
; RUN: llvm-dwarfdump -v -debug-info %t | FileCheck %s

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/cross-cu-inlining.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj -dwarf-linkage-names=All < %s | llvm-dwarfdump -v -debug-info - | FileCheck -implicit-check-not=DW_TAG %s
; RUN: %llc_dwarf -accel-tables=Apple -dwarf-linkage-names=All -O0 -filetype=obj < %s | llvm-dwarfdump -v - | FileCheck --check-prefix=CHECK-ACCEL --check-prefix=CHECK %s

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/cross-cu-linkonce-distinct.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -v -debug-info - | FileCheck %s

; Testing that two distinct (distinct by writing them in separate files, while
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/cross-cu-linkonce.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -v -debug-info - | FileCheck %s

; Built from source:
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/cu-range-hole.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj %s -o %t
; RUN: llvm-dwarfdump %t | FileCheck %s

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/cu-ranges.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj %s -o %t
; RUN: llvm-dwarfdump -v %t | FileCheck %s

Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/dead-argument-order.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -O0 -filetype=obj < %s | llvm-dwarfdump -v -debug-info - | FileCheck %s

; Built from the following source with clang -O1
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-info-enum.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; Test enumeration representation in DWARF debug info:
; * test value representation for each possible underlying integer type
; * test the integer type is as expected
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-info-qualifiers.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; Test (r)value qualifiers on C++11 non-static member functions.
; Generated from tools/clang/test/CodeGenCXX/debug-info-qualifiers.cpp
;
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-label-inline.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: llc -O0 -filetype=obj -o - %s | llvm-dwarfdump -v - | FileCheck %s
;
; Bug 47129
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-label.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: llc -O0 -filetype=obj -o - %s | llvm-dwarfdump -v - | FileCheck %s
;
; CHECK: .debug_info contents:
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-empty-cu.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-empty-name.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -debugger-tune=lldb -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -find=_GLOBAL__sub_I__ %t | FileCheck --check-prefix=INFO %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck --check-prefix=NAMES %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-hash-collisions.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-index-type.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-linkage-name.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; Generate one file with all linkage names, and another with only abstract ones.
; Then test both.
; RUN: %llc_dwarf -accel-tables=Dwarf -dwarf-linkage-names=All -filetype=obj -o %t.All < %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-many-cu.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-name-collisions.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -dwarf-linkage-names=All -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-one-cu.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/debug-names-two-cu.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf -accel-tables=Dwarf -filetype=obj -o %t < %s
; RUN: llvm-dwarfdump -debug-names %t | FileCheck %s
; RUN: llvm-dwarfdump -debug-names -verify %t | FileCheck --check-prefix=VERIFY %s
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/DebugInfo/Generic/def-line.ll
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// No object emitter on nanomips
// UNSUPPORTED: nanomips
; No object emitter on nanomips
; UNSUPPORTED: nanomips
; RUN: %llc_dwarf < %s -filetype=obj | llvm-dwarfdump -debug-info - | FileCheck %s

; Given the following source, ensure that the decl_line/file is correctly
Expand Down
Loading