blob: 79e3c25cbaad098b5e543074ee057d87eb7db711 [file] [log] [blame]
// RUN: %clang_cc1 -verify %s
#define CF_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
#define NS_ENUM(_type, _name) CF_ENUM(_type, _name)
#define NS_ERROR_ENUM(_type, _name, _domain) \
enum _name : _type _name; enum __attribute__((ns_error_domain(_domain))) _name : _type
typedef NS_ENUM(unsigned, MyEnum) {
MyFirst,
MySecond,
};
typedef NS_ENUM(invalidType, MyInvalidEnum) {
// expected-error@-1{{unknown type name 'invalidType'}}
// expected-error@-2{{unknown type name 'invalidType'}}
MyFirstInvalid,
MySecondInvalid,
};
const char *MyErrorDomain;
typedef NS_ERROR_ENUM(unsigned char, MyErrorEnum, MyErrorDomain) {
MyErrFirst,
MyErrSecond,
};
struct __attribute__((ns_error_domain(MyErrorDomain))) MyStructErrorDomain {};
typedef NS_ERROR_ENUM(unsigned char, MyErrorEnumInvalid, InvalidDomain) {
// expected-error@-1{{domain argument 'InvalidDomain' not valid top-level declaration}}
MyErrFirstInvalid,
MyErrSecondInvalid,
};
typedef NS_ERROR_ENUM(unsigned char, MyErrorEnumInvalid, "domain-string");
// expected-error@-1{{domain argument must be an identifier}}
int __attribute__((ns_error_domain(MyErrorDomain))) NotTagDecl;
// expected-error@-1{{ns_error_domain attribute only valid on enum/struct/union/class}}
void foo() {}
typedef NS_ERROR_ENUM(unsigned char, MyErrorEnumInvalidFunction, foo);
// expected-error@-1{{domain argument 'foo' not valid top-level declaration}}