Lines 319-325
Link Here
|
319 |
// prot. non null |
319 |
// prot. non null |
320 |
& ((a2 = this.nullBit2) | (a4 = this.nullBit4)); |
320 |
& ((a2 = this.nullBit2) | (a4 = this.nullBit4)); |
321 |
// null or unknown |
321 |
// null or unknown |
322 |
m2 = s1 & (s2 = this.nullBit2) & (s3 ^ s4) |
322 |
m2 = s1 & (s2 = this.nullBit2) & (s3 ^ s4) // TODO(stephan): potential typo: should this be "s2 = source.nullBit2"??? |
323 |
// prot. null |
323 |
// prot. null |
324 |
& ((a3 = this.nullBit3) | a4); |
324 |
& ((a3 = this.nullBit3) | a4); |
325 |
// non null or unknown |
325 |
// non null or unknown |
Lines 336-341
Link Here
|
336 |
source.nullBit2 &= (nm1 = ~m1) & ((nm2 = ~m2) | a4); |
336 |
source.nullBit2 &= (nm1 = ~m1) & ((nm2 = ~m2) | a4); |
337 |
source.nullBit3 &= (nm1 | a2) & nm2; |
337 |
source.nullBit3 &= (nm1 | a2) & nm2; |
338 |
source.nullBit4 &= nm1 & nm2; |
338 |
source.nullBit4 &= nm1 & nm2; |
|
|
339 |
// any variable that is (pot n, pot nn, pot un) at end of try (as captured by *this* NullInfoRegistry) |
340 |
// has the same uncertainty also for the mitigated case (function result) |
341 |
// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=320170 - [compiler] [null] Whitebox issues in null analysis |
342 |
// and org.eclipse.jdt.core.tests.compiler.regression.NullReferenceTest.test0536_try_finally() |
343 |
long x = ~this.nullBit1 & a2 & a3 & a4; // x is set for all variable ids that have state 0111 (pot n, pot nn, pot un) |
344 |
if (x != 0) { |
345 |
// restore state 0111 for all variable ids in x: |
346 |
source.nullBit1 &= ~x; |
347 |
source.nullBit2 |= x; |
348 |
source.nullBit3 |= x; |
349 |
source.nullBit4 |= x; |
350 |
} |
339 |
} |
351 |
} |
340 |
if (this.extra != null && source.extra != null) { |
352 |
if (this.extra != null && source.extra != null) { |
341 |
int length = this.extra[2].length, sourceLength = source.extra[0].length; |
353 |
int length = this.extra[2].length, sourceLength = source.extra[0].length; |