[llvm] r239335 - Fix a regression in .pop_section.
Rafael Espindola
rafael.espindola at gmail.com
Mon Jun 8 13:08:56 PDT 2015
Author: rafael
Date: Mon Jun 8 15:08:55 2015
New Revision: 239335
URL: http://llvm.org/viewvc/llvm-project?rev=239335&view=rev
Log:
Fix a regression in .pop_section.
It was calling ChangeSection with the wrong current section, eventually leading
to a crash.
Added:
llvm/trunk/test/MC/ELF/popsection.s
Modified:
llvm/trunk/include/llvm/MC/MCStreamer.h
Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=239335&r1=239334&r2=239335&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
+++ llvm/trunk/include/llvm/MC/MCStreamer.h Mon Jun 8 15:08:55 2015
@@ -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;
+ auto I = SectionStack.end();
+ --I;
+ MCSectionSubPair OldSection = I->first;
+ --I;
+ MCSectionSubPair NewSection = I->first;
- if (oldSection != curSection)
- ChangeSection(curSection.first, curSection.second);
+ if (OldSection != NewSection)
+ ChangeSection(NewSection.first, NewSection.second);
+ SectionStack.pop_back();
return true;
}
Added: llvm/trunk/test/MC/ELF/popsection.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/popsection.s?rev=239335&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/popsection.s (added)
+++ llvm/trunk/test/MC/ELF/popsection.s Mon Jun 8 15:08:55 2015
@@ -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: }
More information about the llvm-commits
mailing list