49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-unknown-unknown -fms-extensions | FileCheck %s
 | 
						|
// rdar://17784718
 | 
						|
 | 
						|
typedef struct _GUID
 | 
						|
{
 | 
						|
    unsigned int  Data1;
 | 
						|
    unsigned short Data2;
 | 
						|
    unsigned short Data3;
 | 
						|
    unsigned char  Data4[ 8 ];
 | 
						|
} GUID;
 | 
						|
 | 
						|
 | 
						|
template < typename T, const GUID & T_iid = __uuidof(T)>
 | 
						|
class UUIDTest
 | 
						|
{
 | 
						|
public:
 | 
						|
	UUIDTest() { }
 | 
						|
};
 | 
						|
 | 
						|
struct __declspec(uuid("EAFA1952-66F8-438B-8FBA-AF1BBAE42191")) TestStruct
 | 
						|
{
 | 
						|
	int foo;
 | 
						|
};
 | 
						|
 | 
						|
template <class T> void test_uuidofType(void *arg[sizeof(__uuidof(T))] = 0) {}
 | 
						|
 | 
						|
template <class T> void test_uuidofExpr(void *arg[sizeof(__uuidof(T::member))] = 0) {}
 | 
						|
 | 
						|
struct HasMember { typedef TestStruct member; };
 | 
						|
 | 
						|
int main(int argc, const char * argv[])
 | 
						|
{
 | 
						|
 | 
						|
    UUIDTest<TestStruct> uuidof_test;
 | 
						|
    test_uuidofType<TestStruct>();
 | 
						|
    test_uuidofExpr<HasMember>();
 | 
						|
    return 0;
 | 
						|
}
 | 
						|
 | 
						|
// CHECK: define i32 @main
 | 
						|
// CHECK: call void @_ZN8UUIDTestI10TestStructXu8__uuidoftS0_EEC1Ev
 | 
						|
// CHECK: call void @_Z15test_uuidofTypeI10TestStructEvPPv(i8** null)
 | 
						|
// CHECK: call void @_Z15test_uuidofExprI9HasMemberEvPPv(i8** null)
 | 
						|
 | 
						|
// CHECK: define linkonce_odr void @_ZN8UUIDTestI10TestStructXu8__uuidoftS0_EEC1Ev
 | 
						|
// CHECK: define linkonce_odr void @_Z15test_uuidofTypeI10TestStructEvPPv
 | 
						|
// CHECK: define linkonce_odr void @_Z15test_uuidofExprI9HasMemberEvPPv
 | 
						|
// CHECK: define linkonce_odr void @_ZN8UUIDTestI10TestStructXu8__uuidoftS0_EEC2Ev
 |