[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