1 //== unittests/Sema/GslOwnerPointerInference.cpp - gsl::Owner/Pointer ========//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "../ASTMatchers/ASTMatchersTest.h"
10 #include "clang/ASTMatchers/ASTMatchers.h"
11 #include "gtest/gtest.h"
12
13 namespace clang {
14 using namespace ast_matchers;
15
TEST(OwnerPointer,BothHaveAttributes)16 TEST(OwnerPointer, BothHaveAttributes) {
17 EXPECT_TRUE(matches("template<class T>"
18 "class [[gsl::Owner]] C;"
19
20 "template<class T>"
21 "class [[gsl::Owner]] C {};"
22
23 "C<int> c;",
24 classTemplateSpecializationDecl(
25 hasName("C"), hasAttr(clang::attr::Owner))));
26 }
27
TEST(OwnerPointer,ForwardDeclOnly)28 TEST(OwnerPointer, ForwardDeclOnly) {
29 EXPECT_TRUE(matches("template<class T>"
30 "class [[gsl::Owner]] C;"
31
32 "template<class T>"
33 "class C {};"
34
35 "C<int> c;",
36 classTemplateSpecializationDecl(
37 hasName("C"), hasAttr(clang::attr::Owner))));
38 }
39
TEST(OwnerPointer,LateForwardDeclOnly)40 TEST(OwnerPointer, LateForwardDeclOnly) {
41 EXPECT_TRUE(matches("template<class T>"
42 "class C;"
43
44 "template<class T>"
45 "class C {};"
46
47 "template<class T>"
48 "class [[gsl::Owner]] C;"
49
50 "C<int> c;",
51 classTemplateSpecializationDecl(
52 hasName("C"), hasAttr(clang::attr::Owner))));
53 }
54
55 } // namespace clang
56