Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / unittests / Tooling / RecursiveASTVisitorTests / CallbacksCompoundAssignOperator.cpp
blobf381d5e88a59f414a20268900c5b5d2688093d6e
1 //===- unittests/Tooling/RecursiveASTVisitorTests/CallbacksCompoundAssignOperator.cpp -===//
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 //===----------------------------------------------------------------------===//
9 #include "CallbacksCommon.h"
11 TEST(RecursiveASTVisitor, StmtCallbacks_TraverseCompoundAssignOperator) {
12 class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
13 public:
14 RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
15 : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
17 bool TraverseCompoundAssignOperator(CompoundAssignOperator *CAO) {
18 recordCallback(__func__, CAO, [&]() {
19 RecordingVisitorBase::TraverseCompoundAssignOperator(CAO);
20 });
21 return true;
24 bool WalkUpFromStmt(Stmt *S) {
25 recordCallback(__func__, S,
26 [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
27 return true;
31 StringRef Code = R"cpp(
32 void test(int a) {
34 a += 2;
37 )cpp";
39 EXPECT_TRUE(visitorCallbackLogEqual(
40 RecordingVisitor(ShouldTraversePostOrder::No), Code,
41 R"txt(
42 WalkUpFromStmt CompoundStmt
43 WalkUpFromStmt IntegerLiteral(1)
44 TraverseCompoundAssignOperator CompoundAssignOperator(+=)
45 WalkUpFromStmt CompoundAssignOperator(+=)
46 WalkUpFromStmt DeclRefExpr(a)
47 WalkUpFromStmt IntegerLiteral(2)
48 WalkUpFromStmt IntegerLiteral(3)
49 )txt"));
51 EXPECT_TRUE(visitorCallbackLogEqual(
52 RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
53 R"txt(
54 WalkUpFromStmt IntegerLiteral(1)
55 TraverseCompoundAssignOperator CompoundAssignOperator(+=)
56 WalkUpFromStmt DeclRefExpr(a)
57 WalkUpFromStmt IntegerLiteral(2)
58 WalkUpFromStmt CompoundAssignOperator(+=)
59 WalkUpFromStmt IntegerLiteral(3)
60 WalkUpFromStmt CompoundStmt
61 )txt"));
64 TEST(
65 RecursiveASTVisitor,
66 StmtCallbacks_TraverseCompoundAssignOperator_WalkUpFromCompoundAssignOperator) {
67 class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
68 public:
69 RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
70 : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
72 bool TraverseCompoundAssignOperator(CompoundAssignOperator *CAO) {
73 recordCallback(__func__, CAO, [&]() {
74 RecordingVisitorBase::TraverseCompoundAssignOperator(CAO);
75 });
76 return true;
79 bool WalkUpFromStmt(Stmt *S) {
80 recordCallback(__func__, S,
81 [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
82 return true;
85 bool WalkUpFromExpr(Expr *E) {
86 recordCallback(__func__, E,
87 [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });
88 return true;
91 bool WalkUpFromCompoundAssignOperator(CompoundAssignOperator *CAO) {
92 recordCallback(__func__, CAO, [&]() {
93 RecordingVisitorBase::WalkUpFromCompoundAssignOperator(CAO);
94 });
95 return true;
99 StringRef Code = R"cpp(
100 void test(int a) {
102 a += 2;
105 )cpp";
107 EXPECT_TRUE(visitorCallbackLogEqual(
108 RecordingVisitor(ShouldTraversePostOrder::No), Code,
109 R"txt(
110 WalkUpFromStmt CompoundStmt
111 WalkUpFromExpr IntegerLiteral(1)
112 WalkUpFromStmt IntegerLiteral(1)
113 TraverseCompoundAssignOperator CompoundAssignOperator(+=)
114 WalkUpFromCompoundAssignOperator CompoundAssignOperator(+=)
115 WalkUpFromExpr CompoundAssignOperator(+=)
116 WalkUpFromStmt CompoundAssignOperator(+=)
117 WalkUpFromExpr DeclRefExpr(a)
118 WalkUpFromStmt DeclRefExpr(a)
119 WalkUpFromExpr IntegerLiteral(2)
120 WalkUpFromStmt IntegerLiteral(2)
121 WalkUpFromExpr IntegerLiteral(3)
122 WalkUpFromStmt IntegerLiteral(3)
123 )txt"));
125 EXPECT_TRUE(visitorCallbackLogEqual(
126 RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
127 R"txt(
128 WalkUpFromExpr IntegerLiteral(1)
129 WalkUpFromStmt IntegerLiteral(1)
130 TraverseCompoundAssignOperator CompoundAssignOperator(+=)
131 WalkUpFromExpr DeclRefExpr(a)
132 WalkUpFromStmt DeclRefExpr(a)
133 WalkUpFromExpr IntegerLiteral(2)
134 WalkUpFromStmt IntegerLiteral(2)
135 WalkUpFromCompoundAssignOperator CompoundAssignOperator(+=)
136 WalkUpFromExpr CompoundAssignOperator(+=)
137 WalkUpFromStmt CompoundAssignOperator(+=)
138 WalkUpFromExpr IntegerLiteral(3)
139 WalkUpFromStmt IntegerLiteral(3)
140 WalkUpFromStmt CompoundStmt
141 )txt"));
144 TEST(RecursiveASTVisitor, StmtCallbacks_WalkUpFromCompoundAssignOperator) {
145 class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
146 public:
147 RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
148 : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
150 bool WalkUpFromStmt(Stmt *S) {
151 recordCallback(__func__, S,
152 [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
153 return true;
156 bool WalkUpFromExpr(Expr *E) {
157 recordCallback(__func__, E,
158 [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });
159 return true;
162 bool WalkUpFromCompoundAssignOperator(CompoundAssignOperator *CAO) {
163 recordCallback(__func__, CAO, [&]() {
164 RecordingVisitorBase::WalkUpFromCompoundAssignOperator(CAO);
166 return true;
170 StringRef Code = R"cpp(
171 void test(int a) {
173 a += 2;
176 )cpp";
178 EXPECT_TRUE(visitorCallbackLogEqual(
179 RecordingVisitor(ShouldTraversePostOrder::No), Code,
180 R"txt(
181 WalkUpFromStmt CompoundStmt
182 WalkUpFromExpr IntegerLiteral(1)
183 WalkUpFromStmt IntegerLiteral(1)
184 WalkUpFromCompoundAssignOperator CompoundAssignOperator(+=)
185 WalkUpFromExpr CompoundAssignOperator(+=)
186 WalkUpFromStmt CompoundAssignOperator(+=)
187 WalkUpFromExpr DeclRefExpr(a)
188 WalkUpFromStmt DeclRefExpr(a)
189 WalkUpFromExpr IntegerLiteral(2)
190 WalkUpFromStmt IntegerLiteral(2)
191 WalkUpFromExpr IntegerLiteral(3)
192 WalkUpFromStmt IntegerLiteral(3)
193 )txt"));
195 EXPECT_TRUE(visitorCallbackLogEqual(
196 RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
197 R"txt(
198 WalkUpFromExpr IntegerLiteral(1)
199 WalkUpFromStmt IntegerLiteral(1)
200 WalkUpFromExpr DeclRefExpr(a)
201 WalkUpFromStmt DeclRefExpr(a)
202 WalkUpFromExpr IntegerLiteral(2)
203 WalkUpFromStmt IntegerLiteral(2)
204 WalkUpFromCompoundAssignOperator CompoundAssignOperator(+=)
205 WalkUpFromExpr CompoundAssignOperator(+=)
206 WalkUpFromStmt CompoundAssignOperator(+=)
207 WalkUpFromExpr IntegerLiteral(3)
208 WalkUpFromStmt IntegerLiteral(3)
209 WalkUpFromStmt CompoundStmt
210 )txt"));