зеркало из https://github.com/microsoft/clang.git
Implement C++0x [lex.pptoken]p3's handling of <::.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129525 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
8a9013d248
Коммит
87a1e19735
|
@ -2398,6 +2398,21 @@ LexNextToken:
|
||||||
CurPtr = ConsumeChar(CurPtr, SizeTmp, Result);
|
CurPtr = ConsumeChar(CurPtr, SizeTmp, Result);
|
||||||
Kind = tok::lessequal;
|
Kind = tok::lessequal;
|
||||||
} else if (Features.Digraphs && Char == ':') { // '<:' -> '['
|
} else if (Features.Digraphs && Char == ':') { // '<:' -> '['
|
||||||
|
if (Features.CPlusPlus0x &&
|
||||||
|
getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == ':') {
|
||||||
|
// C++0x [lex.pptoken]p3:
|
||||||
|
// Otherwise, if the next three characters are <:: and the subsequent
|
||||||
|
// character is neither : nor >, the < is treated as a preprocessor
|
||||||
|
// token by itself and not as the first character of the alternative
|
||||||
|
// token <:.
|
||||||
|
unsigned SizeTmp3;
|
||||||
|
char After = getCharAndSize(CurPtr + SizeTmp + SizeTmp2, SizeTmp3);
|
||||||
|
if (After != ':' && After != '>') {
|
||||||
|
Kind = tok::less;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CurPtr = ConsumeChar(CurPtr, SizeTmp, Result);
|
CurPtr = ConsumeChar(CurPtr, SizeTmp, Result);
|
||||||
Kind = tok::l_square;
|
Kind = tok::l_square;
|
||||||
} else if (Features.Digraphs && Char == '%') { // '<%' -> '{'
|
} else if (Features.Digraphs && Char == '%') { // '<%' -> '{'
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
// RUN: %clang_cc1 -fsyntax-only -std=c++0x -verify %s
|
||||||
|
|
||||||
|
int a<::> = { 1, 2, 3 };
|
||||||
|
int b = a<:::a<:0:>:>;
|
||||||
|
bool c = a<:0:><::b;
|
||||||
|
|
||||||
|
template<int &n> void f() {}
|
||||||
|
template void f<::b>();
|
||||||
|
|
||||||
|
#define x a<:: ## : b :>
|
||||||
|
int d = x; // expected-error {{pasting formed ':::', an invalid preprocessing token}} expected-error {{expected unqualified-id}}
|
Загрузка…
Ссылка в новой задаче