summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Doffman <mark.doffman@codethink.co.uk>2014-12-04 16:09:29 +0000
committerMark Doffman <mark.doffman@codethink.co.uk>2014-12-04 16:09:29 +0000
commit7118740b5c5c8daeb09db7b7e4302d50853573ac (patch)
tree0e5cc84e79b7badb1949bc322fb52ebfacffdac7
parent6052953bdf7c7a9542042212c235ae9d404eef02 (diff)
downloadflang-7118740b5c5c8daeb09db7b7e4302d50853573ac.tar.gz
Fix include file buffer ID breakage.
Broken in llvm 3.6 update. Was using internal properties of SourceManger presuming sequential buffer ID's.
-rw-r--r--include/flang/Parse/Parser.h2
-rw-r--r--lib/Parse/Parser.cpp15
2 files changed, 9 insertions, 8 deletions
diff --git a/include/flang/Parse/Parser.h b/include/flang/Parse/Parser.h
index f94b8b83ef..f6f922b192 100644
--- a/include/flang/Parse/Parser.h
+++ b/include/flang/Parse/Parser.h
@@ -79,7 +79,7 @@ private:
/// This is the current buffer index we're lexing from as managed by the
/// SourceMgr object.
- int CurBuffer;
+ std::vector<int> CurBufferIndex;
ASTContext &Context;
diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp
index 5d6c6930e7..bb48e7ff18 100644
--- a/lib/Parse/Parser.cpp
+++ b/lib/Parse/Parser.cpp
@@ -60,11 +60,12 @@ void PrettyStackTraceParserEntry::print(llvm::raw_ostream &OS) const {
Parser::Parser(llvm::SourceMgr &SM, const LangOptions &Opts, DiagnosticsEngine &D,
Sema &actions)
: TheLexer(SM, Opts, D), Features(Opts), CrashInfo(*this), SrcMgr(SM),
- CurBuffer(0), Context(actions.Context), Diag(D), Actions(actions),
+ Context(actions.Context), Diag(D), Actions(actions),
Identifiers(Opts), DontResolveIdentifiers(false),
DontResolveIdentifiersInSubExpressions(false),
LexFORMATTokens(false), StmtConstructName(SourceLocation(),nullptr) {
- getLexer().setBuffer(SrcMgr.getMemoryBuffer(CurBuffer));
+ CurBufferIndex.push_back(SrcMgr.getMainFileID());
+ getLexer().setBuffer(SrcMgr.getMemoryBuffer(CurBufferIndex.back()));
Tok.startToken();
NextTok.startToken();
@@ -80,18 +81,18 @@ bool Parser::EnterIncludeFile(const std::string &Filename) {
if (NewBuf == -1)
return true;
- CurBuffer = NewBuf;
+ CurBufferIndex.push_back(NewBuf);
LexerBufferContext.push_back(getLexer().getBufferPtr());
- getLexer().setBuffer(SrcMgr.getMemoryBuffer(CurBuffer));
+ getLexer().setBuffer(SrcMgr.getMemoryBuffer(CurBufferIndex.back()));
Diag.getClient()->BeginSourceFile(Features, &TheLexer);
return false;
}
bool Parser::LeaveIncludeFile() {
- if(CurBuffer == 0) return true;//No files included.
+ if(CurBufferIndex.size() == 1) return true;//No files included.
Diag.getClient()->EndSourceFile();
- --CurBuffer;
- getLexer().setBuffer(SrcMgr.getMemoryBuffer(CurBuffer),
+ CurBufferIndex.pop_back();
+ getLexer().setBuffer(SrcMgr.getMemoryBuffer(CurBufferIndex.back()),
LexerBufferContext.back());
LexerBufferContext.pop_back();
return false;