diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-08-25 20:39:19 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-08-25 20:39:19 +0000 |
commit | 03c107a42fae79e89d0016999a1a04c07d65591a (patch) | |
tree | 3ed82db589d75f35a87b585d11f2c36ad689caff | |
parent | af6fbe42e4e0bbc42e9bf824ae2a24417ae1665f (diff) |
Make Lexer::ComputePreamble accept a LangOptions parameter, otherwise it may be
out-of-sync how a file is compiled. Patch by Matthias Kleine!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138580 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Lex/Lexer.h | 3 | ||||
-rw-r--r-- | lib/Frontend/ASTUnit.cpp | 4 | ||||
-rw-r--r-- | lib/Frontend/FrontendActions.cpp | 2 | ||||
-rw-r--r-- | lib/Lex/Lexer.cpp | 6 | ||||
-rw-r--r-- | test/Lexer/preamble.c | 4 |
5 files changed, 11 insertions, 8 deletions
diff --git a/include/clang/Lex/Lexer.h b/include/clang/Lex/Lexer.h index 3bc44b192a..21f3f8df86 100644 --- a/include/clang/Lex/Lexer.h +++ b/include/clang/Lex/Lexer.h @@ -322,7 +322,8 @@ public: /// of the file begins along with a boolean value indicating whether /// the preamble ends at the beginning of a new line. static std::pair<unsigned, bool> - ComputePreamble(const llvm::MemoryBuffer *Buffer, unsigned MaxLines = 0); + ComputePreamble(const llvm::MemoryBuffer *Buffer, const LangOptions &Features, + unsigned MaxLines = 0); //===--------------------------------------------------------------------===// // Internal implementation interfaces. diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index e369f430b7..71f9c0dada 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -1122,7 +1122,9 @@ ASTUnit::ComputePreamble(CompilerInvocation &Invocation, CreatedBuffer = true; } - return std::make_pair(Buffer, Lexer::ComputePreamble(Buffer, MaxLines)); + return std::make_pair(Buffer, Lexer::ComputePreamble(Buffer, + Invocation.getLangOpts(), + MaxLines)); } static llvm::MemoryBuffer *CreatePaddedMainFileBuffer(llvm::MemoryBuffer *Old, diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp index 4eb9cda398..d6df141905 100644 --- a/lib/Frontend/FrontendActions.cpp +++ b/lib/Frontend/FrontendActions.cpp @@ -220,7 +220,7 @@ void PrintPreambleAction::ExecuteAction() { llvm::MemoryBuffer *Buffer = CI.getFileManager().getBufferForFile(getCurrentFile()); if (Buffer) { - unsigned Preamble = Lexer::ComputePreamble(Buffer).first; + unsigned Preamble = Lexer::ComputePreamble(Buffer, CI.getLangOpts()).first; llvm::outs().write(Buffer->getBufferStart(), Preamble); delete Buffer; } diff --git a/lib/Lex/Lexer.cpp b/lib/Lex/Lexer.cpp index d8ebc9ffe6..1ec50cd2c5 100644 --- a/lib/Lex/Lexer.cpp +++ b/lib/Lex/Lexer.cpp @@ -505,14 +505,14 @@ namespace { } std::pair<unsigned, bool> -Lexer::ComputePreamble(const llvm::MemoryBuffer *Buffer, unsigned MaxLines) { +Lexer::ComputePreamble(const llvm::MemoryBuffer *Buffer, + const LangOptions &Features, unsigned MaxLines) { // Create a lexer starting at the beginning of the file. Note that we use a // "fake" file source location at offset 1 so that the lexer will track our // position within the file. const unsigned StartOffset = 1; SourceLocation StartLoc = SourceLocation::getFromRawEncoding(StartOffset); - LangOptions LangOpts; - Lexer TheLexer(StartLoc, LangOpts, Buffer->getBufferStart(), + Lexer TheLexer(StartLoc, Features, Buffer->getBufferStart(), Buffer->getBufferStart(), Buffer->getBufferEnd()); bool InPreprocessorDirective = false; diff --git a/test/Lexer/preamble.c b/test/Lexer/preamble.c index 7735b475e1..5b2739abef 100644 --- a/test/Lexer/preamble.c +++ b/test/Lexer/preamble.c @@ -1,5 +1,5 @@ // Preamble detection test: see below for comments and test commands. -// +//* A BCPL comment that includes '/*' #include <blah> #ifndef FOO #else @@ -24,7 +24,7 @@ int foo(); // RUN: FileCheck < %t %s // CHECK: // Preamble detection test: see below for comments and test commands. -// CHECK-NEXT: // +// CHECK-NEXT: //* A BCPL comment that includes '/*' // CHECK-NEXT: #include <blah> // CHECK-NEXT: #ifndef FOO // CHECK-NEXT: #else |