reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
// 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)) {}