зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
a1efc8c8c6
Коммит
a69d0ed3ab
|
@ -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;
|
||||
}
|
Загрузка…
Ссылка в новой задаче