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