xref: /llvm-project/clang/test/Interpreter/execute-stmts.cpp (revision 4b70d17bcffaffd75a5d8c420396f8dc755b4652)
1dc488935SVassil Vassilev // REQUIRES: host-supports-jit
2dc488935SVassil Vassilev // UNSUPPORTED: system-aix
3dc488935SVassil Vassilev // RUN: cat %s | clang-repl -Xcc -Xclang -Xcc  -verify | FileCheck %s
4dc488935SVassil Vassilev // RUN: %clang_cc1 -verify -fincremental-extensions -emit-llvm -o -  %s \
5dc488935SVassil Vassilev // RUN:           | FileCheck --check-prefix=CODEGEN-CHECK %s
6dc488935SVassil Vassilev 
7dc488935SVassil Vassilev // expected-no-diagnostics
8dc488935SVassil Vassilev 
9dc488935SVassil Vassilev //CODEGEN-CHECK-COUNT-2: define internal void @__stmts__
10dc488935SVassil Vassilev //CODEGEN-CHECK-NOT: define internal void @__stmts__
11dc488935SVassil Vassilev 
12dc488935SVassil Vassilev extern "C" int printf(const char*,...);
13dc488935SVassil Vassilev 
call()14dc488935SVassil Vassilev template <typename T> T call() { printf("called\n"); return T(); }
15dc488935SVassil Vassilev call<int>();
16dc488935SVassil Vassilev // CHECK: called
17dc488935SVassil Vassilev 
18dc488935SVassil Vassilev int i = 1;
19dc488935SVassil Vassilev ++i;
20dc488935SVassil Vassilev printf("i = %d\n", i);
21dc488935SVassil Vassilev // CHECK: i = 2
22dc488935SVassil Vassilev 
f()23dc488935SVassil Vassilev namespace Ns { void f(){ i++; } }
24dc488935SVassil Vassilev Ns::f();
25dc488935SVassil Vassilev 
g()26dc488935SVassil Vassilev void g() { ++i; }
27dc488935SVassil Vassilev g();
28dc488935SVassil Vassilev ::g();
29dc488935SVassil Vassilev 
30dc488935SVassil Vassilev printf("i = %d\n", i);
31dc488935SVassil Vassilev // CHECK-NEXT: i = 5
32dc488935SVassil Vassilev 
33dc488935SVassil Vassilev for (; i > 4; --i) printf("i = %d\n", i);
34dc488935SVassil Vassilev // CHECK-NEXT: i = 5
35dc488935SVassil Vassilev 
36159073bcSVassil Vassilev {++i;}
37159073bcSVassil Vassilev 
38159073bcSVassil Vassilev for (; i > 4; --i) { printf("i = %d\n", i); };
39159073bcSVassil Vassilev // CHECK-NEXT: i = 5
40159073bcSVassil Vassilev 
41dc488935SVassil Vassilev int j = i; printf("j = %d\n", j);
42dc488935SVassil Vassilev // CHECK-NEXT: j = 4
43*4b70d17bSStefan Gränitz 
44*4b70d17bSStefan Gränitz {i = 0; printf("i = %d (global scope)\n", i);}
45*4b70d17bSStefan Gränitz // CHECK-NEXT: i = 0
46*4b70d17bSStefan Gränitz 
47*4b70d17bSStefan Gränitz while (int i = 1) { printf("i = %d (while condition)\n", i--); break; }
48*4b70d17bSStefan Gränitz // CHECK-NEXT: i = 1
49*4b70d17bSStefan Gränitz 
50*4b70d17bSStefan Gränitz if (int i = 2) printf("i = %d (if condition)\n", i);
51*4b70d17bSStefan Gränitz // CHECK-NEXT: i = 2
52*4b70d17bSStefan Gränitz 
53*4b70d17bSStefan Gränitz switch (int i = 3) { default: printf("i = %d (switch condition)\n", i); }
54*4b70d17bSStefan Gränitz // CHECK-NEXT: i = 3
55*4b70d17bSStefan Gränitz 
56*4b70d17bSStefan Gränitz for (int i = 4; i > 3; --i) printf("i = %d (for-init)\n", i);
57*4b70d17bSStefan Gränitz // CHECK-NEXT: i = 4
58*4b70d17bSStefan Gränitz 
59*4b70d17bSStefan Gränitz for (const auto &i : "5") printf("i = %c (range-based for-init)\n", i);
60*4b70d17bSStefan Gränitz // CHECK-NEXT: i = 5
61*4b70d17bSStefan Gränitz 
62*4b70d17bSStefan Gränitz int *aa=nullptr;
63*4b70d17bSStefan Gränitz if (auto *b=aa) *b += 1;
64*4b70d17bSStefan Gränitz while (auto *b=aa) ;
65*4b70d17bSStefan Gränitz for (auto *b=aa; b; *b+=1) ;
66