forked from OSchip/llvm-project
Revert "[MC] Prevent out of order HashDirective lexing in AsmLexer."
This reverts commit r282992 which appears to be causing an LTO test failure. llvm-svn: 283034
This commit is contained in:
parent
a74cddd65f
commit
e4c6153cf1
|
@ -32,7 +32,7 @@ class AsmLexer : public MCAsmLexer {
|
|||
bool IsAtStartOfLine;
|
||||
bool IsAtStartOfStatement;
|
||||
bool IsParsingMSInlineAsm;
|
||||
bool IsPeeking;
|
||||
|
||||
void operator=(const AsmLexer&) = delete;
|
||||
AsmLexer(const AsmLexer&) = delete;
|
||||
|
||||
|
|
|
@ -11,29 +11,29 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/MC/MCParser/AsmLexer.h"
|
||||
#include "llvm/ADT/APInt.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/MC/MCParser/AsmLexer.h"
|
||||
#include "llvm/MC/MCParser/MCAsmLexer.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/Support/SMLoc.h"
|
||||
#include "llvm/Support/SaveAndRestore.h"
|
||||
#include <cassert>
|
||||
#include <cctype>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <tuple>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
AsmLexer::AsmLexer(const MCAsmInfo &MAI)
|
||||
: MAI(MAI), CurPtr(nullptr), IsAtStartOfLine(true),
|
||||
IsAtStartOfStatement(true), IsParsingMSInlineAsm(false),
|
||||
IsPeeking(false) {
|
||||
AsmLexer::AsmLexer(const MCAsmInfo &MAI) : MAI(MAI) {
|
||||
CurPtr = nullptr;
|
||||
IsAtStartOfLine = true;
|
||||
IsAtStartOfStatement = true;
|
||||
IsParsingMSInlineAsm = false;
|
||||
AllowAtInIdentifier = !StringRef(MAI.getCommentString()).startswith("@");
|
||||
}
|
||||
|
||||
|
@ -487,15 +487,17 @@ StringRef AsmLexer::LexUntilEndOfLine() {
|
|||
|
||||
size_t AsmLexer::peekTokens(MutableArrayRef<AsmToken> Buf,
|
||||
bool ShouldSkipSpace) {
|
||||
SaveAndRestore<const char *> SavedTokenStart(TokStart);
|
||||
SaveAndRestore<const char *> SavedCurPtr(CurPtr);
|
||||
SaveAndRestore<bool> SavedAtStartOfLine(IsAtStartOfLine);
|
||||
SaveAndRestore<bool> SavedAtStartOfStatement(IsAtStartOfStatement);
|
||||
SaveAndRestore<bool> SavedSkipSpace(SkipSpace, ShouldSkipSpace);
|
||||
SaveAndRestore<bool> SavedIsPeeking(IsPeeking, true);
|
||||
const char *SavedTokStart = TokStart;
|
||||
const char *SavedCurPtr = CurPtr;
|
||||
bool SavedAtStartOfLine = IsAtStartOfLine;
|
||||
bool SavedAtStartOfStatement = IsAtStartOfStatement;
|
||||
bool SavedSkipSpace = SkipSpace;
|
||||
|
||||
std::string SavedErr = getErr();
|
||||
SMLoc SavedErrLoc = getErrLoc();
|
||||
|
||||
SkipSpace = ShouldSkipSpace;
|
||||
|
||||
size_t ReadCount;
|
||||
for (ReadCount = 0; ReadCount < Buf.size(); ++ReadCount) {
|
||||
AsmToken Token = LexToken();
|
||||
|
@ -507,6 +509,13 @@ size_t AsmLexer::peekTokens(MutableArrayRef<AsmToken> Buf,
|
|||
}
|
||||
|
||||
SetError(SavedErrLoc, SavedErr);
|
||||
|
||||
SkipSpace = SavedSkipSpace;
|
||||
IsAtStartOfLine = SavedAtStartOfLine;
|
||||
IsAtStartOfStatement = SavedAtStartOfStatement;
|
||||
CurPtr = SavedCurPtr;
|
||||
TokStart = SavedTokStart;
|
||||
|
||||
return ReadCount;
|
||||
}
|
||||
|
||||
|
@ -516,7 +525,7 @@ bool AsmLexer::isAtStartOfComment(const char *Ptr) {
|
|||
if (CommentString.size() == 1)
|
||||
return CommentString[0] == Ptr[0];
|
||||
|
||||
// Allow # preprocessor commments also be counted as comments for "##" cases
|
||||
// FIXME: special case for the bogus "##" comment string in X86MCAsmInfoDarwin
|
||||
if (CommentString[1] == '#')
|
||||
return CommentString[0] == Ptr[0];
|
||||
|
||||
|
@ -533,7 +542,7 @@ AsmToken AsmLexer::LexToken() {
|
|||
// This always consumes at least one character.
|
||||
int CurChar = getNextChar();
|
||||
|
||||
if (!IsPeeking && CurChar == '#' && IsAtStartOfStatement) {
|
||||
if (CurChar == '#' && IsAtStartOfStatement) {
|
||||
// If this starts with a '#', this may be a cpp
|
||||
// hash directive and otherwise a line comment.
|
||||
AsmToken TokenBuf[2];
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
// RUN: llvm-mc -triple i386-unknown-unknown %s
|
||||
|
||||
# 1 "kernel.S"
|
||||
# 1 "<built-in>" 1
|
||||
# 1 "kernel.S" 2
|
||||
##
|
||||
# 10 "kernel.S"
|
||||
##
|
Loading…
Reference in New Issue