Files
clang-p2996/clang/test/Parser/missing-end-4.m
dingfei 1f3c1cba49 [Parser][ObjC] Fix crash on nested top-level block with better recovery path
Delay consuming tokens until we are certain that the next token is not top
level block. Otherwise we bail out as if we saw an @end for better diagnostic
and recovery.

Fixes https://github.com/llvm/llvm-project/issues/64065.

Reviewed By: rjmccall

Differential Revision: https://reviews.llvm.org/D156277.
2023-08-03 12:58:48 +08:00

52 lines
1.5 KiB
Objective-C

// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
@interface X1
@end
@implementation X1 // expected-note {{implementation started here}}
@interface Y1 // expected-error {{missing '@end'}}
@end
@end // expected-error {{'@end' must appear in an Objective-C context}}
@interface X2
@end
@implementation X2 // expected-note {{implementation started here}}
@protocol Y2 // expected-error {{missing '@end'}}
@end
@end // expected-error {{'@end' must appear in an Objective-C context}}
@interface X6 // expected-note {{class started here}}
@interface X7 // expected-error {{missing '@end'}}
@end
@end // expected-error {{'@end' must appear in an Objective-C context}}
@protocol P1 // expected-note {{protocol started here}}
@interface P2 // expected-error {{missing '@end'}}
@end
@end // expected-error {{'@end' must appear in an Objective-C context}}
@interface X4 // expected-note {{class started here}}
@implementation X4 // expected-error {{missing '@end'}}
@end
@end // expected-error {{'@end' must appear in an Objective-C context}}
@interface I
@end
@implementation I
@protocol P; // forward declarations of protocols in @implementations is allowed
@class C; // forward declarations of classes in @implementations is allowed
- (C<P>*) MyMeth {}
@end
@interface I2 {} // expected-note {{class started here}}
@protocol P2; // expected-error {{missing '@end'}}
@class C2;
@end // expected-error {{'@end' must appear in an Objective-C context}}
@interface I3
@end
@implementation I3
- Meth {}
+ Cls {}
@protocol P3;
@end