Handle a code-completion token being passed to the macro stringify operator.

Fixes http://llvm.org/PR10826.

llvm-svn: 139087
This commit is contained in:
Argyrios Kyrtzidis 2011-09-04 03:32:19 +00:00
parent 5cec2aea3f
commit b914e3bc5c
2 changed files with 19 additions and 0 deletions

View File

@ -221,6 +221,8 @@ Token MacroArgs::StringifyArgument(const Token *ArgToks,
std::string Str = Lexer::Stringify(TokStr);
Result.append(Str.begin(), Str.end());
}
} else if (Tok.is(tok::code_completion)) {
PP.CodeCompleteNaturalLanguage();
} else {
// Otherwise, just append the token. Do some gymnastics to get the token
// in place and avoid copies where possible.

View File

@ -0,0 +1,17 @@
const char *func(const char *);
#define MORE __FILE__
#define M(x) "1"#x
#define N(x) func("2"#x MORE)
void foo(const char *);
int test() {
foo(M(x()));
foo(N(x()));
}
// RUN: c-index-test -code-completion-at=%s:11:11 %s | FileCheck %s
// RUN: c-index-test -code-completion-at=%s:12:11 %s | FileCheck %s
// CHECK: Natural language