forked from OSchip/llvm-project
[ms] [llvm-ml] Handle OPTION PROLOGUE/EPILOGUE:NONE
Since we don't yet implement PROC's PROLOGUE and EPILOGUE support, we can safely ignore the option that disables them. Reviewed By: thakis Differential Revision: https://reviews.llvm.org/D131524
This commit is contained in:
parent
ec08114133
commit
bc9617899c
|
@ -47,6 +47,7 @@ class COFFMasmParser : public MCAsmParserExtension {
|
|||
bool ParseDirectiveSegment(StringRef, SMLoc);
|
||||
bool ParseDirectiveSegmentEnd(StringRef, SMLoc);
|
||||
bool ParseDirectiveIncludelib(StringRef, SMLoc);
|
||||
bool ParseDirectiveOption(StringRef, SMLoc);
|
||||
|
||||
bool ParseDirectiveAlias(StringRef, SMLoc);
|
||||
|
||||
|
@ -120,7 +121,7 @@ class COFFMasmParser : public MCAsmParserExtension {
|
|||
// .fpo
|
||||
addDirectiveHandler<&COFFMasmParser::ParseDirectiveIncludelib>(
|
||||
"includelib");
|
||||
// option
|
||||
addDirectiveHandler<&COFFMasmParser::ParseDirectiveOption>("option");
|
||||
// popcontext
|
||||
// pushcontext
|
||||
// .safeseh
|
||||
|
@ -403,6 +404,43 @@ bool COFFMasmParser::ParseDirectiveIncludelib(StringRef Directive, SMLoc Loc) {
|
|||
return false;
|
||||
}
|
||||
|
||||
/// ParseDirectiveOption
|
||||
/// ::= "option" option-list
|
||||
bool COFFMasmParser::ParseDirectiveOption(StringRef Directive, SMLoc Loc) {
|
||||
auto parseOption = [&]() -> bool {
|
||||
StringRef Option;
|
||||
if (getParser().parseIdentifier(Option))
|
||||
return TokError("expected identifier for option name");
|
||||
if (Option.equals_insensitive("prologue")) {
|
||||
StringRef MacroId;
|
||||
if (parseToken(AsmToken::Colon) || getParser().parseIdentifier(MacroId))
|
||||
return TokError("expected :macroId after OPTION PROLOGUE");
|
||||
if (MacroId.equals_insensitive("none")) {
|
||||
// Since we currently don't implement prologues/epilogues, NONE is our
|
||||
// default.
|
||||
return false;
|
||||
}
|
||||
return TokError("OPTION PROLOGUE is currently unsupported");
|
||||
}
|
||||
if (Option.equals_insensitive("epilogue")) {
|
||||
StringRef MacroId;
|
||||
if (parseToken(AsmToken::Colon) || getParser().parseIdentifier(MacroId))
|
||||
return TokError("expected :macroId after OPTION EPILOGUE");
|
||||
if (MacroId.equals_insensitive("none")) {
|
||||
// Since we currently don't implement prologues/epilogues, NONE is our
|
||||
// default.
|
||||
return false;
|
||||
}
|
||||
return TokError("OPTION EPILOGUE is currently unsupported");
|
||||
}
|
||||
return TokError("OPTION '" + Option + "' is currently unsupported");
|
||||
};
|
||||
|
||||
if (parseMany(parseOption))
|
||||
return addErrorSuffix(" in OPTION directive");
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParseDirectiveProc
|
||||
/// TODO(epastor): Implement parameters and other attributes.
|
||||
/// ::= label "proc" [[distance]]
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
; RUN: llvm-ml -filetype=s %s /Fo - | FileCheck %s
|
||||
|
||||
OPTION pRoLoGuE:nOnE, EPILogue:None
|
||||
|
||||
.code
|
||||
|
||||
t1 PROC
|
||||
ret
|
||||
t1 ENDP
|
||||
|
||||
; CHECK-LABEL: t1:
|
||||
; CHECK-NOT: pop
|
||||
; CHECK-NOT: push
|
||||
; CHECK: {{^ *}}ret{{ *$}}
|
||||
|
||||
end
|
||||
|
Loading…
Reference in New Issue