Author: rsmith Date: Fri Apr 28 19:54:03 2017 New Revision: 301727 URL: http://llvm.org/viewvc/llvm-project?rev=301727&view=rev Log: PR26771: don't forget the " 2" (returning from #included file) linemarker after including an empty file with -frewrite-includes.
Added: cfe/trunk/test/Frontend/Inputs/empty.h Modified: cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp cfe/trunk/test/Frontend/rewrite-includes-line-markers.c Modified: cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp?rev=301727&r1=301726&r2=301727&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp (original) +++ cfe/trunk/lib/Frontend/Rewrite/InclusionRewriter.cpp Fri Apr 28 19:54:03 2017 @@ -52,7 +52,7 @@ class InclusionRewriter : public PPCallb public: InclusionRewriter(Preprocessor &PP, raw_ostream &OS, bool ShowLineMarkers, bool UseLineDirectives); - bool Process(FileID FileId, SrcMgr::CharacteristicKind FileType); + void Process(FileID FileId, SrcMgr::CharacteristicKind FileType); void setPredefinesBuffer(const llvm::MemoryBuffer *Buf) { PredefinesBuffer = Buf; } @@ -400,9 +400,8 @@ bool InclusionRewriter::HandleHasInclude /// Use a raw lexer to analyze \p FileId, incrementally copying parts of it /// and including content of included files recursively. -bool InclusionRewriter::Process(FileID FileId, - SrcMgr::CharacteristicKind FileType) -{ +void InclusionRewriter::Process(FileID FileId, + SrcMgr::CharacteristicKind FileType) { bool Invalid; const MemoryBuffer &FromFile = *SM.getBuffer(FileId, &Invalid); assert(!Invalid && "Attempting to process invalid inclusion"); @@ -419,7 +418,7 @@ bool InclusionRewriter::Process(FileID F WriteLineInfo(FileName, 1, FileType, " 1"); if (SM.getFileIDSize(FileId) == 0) - return false; + return; // The next byte to be copied from the source file, which may be non-zero if // the lexer handled a BOM. @@ -453,14 +452,11 @@ bool InclusionRewriter::Process(FileID F if (const Module *Mod = FindModuleAtLocation(Loc)) WriteImplicitModuleImport(Mod); else if (const IncludedFile *Inc = FindIncludeAtLocation(Loc)) { - // include and recursively process the file - if (Process(Inc->Id, Inc->FileType)) { - // and set lineinfo back to this file, if the nested one was - // actually included - // `2' indicates returning to a file (after having included - // another file. - LineInfoExtra = " 2"; - } + // Include and recursively process the file. + Process(Inc->Id, Inc->FileType); + // Add line marker to indicate we're returning from an included + // file. + LineInfoExtra = " 2"; } // fix up lineinfo (since commented out directive changed line // numbers) for inclusions that were skipped due to header guards @@ -569,7 +565,6 @@ bool InclusionRewriter::Process(FileID F OutputContentUpTo(FromFile, NextToWrite, SM.getFileOffset(SM.getLocForEndOfFile(FileId)), LocalEOL, Line, /*EnsureNewline=*/true); - return true; } /// InclusionRewriterInInput - Implement -frewrite-includes mode. Added: cfe/trunk/test/Frontend/Inputs/empty.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/Inputs/empty.h?rev=301727&view=auto ============================================================================== (empty) Modified: cfe/trunk/test/Frontend/rewrite-includes-line-markers.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/rewrite-includes-line-markers.c?rev=301727&r1=301726&r2=301727&view=diff ============================================================================== --- cfe/trunk/test/Frontend/rewrite-includes-line-markers.c (original) +++ cfe/trunk/test/Frontend/rewrite-includes-line-markers.c Fri Apr 28 19:54:03 2017 @@ -3,6 +3,8 @@ #include "test.h" int f() { return x; } +#include "empty.h" + // GNU: {{^}}# 1 "{{.*}}rewrite-includes-line-markers.c" // GNU: {{^}}#include "test.h" // GNU: {{^}}# 1 "{{.*}}test.h" @@ -11,6 +13,9 @@ int f() { return x; } // GNU: {{^}}int x; // GNU: {{^}}# 4 "{{.*}}rewrite-includes-line-markers.c" 2 // GNU: {{^}}int f() { return x; } +// GNU: {{^}} +// GNU: {{^}}# 1 "{{.*}}empty.h" 1 +// GNU: {{^}}# 7 "{{.*}}rewrite-includes-line-markers.c" 2 // LINE: {{^}}#line 1 "{{.*}}rewrite-includes-line-markers.c" // LINE: {{^}}#include "test.h" @@ -20,3 +25,6 @@ int f() { return x; } // LINE: {{^}}int x; // LINE: {{^}}#line 4 "{{.*}}rewrite-includes-line-markers.c" // LINE: {{^}}int f() { return x; } +// LINE: {{^}} +// LINE: {{^}}#line 1 "{{.*}}empty.h" +// LINE: {{^}}#line 7 "{{.*}}rewrite-includes-line-markers.c" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits