brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 76efd45 Raw
118 lines · cpp
1// RUN: %clang_cc1 %s -ast-dump | FileCheck %s2 3// Verify that we print the [[clang::lifetime_capture_by(X)]] attribute.4 5struct S {6    void foo(int &a, int &b) [[clang::lifetime_capture_by(a, b, global)]];7};8 9// CHECK: CXXMethodDecl {{.*}}clang::lifetime_capture_by(a, b, global)10 11// ****************************************************************************12// Infer annotation for STL container methods.13// ****************************************************************************14namespace __gnu_cxx {15template <typename T>16struct basic_iterator {};17}18 19namespace std {20template<typename T> class allocator {};21template <typename T, typename Alloc = allocator<T>>22struct vector {23  typedef __gnu_cxx::basic_iterator<T> iterator;24  iterator begin();25 26  vector();27 28  void push_back(const T&);29  void push_back(T&&);30 31  void insert(iterator, T&&);32};33 34template <typename Key, typename Value>35struct map {36  Value& operator[](Key&& p);37  Value& operator[](const Key& p);38};39} // namespace std40 41// CHECK-NOT:   LifetimeCaptureByAttr42 43struct [[gsl::Pointer()]] View {};44std::vector<View> views;45// CHECK:   ClassTemplateSpecializationDecl {{.*}} struct vector definition instantiated_from 0x{{.+}} implicit_instantiation46 47// CHECK:       CXXMethodDecl {{.*}} push_back 'void (const View &)'48// CHECK-NEXT:           ParmVarDecl {{.*}} 'const View &'49// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit50 51// CHECK:       CXXMethodDecl {{.*}} push_back 'void (View &&)'52// CHECK-NEXT:           ParmVarDecl {{.*}} 'View &&'53// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit54 55// CHECK:       CXXMethodDecl {{.*}} insert 'void (iterator, View &&)'56// CHECK-NEXT:           ParmVarDecl {{.*}} 'iterator'57// CHECK-NEXT:           ParmVarDecl {{.*}} 'View &&'58// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit59 60template <class T> struct [[gsl::Pointer()]] ViewTemplate {};61std::vector<ViewTemplate<int>> templated_views;62// CHECK:       ClassTemplateSpecializationDecl {{.*}} struct vector definition instantiated_from 0x{{.+}} implicit_instantiation63 64// CHECK:       CXXMethodDecl {{.*}} push_back 'void (const ViewTemplate<int> &)'65// CHECK-NEXT:           ParmVarDecl {{.*}} 'const ViewTemplate<int> &'66// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit67// CHECK-NOT:   LifetimeCaptureByAttr68 69// CHECK:       CXXMethodDecl {{.*}} push_back 'void (ViewTemplate<int> &&)'70// CHECK-NEXT:           ParmVarDecl {{.*}} 'ViewTemplate<int> &&'71// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit72 73// CHECK:       CXXMethodDecl {{.*}} insert 'void (iterator, ViewTemplate<int> &&)'74// CHECK-NEXT:           ParmVarDecl {{.*}} 'iterator'75// CHECK-NEXT:           ParmVarDecl {{.*}} 'ViewTemplate<int> &&'76// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit77 78std::vector<int*> pointers;79// CHECK:   ClassTemplateSpecializationDecl {{.*}} struct vector definition instantiated_from 0x{{.+}} implicit_instantiation80 81// CHECK:       CXXMethodDecl {{.*}} push_back 'void (int *const &)'82// CHECK-NEXT:           ParmVarDecl {{.*}} 'int *const &'83// CHECK-NOT:               LifetimeCaptureByAttr84 85// CHECK:       CXXMethodDecl {{.*}} push_back 'void (int *&&)'86// CHECK-NEXT:           ParmVarDecl {{.*}} 'int *&&'87// CHECK-NOT:               LifetimeCaptureByAttr88 89// CHECK:       CXXMethodDecl {{.*}} insert 'void (iterator, int *&&)'90// CHECK-NEXT:           ParmVarDecl {{.*}} 'iterator'91// CHECK-NEXT:           ParmVarDecl {{.*}} 'int *&&'92// CHECK-NOT:               LifetimeCaptureByAttr93 94std::vector<int> ints;95// CHECK:   ClassTemplateSpecializationDecl {{.*}} struct vector definition instantiated_from 0x{{.+}} implicit_instantiation96// CHECK:       TemplateArgument type 'int'97 98// CHECK:       CXXMethodDecl {{.*}} push_back 'void (const int &)'99// CHECK-NOT:   LifetimeCaptureByAttr100 101// CHECK:       CXXMethodDecl {{.*}} push_back 'void (int &&)'102// CHECK-NOT:   LifetimeCaptureByAttr103 104// CHECK:       CXXMethodDecl {{.*}} insert 'void (iterator, int &&)'105// CHECK-NEXT:           ParmVarDecl {{.*}} 'iterator'106// CHECK-NEXT:           ParmVarDecl {{.*}} 'int &&'107// CHECK-NOT:   LifetimeCaptureByAttr108 109std::map<View, int> map;110// CHECK:   ClassTemplateSpecializationDecl {{.*}} struct map definition instantiated_from 0x{{.+}} implicit_instantiation111 112// CHECK:       CXXMethodDecl {{.*}} operator[] 'int &(View &&)' implicit_instantiation113// CHECK-NEXT:           ParmVarDecl {{.*}} p 'View &&'114// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit115// CHECK:       CXXMethodDecl {{.*}} operator[] 'int &(const View &)' implicit_instantiation116// CHECK-NEXT:           ParmVarDecl {{.*}} p 'const View &'117// CHECK-NEXT:               LifetimeCaptureByAttr {{.*}} Implicit118