diff options
Diffstat (limited to 'llvm/lib/MC/MCParser')
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 621618a5666..9f8027a381e 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -3229,7 +3229,7 @@ bool AsmParser::parseDirectiveCVLinetable() { } /// parseDirectiveCVInlineLinetable -/// ::= .cv_inline_linetable PrimaryFunctionId FileId LineNum +/// ::= .cv_inline_linetable PrimaryFunctionId FileId LineNum FnStart /// ("contains" SecondaryFunctionId+)? bool AsmParser::parseDirectiveCVInlineLinetable() { int64_t PrimaryFunctionId = getTok().getIntVal(); @@ -3250,6 +3250,12 @@ bool AsmParser::parseDirectiveCVInlineLinetable() { "Line number less than zero in '.cv_inline_linetable' directive"); Lex(); + SMLoc Loc = getLexer().getLoc(); + StringRef FnStartName; + if (parseIdentifier(FnStartName)) + return Error(Loc, "expected identifier in directive"); + MCSymbol *FnStartSym = getContext().getOrCreateSymbol(FnStartName); + SmallVector<unsigned, 8> SecondaryFunctionIds; if (getLexer().is(AsmToken::Identifier)) { if (getTok().getIdentifier() != "contains") @@ -3268,8 +3274,9 @@ bool AsmParser::parseDirectiveCVInlineLinetable() { } } - getStreamer().EmitCVInlineLinetableDirective( - PrimaryFunctionId, SourceFileId, SourceLineNum, SecondaryFunctionIds); + getStreamer().EmitCVInlineLinetableDirective(PrimaryFunctionId, SourceFileId, + SourceLineNum, FnStartSym, + SecondaryFunctionIds); return false; } |