xref: /aosp_15_r20/external/clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -DDEFINE_GUID -triple=i386-pc-win32 -fms-extensions | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li struct _GUID;
4*67e74705SXin Li 
5*67e74705SXin Li template <typename>
6*67e74705SXin Li struct X {
7*67e74705SXin Li };
8*67e74705SXin Li 
9*67e74705SXin Li struct __declspec(uuid("{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}")) A {};
10*67e74705SXin Li 
11*67e74705SXin Li struct B {};
12*67e74705SXin Li 
13*67e74705SXin Li template <>
14*67e74705SXin Li struct __declspec(uuid("{BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB}")) X<B> {};
15*67e74705SXin Li 
16*67e74705SXin Li struct __declspec(uuid("{CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC}")) C {};
17*67e74705SXin Li 
18*67e74705SXin Li const _GUID &xa = __uuidof(X<A>);
19*67e74705SXin Li // CHECK-DAG:  @"\01?xa@@3ABU_GUID@@B" = {{.*}} @_GUID_aaaaaaaa_aaaa_aaaa_aaaa_aaaaaaaaaaaa
20*67e74705SXin Li 
21*67e74705SXin Li const _GUID &xb = __uuidof(X<B>);
22*67e74705SXin Li // CHECK-DAG:  @"\01?xb@@3ABU_GUID@@B" = {{.*}} @_GUID_bbbbbbbb_bbbb_bbbb_bbbb_bbbbbbbbbbbb
23*67e74705SXin Li const _GUID &xc = __uuidof(X<C>);
24*67e74705SXin Li // CHECK-DAG:  @"\01?xc@@3ABU_GUID@@B" = {{.*}} @_GUID_cccccccc_cccc_cccc_cccc_cccccccccccc
25*67e74705SXin Li 
26*67e74705SXin Li template <>
27*67e74705SXin Li struct __declspec(uuid("{DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD}")) X<C> {};
28*67e74705SXin Li 
29*67e74705SXin Li template <typename>
30*67e74705SXin Li struct __declspec(uuid("{EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE}")) Y {
31*67e74705SXin Li };
32*67e74705SXin Li 
33*67e74705SXin Li const _GUID &xd = __uuidof(X<C>);
34*67e74705SXin Li // CHECK-DAG:  @"\01?xd@@3ABU_GUID@@B" = {{.*}} @_GUID_dddddddd_dddd_dddd_dddd_dddddddddddd
35*67e74705SXin Li 
36*67e74705SXin Li const _GUID &yd = __uuidof(Y<X<C> >);
37*67e74705SXin Li // CHECK-DAG:  @"\01?yd@@3ABU_GUID@@B" = {{.*}} @_GUID_dddddddd_dddd_dddd_dddd_dddddddddddd
38