summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2014-07-14 23:40:24 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2014-07-14 23:40:24 +0000
commit37de611c0f4deb72ac85aac4381622cd355bdd26 (patch)
treec7e5e439b66f1514284449b61fe48a1fb6cfd216 /clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp
parent6be46b8ae56b7c20db9d46496940b678eef22771 (diff)
downloadbcm5719-llvm-37de611c0f4deb72ac85aac4381622cd355bdd26.tar.gz
bcm5719-llvm-37de611c0f4deb72ac85aac4381622cd355bdd26.zip
AST: Fix __uuidof for template specializations
While we previously supported __uuidof applied to a template specialization, we would only find the uuid attribute if it was applied to the template argument. We would erroneously ignore the uuid attribute on the specialization itself. This is required to parse Windows Runtime C++ Template Library headers. llvm-svn: 213016
Diffstat (limited to 'clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp')
-rw-r--r--clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp b/clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp
new file mode 100644
index 00000000000..0ee39086383
--- /dev/null
+++ b/clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp
@@ -0,0 +1,37 @@
+// RUN: %clang_cc1 -emit-llvm %s -o - -DDEFINE_GUID -triple=i386-pc-win32 -fms-extensions | FileCheck %s --check-prefix=CHECK
+
+struct _GUID;
+
+template <typename>
+struct X {
+};
+
+struct __declspec(uuid("{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}")) A {};
+
+struct B {};
+
+template <>
+struct __declspec(uuid("{BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB}")) X<B> {};
+
+struct __declspec(uuid("{CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC}")) C {};
+
+const _GUID &xa = __uuidof(X<A>);
+// CHECK-DAG: @"\01?xa@@3ABU_GUID@@B" = {{.*}} @_GUID_aaaaaaaa_aaaa_aaaa_aaaa_aaaaaaaaaaaa
+
+const _GUID &xb = __uuidof(X<B>);
+// CHECK-DAG: @"\01?xb@@3ABU_GUID@@B" = {{.*}} @_GUID_bbbbbbbb_bbbb_bbbb_bbbb_bbbbbbbbbbbb
+const _GUID &xc = __uuidof(X<C>);
+// CHECK-DAG: @"\01?xc@@3ABU_GUID@@B" = {{.*}} @_GUID_cccccccc_cccc_cccc_cccc_cccccccccccc
+
+template <>
+struct __declspec(uuid("{DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD}")) X<C> {};
+
+template <typename>
+struct __declspec(uuid("{EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE}")) Y {
+};
+
+const _GUID &xd = __uuidof(X<C>);
+// CHECK-DAG: @"\01?xd@@3ABU_GUID@@B" = {{.*}} @_GUID_dddddddd_dddd_dddd_dddd_dddddddddddd
+
+const _GUID &yd = __uuidof(Y<X<C> >);
+// CHECK-DAG: @"\01?yd@@3ABU_GUID@@B" = {{.*}} @_GUID_dddddddd_dddd_dddd_dddd_dddddddddddd
OpenPOWER on IntegriCloud