forked from OSchip/llvm-project
apply Eli's patch to fix PR4008, with a testcase. Thanks Eli!
llvm-svn: 69750
This commit is contained in:
parent
c8e236278e
commit
ca515ccb49
|
@ -126,6 +126,14 @@ static char GetFirstChar(Preprocessor &PP, const Token &Tok) {
|
|||
/// don't want to track enough to tell "x.." from "...".
|
||||
bool TokenConcatenation::AvoidConcat(const Token &PrevTok,
|
||||
const Token &Tok) const {
|
||||
// First, check to see if the tokens were directly adjacent in the original
|
||||
// source. If they were, it must be okay to stick them together: if there
|
||||
// were an issue, the tokens would have been lexed differently.
|
||||
if (PrevTok.getLocation().isFileID() && Tok.getLocation().isFileID() &&
|
||||
PrevTok.getLocation().getFileLocWithOffset(PrevTok.getLength()) ==
|
||||
Tok.getLocation())
|
||||
return false;
|
||||
|
||||
tok::TokenKind PrevKind = PrevTok.getKind();
|
||||
if (PrevTok.getIdentifierInfo()) // Language keyword or named operator.
|
||||
PrevKind = tok::identifier;
|
||||
|
|
|
@ -1,18 +1,23 @@
|
|||
// RUN: clang-cc -E %s | grep '+ + - - + + = = =' &&
|
||||
// RUN: clang-cc -E %s | not grep -F '...' &&
|
||||
// RUN: clang-cc -E %s | not grep -F 'L"str"'
|
||||
|
||||
// RUN: clang-cc -E %s -o %t &&
|
||||
// This should print as ".. ." to avoid turning into ...
|
||||
// RUN: grep -F 'A: . . .' %t &&
|
||||
#define y(a) ..a
|
||||
y(.)
|
||||
A: y(.)
|
||||
|
||||
// RUN: grep -F 'C: .. .' %t &&
|
||||
#define DOT .
|
||||
C: ..DOT
|
||||
|
||||
|
||||
// RUN: grep -F 'D: + + - - + + = = =' %t &&
|
||||
#define PLUS +
|
||||
#define EMPTY
|
||||
#define f(x) =x=
|
||||
+PLUS -EMPTY- PLUS+ f(=)
|
||||
D: +PLUS -EMPTY- PLUS+ f(=)
|
||||
|
||||
// RUN: grep -F 'E: L "str"' %t
|
||||
|
||||
// Should expand to L "str" not L"str"
|
||||
#define test(x) L#x
|
||||
test(str)
|
||||
E: test(str)
|
||||
|
||||
|
|
Loading…
Reference in New Issue