diff options
| author | Sean Silva <silvas@purdue.edu> | 2013-02-07 04:30:39 +0000 |
|---|---|---|
| committer | Sean Silva <silvas@purdue.edu> | 2013-02-07 04:30:39 +0000 |
| commit | 3b96424c43132cf8e78b6b599c7463e6e6191330 (patch) | |
| tree | 77a0c452725dd6c0f5c388d310aacad5d0fb9907 /llvm/lib/TableGen/TGLexer.cpp | |
| parent | 697d8b9a2679cd2308deb098792a5b25b9ba0668 (diff) | |
| download | bcm5719-llvm-3b96424c43132cf8e78b6b599c7463e6e6191330.tar.gz bcm5719-llvm-3b96424c43132cf8e78b6b599c7463e6e6191330.zip | |
tblgen: Diagnose duplicate includes.
A double inclusion will pretty much always be an error in TableGen, so
there's no point going on just to die with "def already defined" or
whatnot.
I'm not too thrilled about the "public: ... private: ..." to expose the
DependenciesMapTy, but I really didn't see a better way to keep that
type centralized. It's a smell that indicates that some refactoring is
needed to make this code more loosely coupled.
This should avoid all bugs of the same nature as PR15189.
llvm-svn: 174582
Diffstat (limited to 'llvm/lib/TableGen/TGLexer.cpp')
| -rw-r--r-- | llvm/lib/TableGen/TGLexer.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/TableGen/TGLexer.cpp b/llvm/lib/TableGen/TGLexer.cpp index e75abcfa38b..c6be4f8a118 100644 --- a/llvm/lib/TableGen/TGLexer.cpp +++ b/llvm/lib/TableGen/TGLexer.cpp @@ -309,7 +309,15 @@ bool TGLexer::LexInclude() { return true; } - Dependencies.push_back(IncludedFile); + DependenciesMapTy::const_iterator Found = Dependencies.find(IncludedFile); + if (Found != Dependencies.end()) { + PrintError(getLoc(), + "File '" + IncludedFile + "' has already been included."); + SrcMgr.PrintMessage(Found->second, SourceMgr::DK_Note, + "previously included here"); + return true; + } + Dependencies.insert(std::make_pair(IncludedFile, getLoc())); // Save the line number and lex buffer of the includer. CurBuf = SrcMgr.getMemoryBuffer(CurBuffer); CurPtr = CurBuf->getBufferStart(); |

