xref: /llvm-project/clang/test/PCH/captured-stmt.cpp (revision ce914fc84bd55818a71bbad8fef1a38932ae0afe)
1*ce914fc8SBen Langmuir // RUN: %clang_cc1 -x c++-header -emit-pch %s -o %t
2*ce914fc8SBen Langmuir // RUN: %clang_cc1 -include-pch %t -fsyntax-only -verify %s
3*ce914fc8SBen Langmuir 
4*ce914fc8SBen Langmuir // expected-no-diagnostics
5*ce914fc8SBen Langmuir 
6*ce914fc8SBen Langmuir #ifndef HEADER_INCLUDED
7*ce914fc8SBen Langmuir #define HEADER_INCLUDED
8*ce914fc8SBen Langmuir 
foo(int & x,int y)9*ce914fc8SBen Langmuir static inline void foo(int &x, int y) {
10*ce914fc8SBen Langmuir   // Capturing x and y
11*ce914fc8SBen Langmuir   #pragma clang __debug captured
12*ce914fc8SBen Langmuir   {
13*ce914fc8SBen Langmuir     x += y;
14*ce914fc8SBen Langmuir   }
15*ce914fc8SBen Langmuir }
16*ce914fc8SBen Langmuir 
17*ce914fc8SBen Langmuir struct C {
18*ce914fc8SBen Langmuir   int val;
19*ce914fc8SBen Langmuir 
CC20*ce914fc8SBen Langmuir   explicit C(int v) : val(v) { }
21*ce914fc8SBen Langmuir 
barC22*ce914fc8SBen Langmuir   void bar(int &x) {
23*ce914fc8SBen Langmuir     // Capturing x and this
24*ce914fc8SBen Langmuir     #pragma clang __debug captured
25*ce914fc8SBen Langmuir     {
26*ce914fc8SBen Langmuir       x += val;
27*ce914fc8SBen Langmuir     }
28*ce914fc8SBen Langmuir   }
29*ce914fc8SBen Langmuir };
30*ce914fc8SBen Langmuir 
31*ce914fc8SBen Langmuir #else
32*ce914fc8SBen Langmuir 
test_foo(int & x)33*ce914fc8SBen Langmuir void test_foo(int &x) {
34*ce914fc8SBen Langmuir   foo(x, 10);
35*ce914fc8SBen Langmuir }
36*ce914fc8SBen Langmuir 
test_bar(int & x)37*ce914fc8SBen Langmuir void test_bar(int &x) {
38*ce914fc8SBen Langmuir   C Obj(10);
39*ce914fc8SBen Langmuir   Obj.bar(x);
40*ce914fc8SBen Langmuir }
41*ce914fc8SBen Langmuir 
42*ce914fc8SBen Langmuir #endif
43