forked from OSchip/llvm-project
Make -E mode propagate #pragma comment's into the output.
llvm-svn: 62339
This commit is contained in:
parent
e04334730e
commit
5eef507b32
|
@ -67,6 +67,8 @@ public:
|
|||
virtual void FileChanged(SourceLocation Loc, FileChangeReason Reason,
|
||||
SrcMgr::CharacteristicKind FileType);
|
||||
virtual void Ident(SourceLocation Loc, const std::string &str);
|
||||
virtual void PragmaComment(SourceLocation Loc, const IdentifierInfo *Kind,
|
||||
const std::string &Str);
|
||||
|
||||
|
||||
bool HandleFirstTokOnLine(Token &Tok);
|
||||
|
@ -186,7 +188,7 @@ void PrintPPOutputPPCallbacks::FileChanged(SourceLocation Loc,
|
|||
}
|
||||
}
|
||||
|
||||
/// HandleIdent - Handle #ident directives when read by the preprocessor.
|
||||
/// Ident - Handle #ident directives when read by the preprocessor.
|
||||
///
|
||||
void PrintPPOutputPPCallbacks::Ident(SourceLocation Loc, const std::string &S) {
|
||||
MoveToLine(Loc);
|
||||
|
@ -196,6 +198,33 @@ void PrintPPOutputPPCallbacks::Ident(SourceLocation Loc, const std::string &S) {
|
|||
EmittedTokensOnThisLine = true;
|
||||
}
|
||||
|
||||
void PrintPPOutputPPCallbacks::PragmaComment(SourceLocation Loc,
|
||||
const IdentifierInfo *Kind,
|
||||
const std::string &Str) {
|
||||
MoveToLine(Loc);
|
||||
OS << "#pragma comment(" << Kind->getName();
|
||||
|
||||
if (!Str.empty()) {
|
||||
OS << ", \"";
|
||||
|
||||
for (unsigned i = 0, e = Str.size(); i != e; ++i) {
|
||||
unsigned char Char = Str[i];
|
||||
if (isprint(Char) && Char != '\\')
|
||||
OS << (char)Char;
|
||||
else // Output anything hard as an octal escape.
|
||||
OS << '\\'
|
||||
<< (char)('0'+ ((Char >> 6) & 7))
|
||||
<< (char)('0'+ ((Char >> 3) & 7))
|
||||
<< (char)('0'+ ((Char >> 0) & 7));
|
||||
}
|
||||
OS << '"';
|
||||
}
|
||||
|
||||
OS << ')';
|
||||
EmittedTokensOnThisLine = true;
|
||||
}
|
||||
|
||||
|
||||
/// HandleFirstTokOnLine - When emitting a preprocessed file in -E mode, this
|
||||
/// is called for the first token on each new line. If this really is the start
|
||||
/// of a new logical line, handle it and return true, otherwise return false.
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#pragma comment(foo) // expected-error {{unknown kind of pragma comment}}
|
||||
#pragma comment(compiler,) // expected-error {{pragma comment requires}}
|
||||
#define foo compiler
|
||||
#pragma comment(foo) // macro expand kind?
|
||||
#pragma comment(foo) // macro expand kind.
|
||||
#pragma comment(foo) x // expected-error {{pragma comment requires}}
|
||||
|
||||
#pragma comment(user, "foo\abar\nbaz\tsome thing")
|
||||
|
||||
|
|
Loading…
Reference in New Issue