llvm.org GIT mirror llvm / e18f64c
[LVI] Fix potential memory corruption in getValueFromCondition Rewrite Visited[Cond] = getValueFromConditionImpl(..., Visited) statement which can lead to a memory corruption since getValueFromConditionImpl changes Visited map and invalidates the iterators. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278514 91177308-0d34-0410-b5e6-96231b3b80d8 Artur Pilipenko 3 years ago
2 changed file(s) with 144 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
12591259 auto I = Visited.find(Cond);
12601260 if (I != Visited.end())
12611261 return I->second;
1262 return Visited[Cond] = getValueFromConditionImpl(Val, Cond, isTrueDest,
1263 Visited);
1262
1263 auto Result = getValueFromConditionImpl(Val, Cond, isTrueDest, Visited);
1264 Visited[Cond] = Result;
1265 return Result;
12641266 }
12651267
12661268 LVILatticeVal getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest) {
5959 return: ; preds = %for.cond.i, %for.body
6060 ret void
6161 }
62
63 define i1 @test4(i32 %int) {
64 %a0 = icmp ult i32 %int, 100
65 %a1 = and i1 %a0, %a0
66 %a2 = and i1 %a1, %a1
67 %a3 = and i1 %a2, %a2
68 %a4 = and i1 %a3, %a3
69 %a5 = and i1 %a4, %a4
70 %a6 = and i1 %a5, %a5
71 %a7 = and i1 %a6, %a6
72 %a8 = and i1 %a7, %a7
73 %a9 = and i1 %a8, %a8
74 %a10 = and i1 %a9, %a9
75 %a11 = and i1 %a10, %a10
76 %a12 = and i1 %a11, %a11
77 %a13 = and i1 %a12, %a12
78 %a14 = and i1 %a13, %a13
79 %a15 = and i1 %a14, %a14
80 %a16 = and i1 %a15, %a15
81 %a17 = and i1 %a16, %a16
82 %a18 = and i1 %a17, %a17
83 %a19 = and i1 %a18, %a18
84 %a20 = and i1 %a19, %a19
85 %a21 = and i1 %a20, %a20
86 %a22 = and i1 %a21, %a21
87 %a23 = and i1 %a22, %a22
88 %a24 = and i1 %a23, %a23
89 %a25 = and i1 %a24, %a24
90 %a26 = and i1 %a25, %a25
91 %a27 = and i1 %a26, %a26
92 %a28 = and i1 %a27, %a27
93 %a29 = and i1 %a28, %a28
94 %a30 = and i1 %a29, %a29
95 %a31 = and i1 %a30, %a30
96 %a32 = and i1 %a31, %a31
97 %a33 = and i1 %a32, %a32
98 %a34 = and i1 %a33, %a33
99 %a35 = and i1 %a34, %a34
100 %a36 = and i1 %a35, %a35
101 %a37 = and i1 %a36, %a36
102 %a38 = and i1 %a37, %a37
103 %a39 = and i1 %a38, %a38
104 %a40 = and i1 %a39, %a39
105 %a41 = and i1 %a40, %a40
106 %a42 = and i1 %a41, %a41
107 %a43 = and i1 %a42, %a42
108 %a44 = and i1 %a43, %a43
109 %a45 = and i1 %a44, %a44
110 %a46 = and i1 %a45, %a45
111 %a47 = and i1 %a46, %a46
112 %a48 = and i1 %a47, %a47
113 %a49 = and i1 %a48, %a48
114 %a50 = and i1 %a49, %a49
115 %a51 = and i1 %a50, %a50
116 %a52 = and i1 %a51, %a51
117 %a53 = and i1 %a52, %a52
118 %a54 = and i1 %a53, %a53
119 %a55 = and i1 %a54, %a54
120 %a56 = and i1 %a55, %a55
121 %a57 = and i1 %a56, %a56
122 %a58 = and i1 %a57, %a57
123 %a59 = and i1 %a58, %a58
124 %a60 = and i1 %a59, %a59
125 %a61 = and i1 %a60, %a60
126 %a62 = and i1 %a61, %a61
127 %a63 = and i1 %a62, %a62
128 %a64 = and i1 %a63, %a63
129 %a65 = and i1 %a64, %a64
130 %a66 = and i1 %a65, %a65
131 %a67 = and i1 %a66, %a66
132 %a68 = and i1 %a67, %a67
133 %a69 = and i1 %a68, %a68
134 %a70 = and i1 %a69, %a69
135 %a71 = and i1 %a70, %a70
136 %a72 = and i1 %a71, %a71
137 %a73 = and i1 %a72, %a72
138 %a74 = and i1 %a73, %a73
139 %a75 = and i1 %a74, %a74
140 %a76 = and i1 %a75, %a75
141 %a77 = and i1 %a76, %a76
142 %a78 = and i1 %a77, %a77
143 %a79 = and i1 %a78, %a78
144 %a80 = and i1 %a79, %a79
145 %a81 = and i1 %a80, %a80
146 %a82 = and i1 %a81, %a81
147 %a83 = and i1 %a82, %a82
148 %a84 = and i1 %a83, %a83
149 %a85 = and i1 %a84, %a84
150 %a86 = and i1 %a85, %a85
151 %a87 = and i1 %a86, %a86
152 %a88 = and i1 %a87, %a87
153 %a89 = and i1 %a88, %a88
154 %a90 = and i1 %a89, %a89
155 %a91 = and i1 %a90, %a90
156 %a92 = and i1 %a91, %a91
157 %a93 = and i1 %a92, %a92
158 %a94 = and i1 %a93, %a93
159 %a95 = and i1 %a94, %a94
160 %a96 = and i1 %a95, %a95
161 %a97 = and i1 %a96, %a96
162 %a98 = and i1 %a97, %a97
163 %a99 = and i1 %a98, %a98
164 %a100 = and i1 %a99, %a99
165 %a101 = and i1 %a100, %a100
166 %a102 = and i1 %a101, %a101
167 %a103 = and i1 %a102, %a102
168 %a104 = and i1 %a103, %a103
169 %a105 = and i1 %a104, %a104
170 %a106 = and i1 %a105, %a105
171 %a107 = and i1 %a106, %a106
172 %a108 = and i1 %a107, %a107
173 %a109 = and i1 %a108, %a108
174 %a110 = and i1 %a109, %a109
175 %a111 = and i1 %a110, %a110
176 %a112 = and i1 %a111, %a111
177 %a113 = and i1 %a112, %a112
178 %a114 = and i1 %a113, %a113
179 %a115 = and i1 %a114, %a114
180 %a116 = and i1 %a115, %a115
181 %a117 = and i1 %a116, %a116
182 %a118 = and i1 %a117, %a117
183 %a119 = and i1 %a118, %a118
184 %a120 = and i1 %a119, %a119
185 %a121 = and i1 %a120, %a120
186 %a122 = and i1 %a121, %a121
187 %a123 = and i1 %a122, %a122
188 %a124 = and i1 %a123, %a123
189 %a125 = and i1 %a124, %a124
190 %a126 = and i1 %a125, %a125
191 %a127 = and i1 %a126, %a126
192 %cond = and i1 %a127, %a127
193 br i1 %cond, label %then, label %else
194
195 then:
196 %result = icmp eq i32 %int, 255
197 ret i1 %result
198
199 else:
200 ret i1 false
201 }