// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -std=c++11 -emit-llvm -fblocks -o - | FileCheck %s

// CHECK: @"_ZZ11+[A shared]E1a" = internal global
// CHECK: @"_ZZ11-[A(Foo) f]E1a" = internal global
// CHECK: v56@0:8i16i20i24i28i32i36i40i44^i48

@interface A
@end

@implementation A

+ (A *)shared {
  static A* a;
  
  return a;
}

@end

@interface A(Foo)
@end

@implementation A(Foo)
- (int)f {
  // FIXME: Add a member function to s and make sure that it's mangled correctly.
  struct s {
  };
  
  static s a;

  return 0;
}
@end

// PR6468
@interface Test
- (void) process: (int)r3 :(int)r4 :(int)r5 :(int)r6 :(int)r7 :(int)r8 :(int)r9 :(int)r10 :(int &)i;
@end

@implementation Test
- (void) process: (int)r3 :(int)r4 :(int)r5 :(int)r6 :(int)r7 :(int)r8 :(int)r9 :(int)r10 :(int &)i {
}
@end

// rdar://9566314
@interface NX
- (void)Meth;
@end

@implementation NX
- (void)Meth {
  void uiIsVisible();
// CHECK: call void @_Z11uiIsVisiblev
  uiIsVisible();
}
@end

// rdar://13434937
//
// Don't crash when mangling an enum whose semantic context
// is a class extension (which looks anonymous in the AST).
// The other tests here are just for coverage.
@interface Test2 @end
@interface Test2 ()
@property (assign) enum { T2x, T2y, T2z } axis;
@end
@interface Test2 (a)
@property (assign) enum { T2i, T2j, T2k } dimension;
@end
@implementation Test2 {
@public
  enum { T2a, T2b, T2c } alt_axis;
}
@end
template <class T> struct Test2Template { Test2Template() {} }; // must have a member that we'll instantiate and mangle
void test2(Test2 *t) {
  Test2Template<decltype(t.axis)> t0;
  Test2Template<decltype(t.dimension)> t1;
  Test2Template<decltype(t->alt_axis)> t2;
}

@protocol P;
void overload1(A<P>*) {}
// CHECK-LABEL: define void @_Z9overload1PU11objcproto1P1A
void overload1(const A<P>*) {}
// CHECK-LABEL: define void @_Z9overload1PKU11objcproto1P1A
void overload1(A<P>**) {}
// CHECK-LABEL: define void @_Z9overload1PPU11objcproto1P1A
void overload1(A<P>*const*) {}
// CHECK-LABEL: define void @_Z9overload1PKPU11objcproto1P1A
void overload1(A<P>***) {}
// CHECK-LABEL: define void @_Z9overload1PPPU11objcproto1P1A
void overload1(void (f)(A<P>*)) {}
// CHECK-LABEL: define void @_Z9overload1PFvPU11objcproto1P1AE

template<typename T> struct X { void f(); };
template<> void X<A*>::f() {}
// CHECK-LABEL: define void @_ZN1XIP1AE1fEv
template<> void X<A<P>*>::f() {}
// CHECK-LABEL: define void @_ZN1XIPU11objcproto1P1AE1fEv

// CHECK-LABEL: define void @_Z12kindof_test2PU8__kindof5Test2
void kindof_test2(__kindof Test2 *t2) { }

@interface Parameterized<T, U> : A
@end

// CHECK-LABEL: define void @_Z19parameterized_test1P13ParameterizedIP1AP4TestE
void parameterized_test1(Parameterized<A *, Test *> *p) {}

// CHECK-LABEL: define void @_Z19parameterized_test2PU8__kindof13ParameterizedIP1AP4TestE
void parameterized_test2(__kindof Parameterized<A *, Test *> *p) {}

// CHECK-LABEL: define void @_Z19parameterized_test3P13Parameterized
void parameterized_test3(Parameterized *p) {}

// CHECK-LABEL: define {{.*}}void @_Z1fP11objc_object
void f(__attribute__((ns_consumed)) id) {}
// CHECK-LABEL: define {{.*}}void @_Z1fPFP11objc_objectS0_S0_E
void f(id (*fn)(__attribute__((ns_consumed)) id, id)) {}
// CHECK-LABEL: define {{.*}}void @_Z1fU13block_pointerFvP11objc_objectE
void f(void (^)(__attribute__((ns_consumed)) id)) {}
