From 37de611c0f4deb72ac85aac4381622cd355bdd26 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Mon, 14 Jul 2014 23:40:24 +0000 Subject: 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 --- clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp (limited to 'clang/test/CodeGenCXX/microsoft-templ-uuidof.cpp') 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 +struct X { +}; + +struct __declspec(uuid("{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}")) A {}; + +struct B {}; + +template <> +struct __declspec(uuid("{BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB}")) X {}; + +struct __declspec(uuid("{CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC}")) C {}; + +const _GUID &xa = __uuidof(X); +// CHECK-DAG: @"\01?xa@@3ABU_GUID@@B" = {{.*}} @_GUID_aaaaaaaa_aaaa_aaaa_aaaa_aaaaaaaaaaaa + +const _GUID &xb = __uuidof(X); +// CHECK-DAG: @"\01?xb@@3ABU_GUID@@B" = {{.*}} @_GUID_bbbbbbbb_bbbb_bbbb_bbbb_bbbbbbbbbbbb +const _GUID &xc = __uuidof(X); +// CHECK-DAG: @"\01?xc@@3ABU_GUID@@B" = {{.*}} @_GUID_cccccccc_cccc_cccc_cccc_cccccccccccc + +template <> +struct __declspec(uuid("{DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD}")) X {}; + +template +struct __declspec(uuid("{EEEEEEEE-EEEE-EEEE-EEEE-EEEEEEEEEEEE}")) Y { +}; + +const _GUID &xd = __uuidof(X); +// CHECK-DAG: @"\01?xd@@3ABU_GUID@@B" = {{.*}} @_GUID_dddddddd_dddd_dddd_dddd_dddddddddddd + +const _GUID &yd = __uuidof(Y >); +// CHECK-DAG: @"\01?yd@@3ABU_GUID@@B" = {{.*}} @_GUID_dddddddd_dddd_dddd_dddd_dddddddddddd -- cgit v1.2.3