forked from OSchip/llvm-project
Properly escape filenames in line directives.
Fixes PR17018. Only partial test coverage because I don't want to try to write a test which generates a file whose name contains a newline. llvm-svn: 189557
This commit is contained in:
parent
9a83a76b1b
commit
80e45b8cd4
|
@ -190,11 +190,11 @@ void PrintPPOutputPPCallbacks::WriteLineInfo(unsigned LineNo,
|
|||
// Emit #line directives or GNU line markers depending on what mode we're in.
|
||||
if (UseLineDirective) {
|
||||
OS << "#line" << ' ' << LineNo << ' ' << '"';
|
||||
OS.write(CurFilename.data(), CurFilename.size());
|
||||
OS.write_escaped(CurFilename);
|
||||
OS << '"';
|
||||
} else {
|
||||
OS << '#' << ' ' << LineNo << ' ' << '"';
|
||||
OS.write(CurFilename.data(), CurFilename.size());
|
||||
OS.write_escaped(CurFilename);
|
||||
OS << '"';
|
||||
|
||||
if (ExtraLen)
|
||||
|
@ -285,7 +285,6 @@ void PrintPPOutputPPCallbacks::FileChanged(SourceLocation Loc,
|
|||
|
||||
CurFilename.clear();
|
||||
CurFilename += UserLoc.getFilename();
|
||||
Lexer::Stringify(CurFilename);
|
||||
FileType = NewFileType;
|
||||
|
||||
if (DisableLineMarkers) {
|
||||
|
|
|
@ -114,7 +114,9 @@ void InclusionRewriter::WriteLineInfo(const char *Filename, int Line,
|
|||
} else {
|
||||
// Use GNU linemarkers as described here:
|
||||
// http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html
|
||||
OS << '#' << ' ' << Line << ' ' << '"' << Filename << '"';
|
||||
OS << '#' << ' ' << Line << ' ' << '"';
|
||||
OS.write_escaped(Filename);
|
||||
OS << '"';
|
||||
if (!Extra.empty())
|
||||
OS << Extra;
|
||||
if (FileType == SrcMgr::C_System)
|
||||
|
|
|
@ -73,3 +73,6 @@ extern int z;
|
|||
# 42 "A.c"
|
||||
# 44 "A.c"
|
||||
# 49 "A.c"
|
||||
|
||||
// CHECK: # 50 "a\n.c"
|
||||
# 50 "a\012.c"
|
||||
|
|
Loading…
Reference in New Issue