fix a more evil case of : / :: confusion arising in ?:.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91039 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-12-10 02:02:58 +00:00
Родитель a1efc8c8c6
Коммит a69d0ed3ab
2 изменённых файлов: 10 добавлений и 1 удалений

Просмотреть файл

@ -317,6 +317,9 @@ Parser::ParseRHSOfBinaryExpression(OwningExprResult LHS, unsigned MinPrec) {
OwningExprResult TernaryMiddle(Actions, true);
if (NextTokPrec == prec::Conditional) {
if (Tok.isNot(tok::colon)) {
// Don't parse FOO:BAR as if it were a typo for FOO::BAR.
ColonProtectionRAIIObject X(*this);
// Handle this production specially:
// logical-OR-expression '?' expression ':' conditional-expression
// In particular, the RHS of the '?' is 'expression', not

Просмотреть файл

@ -2,7 +2,9 @@
int x(*g); // expected-error {{use of undeclared identifier 'g'}}
struct Type { };
struct Type {
int Type;
};
// PR4451 - We should recover well from the typo of '::' as ':' in a2.
@ -40,3 +42,7 @@ struct a {
int Type : fooenum;
};
void test(struct Type *P) {
int Type;
Type = 1 ? P->Type : Type;
}