From: Rafael Espindola Date: Mon, 8 Jun 2015 20:08:55 +0000 (+0000) Subject: Fix a regression in .pop_section. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=279ef837e851c2f6b6aec5d40b32d15a1f6ae885;p=oota-llvm.git Fix a regression in .pop_section. It was calling ChangeSection with the wrong current section, eventually leading to a crash. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239335 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h index 5374e0ad573..628fb768856 100644 --- a/include/llvm/MC/MCStreamer.h +++ b/include/llvm/MC/MCStreamer.h @@ -307,11 +307,15 @@ public: bool PopSection() { if (SectionStack.size() <= 1) return false; - MCSectionSubPair oldSection = SectionStack.pop_back_val().first; - MCSectionSubPair curSection = SectionStack.back().first; - - if (oldSection != curSection) - ChangeSection(curSection.first, curSection.second); + auto I = SectionStack.end(); + --I; + MCSectionSubPair OldSection = I->first; + --I; + MCSectionSubPair NewSection = I->first; + + if (OldSection != NewSection) + ChangeSection(NewSection.first, NewSection.second); + SectionStack.pop_back(); return true; } diff --git a/test/MC/ELF/popsection.s b/test/MC/ELF/popsection.s new file mode 100644 index 00000000000..19f55688a1b --- /dev/null +++ b/test/MC/ELF/popsection.s @@ -0,0 +1,21 @@ +// RUN: llvm-mc -filetype=obj %s -o - -triple x86_64-pc-linux | llvm-readobj -s - | FileCheck %s + +// This used to crash. Test that it create an empty section instead. + + .pushsection foo + .popsection + +// CHECK: Section { +// CHECK: Index: 5 +// CHECK-NEXT: Name: foo +// CHECK-NEXT: Type: SHT_PROGBITS +// CHECK-NEXT: Flags [ (0x0) +// CHECK-NEXT: ] +// CHECK-NEXT: Address: 0x0 +// CHECK-NEXT: Offset: +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Link: 0 +// CHECK-NEXT: Info: 0 +// CHECK-NEXT: AddressAlignment: 1 +// CHECK-NEXT: EntrySize: 0 +// CHECK-NEXT: }