aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Driver/TextDiagnosticPrinter.cpp8
-rw-r--r--Driver/TextDiagnostics.h2
-rw-r--r--Driver/clang.cpp1
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,