Commit 9ca7fc1
fix: Improve SSA tracing for Alloc, nil Phi, and method values (#9)
* fix: Add Alloc tracing and nil Phi edge skipping (#8)
Improves SSA value tracing to handle more patterns correctly:
## Alloc Tracing
- Add `traceAlloc` to find values stored in local variables
- Fixes false positive for `log.Ctx(ctx).With()...Logger()` pattern
- Enables tracking through variable assignments in closures
## Nil Phi Edge Skipping
- Skip nil constant edges in Phi nodes during tracing
- Nil pointers can't have methods called on them, so they're irrelevant
- Fixes false positive for `var e *Event; if cond { e = ... }; if e != nil { e.Msg() }`
## Test Updates
- Remove outdated LIMITATION comments for now-working patterns
- Add test cases for nil Phi edge handling with mixed branches
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add method value (bound method) detection
Detect zerolog terminators called via method values:
e := logger.Info()
msg := e.Msg // MakeClosure with receiver in Bindings[0]
msg("text") // Now detected as terminator
Implementation:
- Check if call value is MakeClosure in checkTerminatorCall
- Extract receiver from MakeClosure.Bindings[0]
- Trace receiver to check for context
This was previously documented as a LIMITATION but is now fully supported.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* docs: Update KNOWN LIMITATIONS in evil_ssa.go
Remove fixed items:
- Method values (now supported)
- Phi node with nil (now handled)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>1 parent bb834f0 commit 9ca7fc1
File tree
5 files changed
+154
-30
lines changed- internal
- testdata/src/zerolog
5 files changed
+154
-30
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
195 | 203 | | |
196 | 204 | | |
197 | 205 | | |
| |||
206 | 214 | | |
207 | 215 | | |
208 | 216 | | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
209 | 245 | | |
210 | 246 | | |
211 | 247 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
79 | 84 | | |
80 | 85 | | |
81 | 86 | | |
| |||
114 | 119 | | |
115 | 120 | | |
116 | 121 | | |
| 122 | + | |
| 123 | + | |
117 | 124 | | |
118 | 125 | | |
119 | 126 | | |
| |||
141 | 148 | | |
142 | 149 | | |
143 | 150 | | |
144 | | - | |
145 | | - | |
146 | | - | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
147 | 162 | | |
148 | 163 | | |
149 | 164 | | |
150 | 165 | | |
151 | 166 | | |
152 | | - | |
| 167 | + | |
153 | 168 | | |
154 | 169 | | |
155 | 170 | | |
156 | 171 | | |
157 | 172 | | |
158 | | - | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
159 | 180 | | |
160 | 181 | | |
161 | 182 | | |
| |||
166 | 187 | | |
167 | 188 | | |
168 | 189 | | |
169 | | - | |
170 | | - | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
171 | 204 | | |
172 | 205 | | |
173 | 206 | | |
| |||
224 | 257 | | |
225 | 258 | | |
226 | 259 | | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
227 | 275 | | |
228 | 276 | | |
229 | 277 | | |
| |||
280 | 328 | | |
281 | 329 | | |
282 | 330 | | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
283 | 347 | | |
284 | 348 | | |
285 | 349 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
58 | 58 | | |
59 | 59 | | |
60 | 60 | | |
61 | | - | |
62 | | - | |
63 | | - | |
64 | | - | |
| 61 | + | |
65 | 62 | | |
66 | 63 | | |
67 | 64 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
185 | 185 | | |
186 | 186 | | |
187 | 187 | | |
188 | | - | |
189 | | - | |
190 | | - | |
| 188 | + | |
191 | 189 | | |
192 | 190 | | |
193 | 191 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | 11 | | |
13 | 12 | | |
14 | 13 | | |
15 | 14 | | |
16 | 15 | | |
17 | 16 | | |
18 | 17 | | |
19 | | - | |
20 | 18 | | |
21 | 19 | | |
22 | 20 | | |
| |||
168 | 166 | | |
169 | 167 | | |
170 | 168 | | |
171 | | - | |
172 | | - | |
| 169 | + | |
173 | 170 | | |
174 | 171 | | |
175 | | - | |
| 172 | + | |
176 | 173 | | |
177 | 174 | | |
178 | 175 | | |
| |||
557 | 554 | | |
558 | 555 | | |
559 | 556 | | |
560 | | - | |
561 | | - | |
| 557 | + | |
562 | 558 | | |
563 | 559 | | |
564 | 560 | | |
565 | 561 | | |
566 | | - | |
| 562 | + | |
567 | 563 | | |
568 | 564 | | |
569 | 565 | | |
570 | 566 | | |
571 | 567 | | |
572 | 568 | | |
573 | 569 | | |
574 | | - | |
575 | | - | |
576 | | - | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
577 | 573 | | |
578 | 574 | | |
579 | | - | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
580 | 582 | | |
581 | 583 | | |
582 | 584 | | |
| |||
941 | 943 | | |
942 | 944 | | |
943 | 945 | | |
944 | | - | |
945 | | - | |
946 | | - | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
947 | 949 | | |
948 | 950 | | |
949 | 951 | | |
950 | 952 | | |
951 | 953 | | |
952 | | - | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
| 965 | + | |
| 966 | + | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
953 | 982 | | |
954 | 983 | | |
955 | 984 | | |
| |||
0 commit comments