// RUN: rm -rf %t
// RUN: %clang_cc1 -objcmt-migrate-ns-macros -mt-migrate-directory %t %s -x objective-c -fobjc-runtime-has-weak -fobjc-arc -triple x86_64-apple-darwin11
// RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c -fobjc-runtime-has-weak -fobjc-arc %s.result

typedef signed char int8_t;
typedef short int16_t;
typedef int int32_t;
typedef long NSInteger;
typedef long long int64_t;

typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long NSUInteger;
typedef unsigned long long uint64_t;

#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
#define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
#define DEPRECATED  __attribute__((deprecated))

#ifndef NS_ENUM
#import <Foundation/Foundation.h>
#endif
typedef NS_ENUM(NSInteger, wibble) {
  blah,
  blarg
};

typedef NS_ENUM(NSUInteger, UITableViewCellStyle) {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin,
    UIViewAutoresizingFlexibleWidth,
    UIViewAutoresizingFlexibleRightMargin,
    UIViewAutoresizingFlexibleTopMargin,
    UIViewAutoresizingFlexibleHeight,
    UIViewAutoresizingFlexibleBottomMargin
};

typedef NS_ENUM(unsigned int, UIViewAnimationTransition) {
    UIViewAnimationTransitionNone,
    UIViewAnimationTransitionFlipFromLeft,
    UIViewAnimationTransitionFlipFromRight,
    UIViewAnimationTransitionCurlUp,
    UIViewAnimationTransitionCurlDown,
};

typedef NS_OPTIONS(unsigned int, UITableView) {
    UIViewOne   = 0,
    UIViewTwo   = 1 << 0,
    UIViewThree = 1 << 1,
    UIViewFour  = 1 << 2,
    UIViewFive  = 1 << 3,
    UIViewSix   = 1 << 4,
    UIViewSeven = 1 << 5
};

typedef NS_OPTIONS(NSUInteger, UI) {
  UIOne = 0,
  UITwo = 0x1,
  UIthree = 0x8,
  UIFour = 0x100
};

typedef NS_OPTIONS(unsigned int, UIPOWER2) {
  UIP2One = 0,
  UIP2Two = 0x1,
  UIP2three = 0x8,
  UIP2Four = 0x100
};

enum {
  UNOne,
  UNTwo
};

// Should use NS_ENUM even though it is all power of 2.
typedef NS_ENUM(NSInteger, UIK) {
  UIKOne = 1,
  UIKTwo = 2,
};

typedef NS_ENUM(unsigned int, NSTickMarkPosition)  {
    NSTickMarkBelow = 0,
    NSTickMarkAbove = 1,
    NSTickMarkLeft = NSTickMarkAbove,
    NSTickMarkRight = NSTickMarkBelow
};

typedef NS_OPTIONS(NSUInteger, UITableStyle) {
    UIViewNone         = 0x0,
    UIViewMargin       = 0x1,
    UIViewWidth        = 0x2,
    UIViewRightMargin  = 0x3,
    UIViewBottomMargin = 0xbadbeef
};

typedef NS_OPTIONS(NSUInteger, UIStyle) {
    UIView0         = 0,
    UIView1 = 0XBADBEEF
};

typedef NS_ENUM(NSUInteger, NSBitmapImageFileType) {
    NSTIFFFileType,
    NSBMPFileType,
    NSGIFFileType,
    NSJPEGFileType,
    NSPNGFileType,
    NSJPEG2000FileType
};

typedef NS_ENUM(NSUInteger, NSAlertStyle) {
    NSWarningAlertStyle = 0,
    NSInformationalAlertStyle = 1,
    NSCriticalAlertStyle = 2
};

enum {
    D_NSTIFFFileType,
    D_NSBMPFileType,
    D_NSGIFFileType,
    D_NSJPEGFileType,
    D_NSPNGFileType,
    D_NSJPEG2000FileType
};
typedef NSUInteger D_NSBitmapImageFileType DEPRECATED;

typedef enum  {
    D_NSTickMarkBelow = 0,
    D_NSTickMarkAbove = 1
} D_NSTickMarkPosition DEPRECATED;


#define NS_ENUM_AVAILABLE(X,Y)


typedef NS_OPTIONS(NSUInteger, NSFOptions) {
    NSFStrongMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 0),       
    NSFOpaqueMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 0),
    NSFMallocMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 0),       
    NSFMachVirtualMemory NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 0),
    NSFWeakMemory NS_ENUM_AVAILABLE(10_8, 6_0) = (5UL << 0),         

    NSFObjectPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (0UL << 8),         
    NSFOpaquePersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 8),         
    NSFObjectPointerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (2UL << 8),  
    NSFCStringPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (3UL << 8),        
    NSFStructPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (4UL << 8),         
    NSFIntegerPersonality NS_ENUM_AVAILABLE(10_5, 6_0) = (5UL << 8),        
    NSFCopyIn NS_ENUM_AVAILABLE(10_5, 6_0) = (1UL << 16),      
};

typedef NS_ENUM(unsigned int, UIP) {
  UIP0One = 0,
  UIP0Two = 1,
  UIP0Three = 2,
  UIP0Four = 10,
  UIP0Last = 0x100
};

typedef NS_OPTIONS(unsigned int, UIP_3) {
  UIPZero = 0x0,
  UIPOne = 0x1,
  UIPTwo = 0x2,
  UIP10 = 0x10,
  UIPHundred = 0x100
};

typedef NS_ENUM(unsigned int, UIP4_3) {
  UIP4Zero = 0x0,
  UIP4One = 0x1,
  UIP4Two = 0x2,
  UIP410 = 0x10,
  UIP4Hundred = 100
};

typedef NS_OPTIONS(unsigned int, UIP5_3) {
  UIP5Zero = 0x0,
  UIP5Two = 0x2,
  UIP510 = 0x3,
  UIP5Hundred = 0x4
};

typedef NS_ENUM(unsigned int, UIP6_3) {
  UIP6Zero = 0x0,
  UIP6One = 0x1,
  UIP6Two = 0x2,
  UIP610 = 10,
  UIP6Hundred = 0x100
};

typedef NS_ENUM(unsigned int, UIP7_3) {
  UIP7Zero = 0x0,
  UIP7One = 1,
  UIP7Two = 0x2,
  UIP710 = 10,
  UIP7Hundred = 100
};


typedef NS_ENUM(unsigned int, UIP8_3) {
  Random = 0,
  Random1 = 2,
  Random2 = 4,
  Random3 = 0x12345,
  Random4 = 0x3444444,
  Random5 = 0xbadbeef,
  Random6
};

// rdar://15200602
#define NS_AVAILABLE_MAC(X)  __attribute__((availability(macosx,introduced=X)))
#define NS_ENUM_AVAILABLE_MAC(X) __attribute__((availability(macosx,introduced=X)))

typedef NS_ENUM(NSInteger, NSModalResponse) {
    NSModalResponseStop                 = (-1000), // Also used as the default response for sheets
    NSModalResponseAbort                = (-1001),
    NSModalResponseContinue             = (-1002), 
} NS_ENUM_AVAILABLE_MAC(10.9);

// rdar://15201056
typedef NSUInteger FarFarAwayOptions;

// rdar://15200915
typedef NS_OPTIONS(NSUInteger, FarAwayOptions) {
  FarAway1    = 1 << 1,
  FarAway2    = 1 << 2
};
typedef NS_OPTIONS(NSUInteger, NSWorkspaceLaunchOptions) {
     NSWorkspaceLaunchAndPrint =                 0x00000002,
     NSWorkspaceLaunchWithErrorPresentation    = 0x00000040,
     NSWorkspaceLaunchInhibitingBackgroundOnly = 0x00000080,
     NSWorkspaceLaunchWithoutAddingToRecents   = 0x00000100,
     NSWorkspaceLaunchWithoutActivation        = 0x00000200,
     NSWorkspaceLaunchAsync                    = 0x00010000,
     NSWorkspaceLaunchAllowingClassicStartup   = 0x00020000,
     NSWorkspaceLaunchPreferringClassic        = 0x00040000,
     NSWorkspaceLaunchNewInstance              = 0x00080000,
     NSWorkspaceLaunchAndHide                  = 0x00100000,
     NSWorkspaceLaunchAndHideOthers            = 0x00200000,
     NSWorkspaceLaunchDefault = NSWorkspaceLaunchAsync | 
     NSWorkspaceLaunchAllowingClassicStartup
};

typedef NS_OPTIONS(NSUInteger, NSExcludeOptions) {
    NSExcludeQuickDrawElementsIconCreationOption    = 1 << 1,
    NSExclude10_4ElementsIconCreationOption         = 1 << 2
};

typedef NS_OPTIONS(NSUInteger, NSExcludeCreationOption) {
    NSExcludeQuickDrawElementsCreationOption    = 1 << 1,
    NSExclude10_4ElementsCreationOption         = 1 << 2
};


typedef NS_OPTIONS(NSUInteger, NSExcludeIconOptions) {
    NSExcludeQuickDrawElementsIconOption    = 1 << 1,
    NSExclude10_4ElementsIconOption         = 1 << 2
};

@interface INTF {
  NSExcludeIconOptions I1;
  NSExcludeIconOptions I2;
}
@end

enum {
  FarFarAway1    = 1 << 1,
  FarFarAway2    = 1 << 2
};

// rdar://15200915
typedef NS_OPTIONS(NSUInteger, NSWindowOcclusionState) {
    NSWindowOcclusionStateVisible = 1UL << 1,
};

typedef NS_ENUM(NSUInteger, NSWindowNumberListOptions) {
    NSWindowCloseButton,
    NSWindowMiniaturizeButton,
    NSWindowZoomButton,
    NSWindowToolbarButton,
    NSWindowDocumentIconButton
};

typedef NS_ENUM(NSUInteger, NSSelectionDirection) {
    NSDirectSelection = 0,
    NSSelectingNext,
    NSSelectingPrevious
};

// standard window buttons

// rdar://18262255
typedef NS_ENUM(NSUInteger, Thing) {
   ThingOne,
   ThingTwo,
   ThingThree,
};

// rdar://18498539
typedef NS_ENUM(unsigned int, NumericEnum) {
    one = 1
};

typedef NS_ENUM(unsigned int, NumericEnum2) {
    Two = 2
};

typedef NS_ENUM(unsigned int, NumericEnum3) {
    Three = 3
};

typedef NS_OPTIONS(unsigned int, NumericEnum4) {
    Four = 4
};

// rdar://18532199
typedef NS_ENUM(int8_t, MyEnumeratedType)
{
  UI8one = 1
};


typedef NS_OPTIONS(uint16_t, UI16) {
  UI16One = 0,
  UI16Two = 0x1,
  UI16three = 0x8,
  UI16Four = 0x100
};

typedef NS_ENUM(uint32_t, UI32TableViewCellStyle) {
    UI32ViewAutoresizingNone                 = 0,
    UI32ViewAutoresizingFlexibleLeftMargin,
    UI32ViewAutoresizingFlexibleWidth,
    UI32ViewAutoresizingFlexibleRightMargin,
    UI32ViewAutoresizingFlexibleTopMargin,
    UI32ViewAutoresizingFlexibleHeight,
    UI32ViewAutoresizingFlexibleBottomMargin
};

typedef NS_ENUM(uint8_t, UI8Type)
{
        UIU8one = 1
};

// rdar://19352510
typedef NS_ENUM(NSInteger, MyEnum) {zero};

typedef NS_ENUM(NSUInteger, MyEnumNSUInteger) {two};

typedef NS_ENUM(int, MyEnumint) {three, four};

typedef NS_ENUM(unsigned long, MyEnumlonglong) {five};

typedef NS_ENUM(unsigned long long, MyEnumunsignedlonglong) {
  ll1,
  ll2= 0xff,
  ll3,
  ll4
};

// rdar://19994496
typedef NS_ENUM(int8_t, MyOneEnum) {int8_one};

typedef NS_ENUM(int16_t, Myint16_tEnum) {
          int16_t_one,
          int16_t_two };
