Running test-linearize on some of my code, I seem to be losing an
assignment after a break.
In this minimal test code, y should have the previous iteration's value
of x, so the value returned is the difference between the final two
values from fetch():
int fetch(int);
int test(int v) {
int x, y;
for (int i=0; ; i++) {
x = fetch(i);
if (v < x) break;
y = x;
}
return x-y;
}
test-linearize produces:
test:
.L0xb7db300c:
<entry-point>
br .L0xb7db3034
.L0xb7db3034:
call.32 %r2 <- fetch, $0
setlt.32 %r5 <- %arg1, %r2
dead %r5
br %r5, .L0xb7db3084, .L0xb7db3034
.L0xb7db3084:
dead %r2
sub.32 %r11 <- %r2, %r2
dead %r11
ret.32 %r11
So it thinks that both x and y are in %r2. However, if y is initialised,
the assignment happens as expected.
Any ideas?
Dan.
-
To unsubscribe from this list: send the line "unsubscribe linux-sparse" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html