diff options
-rw-r--r-- | Driver/TextDiagnosticPrinter.cpp | 8 | ||||
-rw-r--r-- | Driver/TextDiagnostics.h | 2 | ||||
-rw-r--r-- | Driver/clang.cpp | 1 |
3 files changed, 7 insertions, 4 deletions
diff --git a/Driver/TextDiagnosticPrinter.cpp b/Driver/TextDiagnosticPrinter.cpp index 2a3bd0d954..76809d7dea 100644 --- a/Driver/TextDiagnosticPrinter.cpp +++ b/Driver/TextDiagnosticPrinter.cpp @@ -104,13 +104,19 @@ unsigned TextDiagnosticPrinter::GetTokenLength(SourceLocation Loc) { // the token this macro expanded to. Loc = SourceMgr.getLogicalLoc(Loc); const char *StrData = SourceMgr.getCharacterData(Loc); + const char *BufEnd = SourceMgr.getBufferData(Loc.getFileID()).second; // TODO: this could be special cased for common tokens like identifiers, ')', // etc to make this faster, if it mattered. This could use // Lexer::isObviouslySimpleCharacter for example. + // Create a langops struct and enable trigraphs. This is sufficient for + // measuring tokens. + LangOptions LangOpts; + LangOpts.Trigraphs = true; + // Create a lexer starting at the beginning of this token. - Lexer TheLexer(Loc, *ThePreprocessor, StrData); + Lexer TheLexer(Loc, LangOpts, StrData, BufEnd); Token TheTok; TheLexer.LexRawToken(TheTok); return TheTok.getLength(); diff --git a/Driver/TextDiagnostics.h b/Driver/TextDiagnostics.h index faf1b412b2..2ab0066d03 100644 --- a/Driver/TextDiagnostics.h +++ b/Driver/TextDiagnostics.h @@ -25,7 +25,6 @@ class TextDiagnostics : public DiagnosticClient { HeaderSearch *TheHeaderSearch; protected: SourceManager &SourceMgr; - Preprocessor *ThePreprocessor; std::string FormatDiagnostic(Diagnostic::Level Level, diag::kind ID, @@ -36,7 +35,6 @@ public: virtual ~TextDiagnostics(); void setHeaderSearch(HeaderSearch &HS) { TheHeaderSearch = &HS; } - void setPreprocessor(Preprocessor &P) { ThePreprocessor = &P; } virtual bool IgnoreDiagnostic(Diagnostic::Level Level, SourceLocation Pos); diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 082f5ed074..6e0ed914e2 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -908,7 +908,6 @@ int main(int argc, char **argv) { for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) { // Set up the preprocessor with these options. Preprocessor PP(Diags, LangInfo, *Target, SourceMgr, HeaderInfo); - DiagClient->setPreprocessor(PP); const std::string &InFile = InputFilenames[i]; std::vector<char> PredefineBuffer; unsigned MainFileID = InitializePreprocessor(PP, InFile, SourceMgr, |