OSDN Git Service

Add a test for .seh_pushframe parsing. Fix the bug exposed by it (and another
authorCharles Davis <cdavis@mines.edu>
Wed, 25 May 2011 04:08:15 +0000 (04:08 +0000)
committerCharles Davis <cdavis@mines.edu>
Wed, 25 May 2011 04:08:15 +0000 (04:08 +0000)
one I found by inspection).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132037 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/COFFAsmParser.cpp
test/MC/AsmParser/directive_seh.s

index fa7ae5c..540df37 100644 (file)
@@ -343,13 +343,16 @@ bool COFFAsmParser::ParseSEHDirectiveSaveXMM(StringRef, SMLoc L) {
 }
 
 bool COFFAsmParser::ParseSEHDirectivePushFrame(StringRef, SMLoc) {
-  bool Code;
+  bool Code = false;
   StringRef CodeID;
-  SMLoc startLoc = getLexer().getLoc();
-  if (!getParser().ParseIdentifier(CodeID)) {
-    if (CodeID != "@code")
-      return Error(startLoc, "expected @code");
-    Code = true;
+  if (getLexer().is(AsmToken::At)) {
+    SMLoc startLoc = getLexer().getLoc();
+    Lex();
+    if (!getParser().ParseIdentifier(CodeID)) {
+      if (CodeID != "code")
+        return Error(startLoc, "expected @code");
+      Code = true;
+    }
   }
 
   if (getLexer().isNot(AsmToken::EndOfStatement))
index 7111fcc..e14be43 100644 (file)
@@ -1,6 +1,7 @@
 # RUN: llvm-mc -triple x86_64-pc-win32 %s | FileCheck %s
 
 # CHECK: .seh_proc func
+# CHECK: .seh_pushframe @code
 # CHECK: .seh_stackalloc 24
 # CHECK: .seh_endprologue
 # CHECK: .seh_handler __C_specific_handler, @except
@@ -11,6 +12,7 @@
     .def func; .scl 2; .type 32; .endef
     .seh_proc func
 func:
+    .seh_pushframe @code
     subq $24, %rsp
     .seh_stackalloc 24
     .seh_endprologue