116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -std=c++11 -emit-llvm -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) {}
 |