// RUN: %clang_cc1 -fsyntax-only -verify -fobjc-exceptions %s
typedef signed char BOOL;
typedef struct _NSZone NSZone;

@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;

@protocol NSObject
- (BOOL)isEqual:(id)object;
@end

@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end

@protocol NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder;
@end

@interface NSObject <NSObject> {}
@end

@class NSData, NSArray, NSDictionary, NSCharacterSet, NSData, NSURL, NSError, NSLocale;

@interface NSException : NSObject <NSCopying, NSCoding> {}
@end

@class ASTNode, XCRefactoringParser, Transform, TransformInstance, XCRefactoringSelectionInfo;

@interface XCRefactoringTransformation : NSObject {}
@end

@implementation XCRefactoringTransformation
- (NSDictionary *)setUpInfoForTransformKey:(NSString *)transformKey outError:(NSError **)outError {
    @try {}
    // the exception name is optional (weird)
    @catch (NSException *) {}
}
@end

int foo() {
  struct s { int a, b; } agg, *pagg;

  @throw 42; // expected-error {{@throw requires an Objective-C object type ('int' invalid)}}
  @throw agg; // expected-error {{@throw requires an Objective-C object type ('struct s' invalid)}}
  @throw pagg; // expected-error {{@throw requires an Objective-C object type ('struct s *' invalid)}}
  @throw; // expected-error {{@throw (rethrow) used outside of a @catch block}}
}
