зеркало из 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);
|
OwningExprResult TernaryMiddle(Actions, true);
|
||||||
if (NextTokPrec == prec::Conditional) {
|
if (NextTokPrec == prec::Conditional) {
|
||||||
if (Tok.isNot(tok::colon)) {
|
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:
|
// Handle this production specially:
|
||||||
// logical-OR-expression '?' expression ':' conditional-expression
|
// logical-OR-expression '?' expression ':' conditional-expression
|
||||||
// In particular, the RHS of the '?' is 'expression', not
|
// In particular, the RHS of the '?' is 'expression', not
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
int x(*g); // expected-error {{use of undeclared identifier 'g'}}
|
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.
|
// PR4451 - We should recover well from the typo of '::' as ':' in a2.
|
||||||
|
@ -40,3 +42,7 @@ struct a {
|
||||||
int Type : fooenum;
|
int Type : fooenum;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void test(struct Type *P) {
|
||||||
|
int Type;
|
||||||
|
Type = 1 ? P->Type : Type;
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче