diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 1a38806f1e976a..3ae43488e81826 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -3528,7 +3528,8 @@ bool AsmParser::parseDirectiveLoc() { Lex(); } - unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0; + auto PrevFlags = getContext().getCurrentDwarfLoc().getFlags(); + unsigned Flags = PrevFlags & DWARF2_FLAG_IS_STMT; unsigned Isa = 0; int64_t Discriminator = 0; diff --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp index f1614c41297d53..1ef848dd995990 100644 --- a/llvm/lib/MC/MCParser/MasmParser.cpp +++ b/llvm/lib/MC/MCParser/MasmParser.cpp @@ -3235,7 +3235,8 @@ bool MasmParser::parseDirectiveLoc() { Lex(); } - unsigned Flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0; + auto PrevFlags = getContext().getCurrentDwarfLoc().getFlags(); + unsigned Flags = PrevFlags & DWARF2_FLAG_IS_STMT; unsigned Isa = 0; int64_t Discriminator = 0; diff --git a/llvm/test/MC/AsmParser/directive_loc_2.s b/llvm/test/MC/AsmParser/directive_loc_2.s new file mode 100644 index 00000000000000..aca1e7039e371e --- /dev/null +++ b/llvm/test/MC/AsmParser/directive_loc_2.s @@ -0,0 +1,25 @@ +# RUN: llvm-mc -triple i386-unknown-unknown -filetype=obj %s -o %t +# RUN: llvm-dwarfdump -debug-line %t | FileCheck %s + + .file 1 "test.c" + .loc 1 2 + nop + .loc 1 4 is_stmt 0 + nop + .loc 1 6 + nop + .loc 1 8 is_stmt 1 + nop + .loc 1 10 + nop + +# CHECK: .debug_line +# CHECK: file_names[ 1]: +# CHECK-NEXT: name: "test.c" +# CHECK-NEXT: dir_index: 0 +# CHECK: 0x{{0+}}0 2 0 1 0 0 is_stmt +# CHECK: 0x{{0+}}1 4 0 1 0 0 {{$}} +# CHECK: 0x{{0+}}2 6 0 1 0 0 {{$}} +# CHECK: 0x{{0+}}3 8 0 1 0 0 is_stmt +# CHECK: 0x{{0+}}4 10 0 1 0 0 is_stmt +# CHECK: 0x{{0+}}5 10 0 1 0 0 is_stmt end_sequence