1*99451b44SJordan Rupprecht //===-- main.cpp ------------------------------------------------*- C++ -*-===//
2*99451b44SJordan Rupprecht //
3*99451b44SJordan Rupprecht // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*99451b44SJordan Rupprecht // See https://llvm.org/LICENSE.txt for license information.
5*99451b44SJordan Rupprecht // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*99451b44SJordan Rupprecht //
7*99451b44SJordan Rupprecht //===----------------------------------------------------------------------===//
8*99451b44SJordan Rupprecht 
9*99451b44SJordan Rupprecht #include <stdio.h>
10*99451b44SJordan Rupprecht 
11*99451b44SJordan Rupprecht template <class T> class A
12*99451b44SJordan Rupprecht {
13*99451b44SJordan Rupprecht public:
14*99451b44SJordan Rupprecht   void accessMember(T a);
15*99451b44SJordan Rupprecht   T accessMemberConst() const;
16*99451b44SJordan Rupprecht   static int accessStaticMember();
17*99451b44SJordan Rupprecht 
18*99451b44SJordan Rupprecht   void accessMemberInline(T a) __attribute__ ((always_inline))
19*99451b44SJordan Rupprecht   {
20*99451b44SJordan Rupprecht     m_a = a; // breakpoint 4
21*99451b44SJordan Rupprecht   }
22*99451b44SJordan Rupprecht 
23*99451b44SJordan Rupprecht   T m_a;
24*99451b44SJordan Rupprecht   static int s_a;
25*99451b44SJordan Rupprecht };
26*99451b44SJordan Rupprecht 
27*99451b44SJordan Rupprecht template <class T> int A<T>::s_a = 5;
28*99451b44SJordan Rupprecht 
29*99451b44SJordan Rupprecht template <class T> void A<T>::accessMember(T a)
30*99451b44SJordan Rupprecht {
31*99451b44SJordan Rupprecht   m_a = a; // breakpoint 1
32*99451b44SJordan Rupprecht }
33*99451b44SJordan Rupprecht 
34*99451b44SJordan Rupprecht template <class T> T A<T>::accessMemberConst() const
35*99451b44SJordan Rupprecht {
36*99451b44SJordan Rupprecht   return m_a; // breakpoint 2
37*99451b44SJordan Rupprecht }
38*99451b44SJordan Rupprecht 
39*99451b44SJordan Rupprecht template <class T> int A<T>::accessStaticMember()
40*99451b44SJordan Rupprecht {
41*99451b44SJordan Rupprecht   return s_a; // breakpoint 3
42*99451b44SJordan Rupprecht }
43*99451b44SJordan Rupprecht 
44*99451b44SJordan Rupprecht int main()
45*99451b44SJordan Rupprecht {
46*99451b44SJordan Rupprecht   A<int> my_a;
47*99451b44SJordan Rupprecht 
48*99451b44SJordan Rupprecht   my_a.accessMember(3);
49*99451b44SJordan Rupprecht   my_a.accessMemberConst();
50*99451b44SJordan Rupprecht   A<int>::accessStaticMember();
51*99451b44SJordan Rupprecht   my_a.accessMemberInline(5);
52*99451b44SJordan Rupprecht }
53