summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorNirav Dave <niravd@google.com>2016-10-01 10:57:55 +0000
committerNirav Dave <niravd@google.com>2016-10-01 10:57:55 +0000
commite4c6153cf199de5acdc62ca9ea54ccb7d0c203ff (patch)
treefef92dfa412c5054775d77f8cb1c189217b29795 /llvm/lib
parenta74cddd65f6d0d153f60976ef50141e065112ba4 (diff)
downloadbcm5719-llvm-e4c6153cf199de5acdc62ca9ea54ccb7d0c203ff.tar.gz
bcm5719-llvm-e4c6153cf199de5acdc62ca9ea54ccb7d0c203ff.zip
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
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/MC/MCParser/AsmLexer.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/llvm/lib/MC/MCParser/AsmLexer.cpp b/llvm/lib/MC/MCParser/AsmLexer.cpp
index 0fa7fbdc7b6..99e1df6be6e 100644
--- a/llvm/lib/MC/MCParser/AsmLexer.cpp
+++ b/llvm/lib/MC/MCParser/AsmLexer.cpp
@@ -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];
OpenPOWER on IntegriCloud